feat(f4): add explicit act lifecycle web contract
This commit is contained in:
@@ -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`);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user