feat(f4): add explicit act lifecycle web contract

This commit is contained in:
2026-09-08 10:23:49 -03:00
parent f7a4e7f228
commit 8c89cd05c9
+204
View File
@@ -0,0 +1,204 @@
import {
apiRequest,
type InspectionActResponsible,
type InspectionActSignature,
type InspectionActUploadMode,
type InspectionAssetSummary,
type InspectionPerson,
type InspectionReportPdfStatus,
type InspectionReportStatus,
type InspectionVisitStatus,
type PageMeta,
} from './api';
export type InspectionActStatusF4 =
| 'DRAFT'
| 'LOCKED'
| 'SEALED'
| 'CANCELLED'
// Valores históricos conservados sólo para lectura de registros anteriores a F4.
| 'READY'
| 'CLOSED'
| 'RECTIFIED';
export type InspectionActVersionEventF4 =
| 'CREATED'
| 'UPDATED'
| 'LOCKED'
| 'SEALED'
| 'CANCELLED'
// Eventos históricos conservados sólo para lectura.
| 'READY'
| 'REOPENED'
| 'CLOSED';
export type InspectionActUrgencyF4 = 'URGENT' | 'NON_URGENT';
export type InspectionDeadlineDayTypeF4 = 'BUSINESS' | 'CALENDAR';
export type InspectionDeadlineBasisF4 = 'ACT_DATE' | 'GEDO_DATE';
export interface InspectionActListItemF4 {
id: string;
visitId: string;
visit: {
id: string;
code: string;
status: InspectionVisitStatus;
actualStartedAt: string | null;
};
actYear: number;
actNumber: number;
code: string;
status: InspectionActStatusF4;
occurredAt: string;
title: string;
summary: string;
observations: string | null;
urgency: InspectionActUrgencyF4;
deadlineDays: number | null;
deadlineDayType: InspectionDeadlineDayTypeF4 | null;
deadlineBasis: InspectionDeadlineBasisF4 | null;
deadlineBaseAt: string | null;
deadlineAt: string | null;
lockedAt: string | null;
lockedBy: string | null;
lockedSha256: string | null;
sealedAt: string | null;
sealedBy: string | null;
currentVersion: number;
cancellationReason: string | null;
closedAt: string | null;
closedBy: string | null;
closureSha256: string | null;
assetCount: number;
findingCount: number;
companies: Array<{ id: string; code: string; name: string }>;
areas: Array<{ id: string; code: string; name: string }>;
report: null | {
id: string;
code: string;
status: InspectionReportStatus;
pdfStatus: InspectionReportPdfStatus;
generatedAt: string;
};
createdBy: InspectionPerson | null;
updatedBy: InspectionPerson | null;
createdAt: string;
updatedAt: string;
}
export interface InspectionActVersionF4 {
id: string;
versionNumber: number;
event: InspectionActVersionEventF4;
snapshot: Record<string, unknown>;
actorUserId: string | null;
actorUsername: string | null;
createdAt: string;
}
export interface InspectionActF4 extends InspectionActListItemF4 {
assets: InspectionAssetSummary[];
versions: InspectionActVersionF4[];
}
export interface InspectionClosureF4 {
act: {
id: string;
code: string;
status: InspectionActStatusF4;
visitId: string;
urgency: InspectionActUrgencyF4;
deadlineDays: number | null;
deadlineDayType: InspectionDeadlineDayTypeF4 | null;
deadlineBasis: InspectionDeadlineBasisF4 | null;
deadlineBaseAt: string | null;
deadlineAt: string | null;
lockedAt: string | null;
lockedSha256: string | null;
sealedAt: string | null;
currentVersion: number;
closedAt: string | null;
closedBy: string | null;
closureSha256: string | null;
};
visit: {
id: string;
code: string;
status: InspectionVisitStatus;
actualClosedAt: string | null;
};
responsible: InspectionActResponsible | null;
closure: null | {
schemaVersion: string;
preparedSha256: string;
preparedAt: string;
preparedBy: string;
finalSha256: string | null;
deviceClosedAt: string | null;
serverClosedAt: string | null;
uploadMode: InspectionActUploadMode | null;
closedBy: string | null;
isCurrent: boolean;
};
signatures: InspectionActSignature[];
consents: {
version: string;
inspector: string;
company: string;
};
}
export interface InspectionActPageF4 {
data: InspectionActListItemF4[];
meta: PageMeta;
}
export function listInspectionActsF4(visitId: string, params: {
page?: number;
pageSize?: number;
search?: string;
status?: InspectionActStatusF4 | '';
} = {}) {
const query = new URLSearchParams({
page: String(params.page ?? 1),
pageSize: String(params.pageSize ?? 25),
});
if (params.search) query.set('search', params.search);
if (params.status) query.set('status', params.status);
return apiRequest<InspectionActPageF4>(`/inspection-visits/${visitId}/acts?${query}`);
}
export function listInspectionActsGlobalF4(params: {
page?: number;
pageSize?: number;
search?: string;
status?: InspectionActStatusF4 | '';
year?: number | '';
companyId?: string;
areaId?: string;
inspectorId?: string;
dateFrom?: string;
dateTo?: string;
} = {}) {
const query = new URLSearchParams({
page: String(params.page ?? 1),
pageSize: String(params.pageSize ?? 25),
});
if (params.search) query.set('search', params.search);
if (params.status) query.set('status', params.status);
if (params.year) query.set('year', String(params.year));
if (params.companyId) query.set('companyId', params.companyId);
if (params.areaId) query.set('areaId', params.areaId);
if (params.inspectorId) query.set('inspectorId', params.inspectorId);
if (params.dateFrom) query.set('dateFrom', params.dateFrom);
if (params.dateTo) query.set('dateTo', params.dateTo);
return apiRequest<InspectionActPageF4>(`/inspection-acts?${query}`);
}
export function getInspectionActF4(id: string) {
return apiRequest<InspectionActF4>(`/inspection-acts/${id}`);
}
export function getInspectionClosureF4(actId: string) {
return apiRequest<InspectionClosureF4>(`/inspection-acts/${actId}/closure`);
}