@muni-sanfer/types-gestor-documental 0.0.1-beta.23 → 0.0.1-beta.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base/entities.d.ts +132 -2
- package/dist/base/entities.js +44 -1
- package/dist/contracts/accessRequest.contract.d.ts +109 -0
- package/dist/contracts/accessRequest.contract.js +12 -0
- package/dist/contracts/archivalSeries.contract.d.ts +6 -0
- package/dist/contracts/index.d.ts +20 -1
- package/dist/contracts/index.js +6 -0
- package/dist/contracts/repositoryExport.contract.d.ts +2 -0
- package/dist/contracts/retention.contract.d.ts +58 -0
- package/dist/contracts/retention.contract.js +11 -0
- package/dist/entities/accessRequest/accessRequest.entity.d.ts +73 -0
- package/dist/entities/accessRequest/accessRequest.entity.js +2 -0
- package/dist/entities/accessRequest/index.d.ts +1 -0
- package/dist/entities/accessRequest/index.js +17 -0
- package/dist/entities/archivalSeries/archivalSeries.entity.d.ts +5 -0
- package/dist/entities/index.d.ts +2 -0
- package/dist/entities/index.js +2 -0
- package/dist/entities/retention/index.d.ts +1 -0
- package/dist/entities/retention/index.js +17 -0
- package/dist/entities/retention/retention.entity.d.ts +49 -0
- package/dist/entities/retention/retention.entity.js +2 -0
- package/package.json +1 -1
- package/src/base/entities.ts +161 -2
- package/src/contracts/accessRequest.contract.ts +81 -0
- package/src/contracts/archivalSeries.contract.ts +6 -0
- package/src/contracts/index.ts +9 -1
- package/src/contracts/repositoryExport.contract.ts +2 -0
- package/src/contracts/retention.contract.ts +44 -0
- package/src/entities/accessRequest/accessRequest.entity.ts +78 -0
- package/src/entities/accessRequest/index.ts +1 -0
- package/src/entities/archivalSeries/archivalSeries.entity.ts +5 -0
- package/src/entities/index.ts +2 -0
- package/src/entities/retention/index.ts +1 -0
- package/src/entities/retention/retention.entity.ts +53 -0
package/dist/entities/index.d.ts
CHANGED
package/dist/entities/index.js
CHANGED
|
@@ -31,3 +31,5 @@ __exportStar(require("./indicators"), exports);
|
|
|
31
31
|
__exportStar(require("./audit"), exports);
|
|
32
32
|
__exportStar(require("./signatureCheck"), exports);
|
|
33
33
|
__exportStar(require("./repositoryExport"), exports);
|
|
34
|
+
__exportStar(require("./retention"), exports);
|
|
35
|
+
__exportStar(require("./accessRequest"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './retention.entity';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./retention.entity"), exports);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type DispositionKind, type FinalDisposition } from '../../base/entities';
|
|
2
|
+
/** Una serie con su Tabla de Retención y cuánto venció. */
|
|
3
|
+
export interface RetentionSeriesEntity {
|
|
4
|
+
seriesId: string;
|
|
5
|
+
code: string;
|
|
6
|
+
name: string;
|
|
7
|
+
section: string | null;
|
|
8
|
+
managementYears: number;
|
|
9
|
+
centralYears: number;
|
|
10
|
+
finalDisposition: FinalDisposition;
|
|
11
|
+
retentionNote: string | null;
|
|
12
|
+
/** Documentos firmados y expedientes cerrados cuyo plazo terminó y aún no tienen acta. */
|
|
13
|
+
documentsDue: number;
|
|
14
|
+
caseFilesDue: number;
|
|
15
|
+
/** Actas ya emitidas de la serie. */
|
|
16
|
+
dispositions: number;
|
|
17
|
+
}
|
|
18
|
+
export interface RetentionSummaryEntity {
|
|
19
|
+
series: RetentionSeriesEntity[];
|
|
20
|
+
/** Series habilitadas sin plazos: sus documentos no vencen. */
|
|
21
|
+
seriesWithoutRetention: number;
|
|
22
|
+
}
|
|
23
|
+
/** Un documento o expediente cuyo plazo de retención terminó. */
|
|
24
|
+
export interface RetentionDueItemEntity {
|
|
25
|
+
kind: 'Document' | 'CaseFile';
|
|
26
|
+
id: string;
|
|
27
|
+
/** Folio del documento o IUIe del expediente. */
|
|
28
|
+
reference: string;
|
|
29
|
+
title: string;
|
|
30
|
+
/** Desde cuándo se cuenta: la última firma del documento o el cierre del expediente. */
|
|
31
|
+
baseDate: string;
|
|
32
|
+
dueAt: string;
|
|
33
|
+
}
|
|
34
|
+
export interface DispositionRecordResponseEntity {
|
|
35
|
+
id: string;
|
|
36
|
+
kind: DispositionKind;
|
|
37
|
+
number: number;
|
|
38
|
+
year: number;
|
|
39
|
+
/** «Acta de transferencia N° 1/2026». */
|
|
40
|
+
label: string;
|
|
41
|
+
seriesId: string;
|
|
42
|
+
seriesCode: string;
|
|
43
|
+
seriesName: string;
|
|
44
|
+
observation: string | null;
|
|
45
|
+
documents: number;
|
|
46
|
+
caseFiles: number;
|
|
47
|
+
createdByFullName: string;
|
|
48
|
+
createdAt: string;
|
|
49
|
+
}
|
package/package.json
CHANGED
package/src/base/entities.ts
CHANGED
|
@@ -65,7 +65,8 @@ export type DocumentTrackingAction =
|
|
|
65
65
|
| 'DispatchReturned'
|
|
66
66
|
| 'Received'
|
|
67
67
|
| 'EmailCopySent'
|
|
68
|
-
| 'EmailCopyOpened'
|
|
68
|
+
| 'EmailCopyOpened'
|
|
69
|
+
| 'DispositionRecorded';
|
|
69
70
|
|
|
70
71
|
export const DocumentTrackingAction = {
|
|
71
72
|
Created: 'Created',
|
|
@@ -87,6 +88,7 @@ export const DocumentTrackingAction = {
|
|
|
87
88
|
Received: 'Received',
|
|
88
89
|
EmailCopySent: 'EmailCopySent',
|
|
89
90
|
EmailCopyOpened: 'EmailCopyOpened',
|
|
91
|
+
DispositionRecorded: 'DispositionRecorded',
|
|
90
92
|
} satisfies Record<string, DocumentTrackingAction>;
|
|
91
93
|
|
|
92
94
|
export type DocumentOrigin = 'Internal' | 'DocDigital';
|
|
@@ -228,7 +230,8 @@ export type CaseFileTrackingAction =
|
|
|
228
230
|
| 'Closed'
|
|
229
231
|
| 'Exported'
|
|
230
232
|
| 'ShareLinkCreated'
|
|
231
|
-
| 'ShareLinkRevoked'
|
|
233
|
+
| 'ShareLinkRevoked'
|
|
234
|
+
| 'DispositionRecorded';
|
|
232
235
|
|
|
233
236
|
export const CaseFileTrackingAction = {
|
|
234
237
|
Created: 'Created',
|
|
@@ -242,6 +245,7 @@ export const CaseFileTrackingAction = {
|
|
|
242
245
|
Exported: 'Exported',
|
|
243
246
|
ShareLinkCreated: 'ShareLinkCreated',
|
|
244
247
|
ShareLinkRevoked: 'ShareLinkRevoked',
|
|
248
|
+
DispositionRecorded: 'DispositionRecorded',
|
|
245
249
|
} satisfies Record<string, CaseFileTrackingAction>;
|
|
246
250
|
|
|
247
251
|
export type CaseFileAccessAction = 'Viewed' | 'FileDownloaded' | 'Exported';
|
|
@@ -344,6 +348,76 @@ export const AuditAction = {
|
|
|
344
348
|
Exported: 'Exported',
|
|
345
349
|
} satisfies Record<string, AuditAction>;
|
|
346
350
|
|
|
351
|
+
export type FinalDisposition = 'Permanent' | 'Eliminate' | 'Select';
|
|
352
|
+
|
|
353
|
+
export const FinalDisposition = {
|
|
354
|
+
Permanent: 'Permanent',
|
|
355
|
+
Eliminate: 'Eliminate',
|
|
356
|
+
Select: 'Select',
|
|
357
|
+
} satisfies Record<string, FinalDisposition>;
|
|
358
|
+
|
|
359
|
+
export type DispositionKind = 'Transfer' | 'Elimination';
|
|
360
|
+
|
|
361
|
+
export const DispositionKind = {
|
|
362
|
+
Transfer: 'Transfer',
|
|
363
|
+
Elimination: 'Elimination',
|
|
364
|
+
} satisfies Record<string, DispositionKind>;
|
|
365
|
+
|
|
366
|
+
export type AccessRequestChannel = 'Portal' | 'Email' | 'InPerson' | 'Letter';
|
|
367
|
+
|
|
368
|
+
export const AccessRequestChannel = {
|
|
369
|
+
Portal: 'Portal',
|
|
370
|
+
Email: 'Email',
|
|
371
|
+
InPerson: 'InPerson',
|
|
372
|
+
Letter: 'Letter',
|
|
373
|
+
} satisfies Record<string, AccessRequestChannel>;
|
|
374
|
+
|
|
375
|
+
export type AccessRequestStatus = 'Received' | 'InCorrection' | 'InProgress' | 'Resolved';
|
|
376
|
+
|
|
377
|
+
export const AccessRequestStatus = {
|
|
378
|
+
Received: 'Received',
|
|
379
|
+
InCorrection: 'InCorrection',
|
|
380
|
+
InProgress: 'InProgress',
|
|
381
|
+
Resolved: 'Resolved',
|
|
382
|
+
} satisfies Record<string, AccessRequestStatus>;
|
|
383
|
+
|
|
384
|
+
export type AccessRequestResolution =
|
|
385
|
+
'Delivered' | 'PartiallyDelivered' | 'Denied' | 'Derived' | 'NonExistent' | 'Withdrawn';
|
|
386
|
+
|
|
387
|
+
export const AccessRequestResolution = {
|
|
388
|
+
Delivered: 'Delivered',
|
|
389
|
+
PartiallyDelivered: 'PartiallyDelivered',
|
|
390
|
+
Denied: 'Denied',
|
|
391
|
+
Derived: 'Derived',
|
|
392
|
+
NonExistent: 'NonExistent',
|
|
393
|
+
Withdrawn: 'Withdrawn',
|
|
394
|
+
} satisfies Record<string, AccessRequestResolution>;
|
|
395
|
+
|
|
396
|
+
export type AccessRequestEventAction =
|
|
397
|
+
| 'Received'
|
|
398
|
+
| 'Updated'
|
|
399
|
+
| 'CorrectionRequested'
|
|
400
|
+
| 'Corrected'
|
|
401
|
+
| 'Assigned'
|
|
402
|
+
| 'ThirdPartyNotified'
|
|
403
|
+
| 'OppositionRegistered'
|
|
404
|
+
| 'Extended'
|
|
405
|
+
| 'Resolved'
|
|
406
|
+
| 'AppealRegistered';
|
|
407
|
+
|
|
408
|
+
export const AccessRequestEventAction = {
|
|
409
|
+
Received: 'Received',
|
|
410
|
+
Updated: 'Updated',
|
|
411
|
+
CorrectionRequested: 'CorrectionRequested',
|
|
412
|
+
Corrected: 'Corrected',
|
|
413
|
+
Assigned: 'Assigned',
|
|
414
|
+
ThirdPartyNotified: 'ThirdPartyNotified',
|
|
415
|
+
OppositionRegistered: 'OppositionRegistered',
|
|
416
|
+
Extended: 'Extended',
|
|
417
|
+
Resolved: 'Resolved',
|
|
418
|
+
AppealRegistered: 'AppealRegistered',
|
|
419
|
+
} satisfies Record<string, AccessRequestEventAction>;
|
|
420
|
+
|
|
347
421
|
export interface DocumentTypeEntity {
|
|
348
422
|
id: string;
|
|
349
423
|
name: string;
|
|
@@ -425,6 +499,10 @@ export interface DocumentEntity {
|
|
|
425
499
|
externalRecipients?: DocumentExternalRecipientEntity[];
|
|
426
500
|
emailCopies?: DocumentEmailCopyEntity[];
|
|
427
501
|
accesses?: DocumentAccessEntity[];
|
|
502
|
+
disposition?: DispositionRecordEntity | null;
|
|
503
|
+
dispositionId?: string | null;
|
|
504
|
+
accessRequestResponses?: AccessRequestEntity[];
|
|
505
|
+
accessRequestDeliveries?: AccessRequestDocumentEntity[];
|
|
428
506
|
dispatch?: DocumentDispatchEntity | null;
|
|
429
507
|
docDigitalInbound?: DocDigitalInboundEntity | null;
|
|
430
508
|
deleted: boolean;
|
|
@@ -592,6 +670,8 @@ export interface CaseFileEntity {
|
|
|
592
670
|
responsibleFullName: string;
|
|
593
671
|
responsiblePosition?: string | null;
|
|
594
672
|
closedAt?: string | null;
|
|
673
|
+
disposition?: DispositionRecordEntity | null;
|
|
674
|
+
dispositionId?: string | null;
|
|
595
675
|
closedByEmployeeId?: string | null;
|
|
596
676
|
closedByFullName?: string | null;
|
|
597
677
|
closingNote?: string | null;
|
|
@@ -844,9 +924,14 @@ export interface ArchivalSeriesEntity {
|
|
|
844
924
|
name: string;
|
|
845
925
|
section?: string | null;
|
|
846
926
|
description?: string | null;
|
|
927
|
+
managementYears?: number | null;
|
|
928
|
+
centralYears?: number | null;
|
|
929
|
+
finalDisposition?: FinalDisposition | null;
|
|
930
|
+
retentionNote?: string | null;
|
|
847
931
|
enabled: boolean;
|
|
848
932
|
documentTypes?: DocumentTypeEntity[];
|
|
849
933
|
caseFiles?: CaseFileEntity[];
|
|
934
|
+
dispositions?: DispositionRecordEntity[];
|
|
850
935
|
deleted: boolean;
|
|
851
936
|
createdAt: string;
|
|
852
937
|
updatedAt: string;
|
|
@@ -971,4 +1056,78 @@ export interface AuditLogEntity {
|
|
|
971
1056
|
createdAt: string;
|
|
972
1057
|
}
|
|
973
1058
|
|
|
1059
|
+
export interface DispositionRecordEntity {
|
|
1060
|
+
id: string;
|
|
1061
|
+
kind: DispositionKind;
|
|
1062
|
+
number: number;
|
|
1063
|
+
year: number;
|
|
1064
|
+
observation?: string | null;
|
|
1065
|
+
series?: ArchivalSeriesEntity;
|
|
1066
|
+
seriesId: string;
|
|
1067
|
+
documents?: DocumentEntity[];
|
|
1068
|
+
caseFiles?: CaseFileEntity[];
|
|
1069
|
+
createdByEmployeeId: string;
|
|
1070
|
+
createdByFullName: string;
|
|
1071
|
+
createdAt: string;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
export interface AccessRequestEntity {
|
|
1075
|
+
id: string;
|
|
1076
|
+
number: number;
|
|
1077
|
+
year: number;
|
|
1078
|
+
externalFolio?: string | null;
|
|
1079
|
+
channel: AccessRequestChannel;
|
|
1080
|
+
receivedAt: string;
|
|
1081
|
+
requesterName: string;
|
|
1082
|
+
requesterEmail?: string | null;
|
|
1083
|
+
requesterAddress?: string | null;
|
|
1084
|
+
requestText: string;
|
|
1085
|
+
deliveryFormat?: string | null;
|
|
1086
|
+
status: AccessRequestStatus;
|
|
1087
|
+
correctionRequestedAt?: string | null;
|
|
1088
|
+
correctionDueAt?: string | null;
|
|
1089
|
+
correctedAt?: string | null;
|
|
1090
|
+
dueAt: string;
|
|
1091
|
+
extendedAt?: string | null;
|
|
1092
|
+
extensionNote?: string | null;
|
|
1093
|
+
assigneeEmployeeId?: string | null;
|
|
1094
|
+
assigneeFullName?: string | null;
|
|
1095
|
+
thirdPartyNotifiedAt?: string | null;
|
|
1096
|
+
oppositionDueAt?: string | null;
|
|
1097
|
+
thirdPartyOpposed?: boolean | null;
|
|
1098
|
+
resolution?: AccessRequestResolution | null;
|
|
1099
|
+
resolvedAt?: string | null;
|
|
1100
|
+
denialGrounds: string[];
|
|
1101
|
+
derivedTo?: string | null;
|
|
1102
|
+
resolutionNote?: string | null;
|
|
1103
|
+
responseDocument?: DocumentEntity | null;
|
|
1104
|
+
responseDocumentId?: string | null;
|
|
1105
|
+
appealedAt?: string | null;
|
|
1106
|
+
appealNote?: string | null;
|
|
1107
|
+
createdByEmployeeId: string;
|
|
1108
|
+
createdByFullName: string;
|
|
1109
|
+
documents?: AccessRequestDocumentEntity[];
|
|
1110
|
+
events?: AccessRequestEventEntity[];
|
|
1111
|
+
createdAt: string;
|
|
1112
|
+
updatedAt: string;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
export interface AccessRequestDocumentEntity {
|
|
1116
|
+
accessRequest?: AccessRequestEntity;
|
|
1117
|
+
accessRequestId: string;
|
|
1118
|
+
document?: DocumentEntity;
|
|
1119
|
+
documentId: string;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
export interface AccessRequestEventEntity {
|
|
1123
|
+
id: string;
|
|
1124
|
+
action: AccessRequestEventAction;
|
|
1125
|
+
note?: string | null;
|
|
1126
|
+
employeeId?: string | null;
|
|
1127
|
+
employeeFullName: string;
|
|
1128
|
+
accessRequest?: AccessRequestEntity;
|
|
1129
|
+
accessRequestId: string;
|
|
1130
|
+
createdAt: string;
|
|
1131
|
+
}
|
|
1132
|
+
|
|
974
1133
|
type JsonValue = string | number | boolean | { [key in string]?: JsonValue } | Array<JsonValue> | null;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type AccessRequestChannel, type AccessRequestResolution } from '../base/entities';
|
|
2
|
+
import {
|
|
3
|
+
type AccessRequestDetailEntity,
|
|
4
|
+
type AccessRequestListItemEntity,
|
|
5
|
+
type AccessRequestSummaryEntity,
|
|
6
|
+
} from '../entities';
|
|
7
|
+
import { type RpcPage } from './contract';
|
|
8
|
+
|
|
9
|
+
/** Patrones NATS de `accessRequest`: solicitudes de acceso a la información pública (Ley 20.285). */
|
|
10
|
+
export const AccessRequestPatterns = {
|
|
11
|
+
getAll: 'gestorDocumental.accessRequest.getAll',
|
|
12
|
+
getById: 'gestorDocumental.accessRequest.getById',
|
|
13
|
+
getSummary: 'gestorDocumental.accessRequest.getSummary',
|
|
14
|
+
create: 'gestorDocumental.accessRequest.create',
|
|
15
|
+
update: 'gestorDocumental.accessRequest.update',
|
|
16
|
+
act: 'gestorDocumental.accessRequest.act',
|
|
17
|
+
} as const;
|
|
18
|
+
|
|
19
|
+
export interface AccessRequestWritePayload {
|
|
20
|
+
externalFolio?: string | null;
|
|
21
|
+
channel: AccessRequestChannel;
|
|
22
|
+
/** Fecha y hora de ingreso (ISO): desde ahí corren los 20 días hábiles. */
|
|
23
|
+
receivedAt: string;
|
|
24
|
+
requesterName: string;
|
|
25
|
+
requesterEmail?: string | null;
|
|
26
|
+
requesterAddress?: string | null;
|
|
27
|
+
requestText: string;
|
|
28
|
+
deliveryFormat?: string | null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Lo que se hace con una solicitud, un paso a la vez. */
|
|
32
|
+
export type AccessRequestAction =
|
|
33
|
+
| { type: 'requestCorrection'; note: string }
|
|
34
|
+
| { type: 'registerCorrection'; correctedAt?: string | null; note?: string | null }
|
|
35
|
+
| { type: 'assign'; employeeId: string; fullName: string; note?: string | null }
|
|
36
|
+
| { type: 'notifyThirdParty'; note: string }
|
|
37
|
+
| { type: 'registerOpposition'; opposed: boolean; note?: string | null }
|
|
38
|
+
| { type: 'extend'; note: string }
|
|
39
|
+
| {
|
|
40
|
+
type: 'resolve';
|
|
41
|
+
resolution: AccessRequestResolution;
|
|
42
|
+
grounds?: string[];
|
|
43
|
+
derivedTo?: string | null;
|
|
44
|
+
note?: string | null;
|
|
45
|
+
responseDocumentId?: string | null;
|
|
46
|
+
documentIds?: string[];
|
|
47
|
+
}
|
|
48
|
+
| { type: 'registerAppeal'; appealedAt?: string | null; note: string };
|
|
49
|
+
|
|
50
|
+
export interface AccessRequestActor {
|
|
51
|
+
employeeId: string;
|
|
52
|
+
fullName: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface AccessRequestContract {
|
|
56
|
+
[AccessRequestPatterns.getAll]: {
|
|
57
|
+
payload: {
|
|
58
|
+
status?: 'open' | 'resolved' | 'all';
|
|
59
|
+
year?: number | null;
|
|
60
|
+
search?: string;
|
|
61
|
+
page?: number;
|
|
62
|
+
limit?: number;
|
|
63
|
+
};
|
|
64
|
+
response: RpcPage<AccessRequestListItemEntity[]>;
|
|
65
|
+
};
|
|
66
|
+
[AccessRequestPatterns.getById]: { payload: { id: string }; response: AccessRequestDetailEntity };
|
|
67
|
+
[AccessRequestPatterns.getSummary]: { payload: { year: number }; response: AccessRequestSummaryEntity };
|
|
68
|
+
[AccessRequestPatterns.create]: {
|
|
69
|
+
payload: AccessRequestWritePayload & { actor: AccessRequestActor };
|
|
70
|
+
response: AccessRequestDetailEntity;
|
|
71
|
+
};
|
|
72
|
+
/** Corrige los datos mientras no está resuelta. */
|
|
73
|
+
[AccessRequestPatterns.update]: {
|
|
74
|
+
payload: AccessRequestWritePayload & { id: string; actor: AccessRequestActor };
|
|
75
|
+
response: AccessRequestDetailEntity;
|
|
76
|
+
};
|
|
77
|
+
[AccessRequestPatterns.act]: {
|
|
78
|
+
payload: { id: string; action: AccessRequestAction; actor: AccessRequestActor };
|
|
79
|
+
response: AccessRequestDetailEntity;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type FinalDisposition } from '../base/entities';
|
|
1
2
|
import { type ArchivalSeriesEntity } from '../base/entities';
|
|
2
3
|
import {
|
|
3
4
|
type ArchivalSeriesCreateResponseEntity,
|
|
@@ -23,6 +24,11 @@ export interface ArchivalSeriesWritePayload {
|
|
|
23
24
|
section?: string | null;
|
|
24
25
|
description?: string | null;
|
|
25
26
|
enabled?: boolean;
|
|
27
|
+
/** Tabla de Retención Documental: los tres juntos o ninguno. */
|
|
28
|
+
managementYears?: number | null;
|
|
29
|
+
centralYears?: number | null;
|
|
30
|
+
finalDisposition?: FinalDisposition | null;
|
|
31
|
+
retentionNote?: string | null;
|
|
26
32
|
}
|
|
27
33
|
|
|
28
34
|
export interface ArchivalSeriesContract {
|
package/src/contracts/index.ts
CHANGED
|
@@ -9,6 +9,8 @@ import { IndicatorsPatterns, type IndicatorsContract } from './indicators.contra
|
|
|
9
9
|
import { AuditPatterns, type AuditContract } from './audit.contract';
|
|
10
10
|
import { SignatureCheckPatterns, type SignatureCheckContract } from './signatureCheck.contract';
|
|
11
11
|
import { RepositoryExportPatterns, type RepositoryExportContract } from './repositoryExport.contract';
|
|
12
|
+
import { RetentionPatterns, type RetentionContract } from './retention.contract';
|
|
13
|
+
import { AccessRequestPatterns, type AccessRequestContract } from './accessRequest.contract';
|
|
12
14
|
import { ScanPatterns, type ScanContract } from './scan.contract';
|
|
13
15
|
import { PartsOfficePatterns, type PartsOfficeContract } from './partsOffice.contract';
|
|
14
16
|
import { ProcedurePatterns, type ProcedureContract } from './procedure.contract';
|
|
@@ -34,6 +36,8 @@ export * from './indicators.contract';
|
|
|
34
36
|
export * from './audit.contract';
|
|
35
37
|
export * from './signatureCheck.contract';
|
|
36
38
|
export * from './repositoryExport.contract';
|
|
39
|
+
export * from './retention.contract';
|
|
40
|
+
export * from './accessRequest.contract';
|
|
37
41
|
|
|
38
42
|
/** Patrones NATS de gestor-documental-ms, por recurso: `gestorDocumental.<recurso>.<acción>`. */
|
|
39
43
|
export const GestorDocumentalPatterns = {
|
|
@@ -54,6 +58,8 @@ export const GestorDocumentalPatterns = {
|
|
|
54
58
|
audit: AuditPatterns,
|
|
55
59
|
signatureCheck: SignatureCheckPatterns,
|
|
56
60
|
repositoryExport: RepositoryExportPatterns,
|
|
61
|
+
retention: RetentionPatterns,
|
|
62
|
+
accessRequest: AccessRequestPatterns,
|
|
57
63
|
} as const;
|
|
58
64
|
|
|
59
65
|
/** Contrato completo de gestor-documental-ms: la unión de los contratos de sus recursos. */
|
|
@@ -73,4 +79,6 @@ export type GestorDocumentalContract = DocumentTypeContract &
|
|
|
73
79
|
IndicatorsContract &
|
|
74
80
|
AuditContract &
|
|
75
81
|
SignatureCheckContract &
|
|
76
|
-
RepositoryExportContract
|
|
82
|
+
RepositoryExportContract &
|
|
83
|
+
RetentionContract &
|
|
84
|
+
AccessRequestContract;
|
|
@@ -22,6 +22,8 @@ export interface RepositoryExportQuery {
|
|
|
22
22
|
from?: string | null;
|
|
23
23
|
to?: string | null;
|
|
24
24
|
scope?: RepositoryExportScope;
|
|
25
|
+
/** Solo lo incluido en un acta de transferencia: el paquete para el Archivo Nacional. */
|
|
26
|
+
dispositionId?: string | null;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
export interface RepositoryExportContract {
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type DispositionKind } from '../base/entities';
|
|
2
|
+
import {
|
|
3
|
+
type DispositionRecordResponseEntity,
|
|
4
|
+
type IndicatorsFileEntity,
|
|
5
|
+
type RetentionDueItemEntity,
|
|
6
|
+
type RetentionSummaryEntity,
|
|
7
|
+
} from '../entities';
|
|
8
|
+
import { type RpcPage } from './contract';
|
|
9
|
+
|
|
10
|
+
/** Patrones NATS de `retention`: plazos de retención por serie y actas de transferencia o eliminación. */
|
|
11
|
+
export const RetentionPatterns = {
|
|
12
|
+
getSummary: 'gestorDocumental.retention.getSummary',
|
|
13
|
+
getDueItems: 'gestorDocumental.retention.getDueItems',
|
|
14
|
+
createRecord: 'gestorDocumental.retention.createRecord',
|
|
15
|
+
getRecords: 'gestorDocumental.retention.getRecords',
|
|
16
|
+
getRecordPdf: 'gestorDocumental.retention.getRecordPdf',
|
|
17
|
+
} as const;
|
|
18
|
+
|
|
19
|
+
export interface RetentionContract {
|
|
20
|
+
[RetentionPatterns.getSummary]: { payload: Record<string, never>; response: RetentionSummaryEntity };
|
|
21
|
+
/** Lo vencido de una serie, de lo más antiguo a lo más reciente. */
|
|
22
|
+
[RetentionPatterns.getDueItems]: {
|
|
23
|
+
payload: { seriesId: string; page?: number; limit?: number };
|
|
24
|
+
response: RpcPage<RetentionDueItemEntity[]>;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Emite el acta con lo elegido (todo debe estar vencido y sin acta). Según la serie: conservación permanente →
|
|
28
|
+
* transferencia; eliminación → eliminación; selección → cualquiera de las dos.
|
|
29
|
+
*/
|
|
30
|
+
[RetentionPatterns.createRecord]: {
|
|
31
|
+
payload: {
|
|
32
|
+
kind: DispositionKind;
|
|
33
|
+
seriesId: string;
|
|
34
|
+
documentIds: string[];
|
|
35
|
+
caseFileIds: string[];
|
|
36
|
+
observation?: string | null;
|
|
37
|
+
actor: { employeeId: string; fullName: string };
|
|
38
|
+
};
|
|
39
|
+
response: DispositionRecordResponseEntity;
|
|
40
|
+
};
|
|
41
|
+
[RetentionPatterns.getRecords]: { payload: { year: number }; response: DispositionRecordResponseEntity[] };
|
|
42
|
+
/** El acta en PDF, con lo que incluye, para firmarla y archivarla. */
|
|
43
|
+
[RetentionPatterns.getRecordPdf]: { payload: { id: string; generatedBy: string }; response: IndicatorsFileEntity };
|
|
44
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type AccessRequestChannel,
|
|
3
|
+
type AccessRequestEventAction,
|
|
4
|
+
type AccessRequestResolution,
|
|
5
|
+
type AccessRequestStatus,
|
|
6
|
+
} from '../../base/entities';
|
|
7
|
+
|
|
8
|
+
/** Semáforo del plazo de respuesta: a tiempo, por vencer (2 días hábiles o menos) o vencido. */
|
|
9
|
+
export type AccessRequestDueStatus = 'OnTime' | 'DueSoon' | 'Overdue';
|
|
10
|
+
|
|
11
|
+
export interface AccessRequestListItemEntity {
|
|
12
|
+
id: string;
|
|
13
|
+
/** «N° 15/2026». */
|
|
14
|
+
label: string;
|
|
15
|
+
externalFolio: string | null;
|
|
16
|
+
channel: AccessRequestChannel;
|
|
17
|
+
requesterName: string;
|
|
18
|
+
requestText: string;
|
|
19
|
+
receivedAt: string;
|
|
20
|
+
dueAt: string;
|
|
21
|
+
status: AccessRequestStatus;
|
|
22
|
+
resolution: AccessRequestResolution | null;
|
|
23
|
+
assigneeFullName: string | null;
|
|
24
|
+
/** Solo mientras está abierta. */
|
|
25
|
+
dueStatus: AccessRequestDueStatus | null;
|
|
26
|
+
businessDaysLeft: number | null;
|
|
27
|
+
/** Ya resuelta: si se respondió dentro del plazo. */
|
|
28
|
+
resolvedOnTime: boolean | null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface AccessRequestDocumentLinkEntity {
|
|
32
|
+
id: string;
|
|
33
|
+
folio: string | null;
|
|
34
|
+
subject: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface AccessRequestDetailEntity extends AccessRequestListItemEntity {
|
|
38
|
+
year: number;
|
|
39
|
+
number: number;
|
|
40
|
+
requesterEmail: string | null;
|
|
41
|
+
requesterAddress: string | null;
|
|
42
|
+
deliveryFormat: string | null;
|
|
43
|
+
correctionRequestedAt: string | null;
|
|
44
|
+
correctionDueAt: string | null;
|
|
45
|
+
correctedAt: string | null;
|
|
46
|
+
extendedAt: string | null;
|
|
47
|
+
extensionNote: string | null;
|
|
48
|
+
assigneeEmployeeId: string | null;
|
|
49
|
+
thirdPartyNotifiedAt: string | null;
|
|
50
|
+
oppositionDueAt: string | null;
|
|
51
|
+
thirdPartyOpposed: boolean | null;
|
|
52
|
+
resolvedAt: string | null;
|
|
53
|
+
denialGrounds: string[];
|
|
54
|
+
derivedTo: string | null;
|
|
55
|
+
resolutionNote: string | null;
|
|
56
|
+
responseDocument: AccessRequestDocumentLinkEntity | null;
|
|
57
|
+
documents: AccessRequestDocumentLinkEntity[];
|
|
58
|
+
appealedAt: string | null;
|
|
59
|
+
appealNote: string | null;
|
|
60
|
+
createdByFullName: string;
|
|
61
|
+
/** Se puede prorrogar: abierta, sin prórroga y antes de vencer. */
|
|
62
|
+
canExtend: boolean;
|
|
63
|
+
events: { action: AccessRequestEventAction; note: string | null; employeeFullName: string; createdAt: string }[];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface AccessRequestSummaryEntity {
|
|
67
|
+
year: number;
|
|
68
|
+
total: number;
|
|
69
|
+
open: number;
|
|
70
|
+
overdue: number;
|
|
71
|
+
dueSoon: number;
|
|
72
|
+
resolved: Record<AccessRequestResolution, number>;
|
|
73
|
+
/** Respondidas dentro del plazo sobre las respondidas, en %. */
|
|
74
|
+
onTimeRate: number | null;
|
|
75
|
+
/** Días hábiles promedio entre el ingreso (o la subsanación) y la respuesta. */
|
|
76
|
+
averageBusinessDays: number | null;
|
|
77
|
+
appealed: number;
|
|
78
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './accessRequest.entity';
|
|
@@ -7,6 +7,11 @@ export interface ArchivalSeriesGetAllResponseEntity {
|
|
|
7
7
|
section: ArchivalSeriesEntity['section'];
|
|
8
8
|
description: ArchivalSeriesEntity['description'];
|
|
9
9
|
enabled: ArchivalSeriesEntity['enabled'];
|
|
10
|
+
/** Tabla de Retención Documental: años en archivo de gestión y central, y qué se hace después. */
|
|
11
|
+
managementYears: ArchivalSeriesEntity['managementYears'];
|
|
12
|
+
centralYears: ArchivalSeriesEntity['centralYears'];
|
|
13
|
+
finalDisposition: ArchivalSeriesEntity['finalDisposition'];
|
|
14
|
+
retentionNote: ArchivalSeriesEntity['retentionNote'];
|
|
10
15
|
/** Cuántos tipos documentales y expedientes la usan. */
|
|
11
16
|
documentTypes: number;
|
|
12
17
|
caseFiles: number;
|
package/src/entities/index.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './retention.entity';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type DispositionKind, type FinalDisposition } from '../../base/entities';
|
|
2
|
+
|
|
3
|
+
/** Una serie con su Tabla de Retención y cuánto venció. */
|
|
4
|
+
export interface RetentionSeriesEntity {
|
|
5
|
+
seriesId: string;
|
|
6
|
+
code: string;
|
|
7
|
+
name: string;
|
|
8
|
+
section: string | null;
|
|
9
|
+
managementYears: number;
|
|
10
|
+
centralYears: number;
|
|
11
|
+
finalDisposition: FinalDisposition;
|
|
12
|
+
retentionNote: string | null;
|
|
13
|
+
/** Documentos firmados y expedientes cerrados cuyo plazo terminó y aún no tienen acta. */
|
|
14
|
+
documentsDue: number;
|
|
15
|
+
caseFilesDue: number;
|
|
16
|
+
/** Actas ya emitidas de la serie. */
|
|
17
|
+
dispositions: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface RetentionSummaryEntity {
|
|
21
|
+
series: RetentionSeriesEntity[];
|
|
22
|
+
/** Series habilitadas sin plazos: sus documentos no vencen. */
|
|
23
|
+
seriesWithoutRetention: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Un documento o expediente cuyo plazo de retención terminó. */
|
|
27
|
+
export interface RetentionDueItemEntity {
|
|
28
|
+
kind: 'Document' | 'CaseFile';
|
|
29
|
+
id: string;
|
|
30
|
+
/** Folio del documento o IUIe del expediente. */
|
|
31
|
+
reference: string;
|
|
32
|
+
title: string;
|
|
33
|
+
/** Desde cuándo se cuenta: la última firma del documento o el cierre del expediente. */
|
|
34
|
+
baseDate: string;
|
|
35
|
+
dueAt: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface DispositionRecordResponseEntity {
|
|
39
|
+
id: string;
|
|
40
|
+
kind: DispositionKind;
|
|
41
|
+
number: number;
|
|
42
|
+
year: number;
|
|
43
|
+
/** «Acta de transferencia N° 1/2026». */
|
|
44
|
+
label: string;
|
|
45
|
+
seriesId: string;
|
|
46
|
+
seriesCode: string;
|
|
47
|
+
seriesName: string;
|
|
48
|
+
observation: string | null;
|
|
49
|
+
documents: number;
|
|
50
|
+
caseFiles: number;
|
|
51
|
+
createdByFullName: string;
|
|
52
|
+
createdAt: string;
|
|
53
|
+
}
|