@muni-sanfer/types-gestor-documental 0.0.1-beta.2 → 0.0.1-beta.21
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 +607 -1
- package/dist/base/entities.js +133 -1
- package/dist/contracts/archivalSeries.contract.d.ts +50 -0
- package/dist/contracts/archivalSeries.contract.js +11 -0
- package/dist/contracts/audit.contract.d.ts +32 -0
- package/dist/contracts/audit.contract.js +8 -0
- package/dist/contracts/caseFile.contract.d.ts +262 -0
- package/dist/contracts/caseFile.contract.js +26 -0
- package/dist/contracts/document.contract.d.ts +145 -2
- package/dist/contracts/document.contract.js +9 -0
- package/dist/contracts/documentType.contract.d.ts +24 -1
- package/dist/contracts/holiday.contract.d.ts +30 -0
- package/dist/contracts/holiday.contract.js +9 -0
- package/dist/contracts/index.d.ts +162 -1
- package/dist/contracts/index.js +42 -0
- package/dist/contracts/indicators.contract.d.ts +103 -0
- package/dist/contracts/indicators.contract.js +15 -0
- package/dist/contracts/issuingEntity.contract.d.ts +52 -0
- package/dist/contracts/issuingEntity.contract.js +11 -0
- package/dist/contracts/partsOffice.contract.d.ts +177 -0
- package/dist/contracts/partsOffice.contract.js +23 -0
- package/dist/contracts/procedure.contract.d.ts +50 -0
- package/dist/contracts/procedure.contract.js +11 -0
- package/dist/contracts/registerBook.contract.d.ts +27 -0
- package/dist/contracts/registerBook.contract.js +8 -0
- package/dist/contracts/scan.contract.d.ts +63 -0
- package/dist/contracts/scan.contract.js +12 -0
- package/dist/contracts/signatureBatch.contract.d.ts +109 -0
- package/dist/contracts/signatureBatch.contract.js +12 -0
- package/dist/contracts/signatureCheck.contract.d.ts +14 -0
- package/dist/contracts/signatureCheck.contract.js +7 -0
- package/dist/contracts/textSnippet.contract.d.ts +51 -0
- package/dist/contracts/textSnippet.contract.js +11 -0
- package/dist/contracts/workFolder.contract.d.ts +114 -0
- package/dist/contracts/workFolder.contract.js +16 -0
- package/dist/entities/archivalSeries/archivalSeries.entity.d.ts +27 -0
- package/dist/entities/archivalSeries/archivalSeries.entity.js +2 -0
- package/dist/entities/archivalSeries/index.d.ts +1 -0
- package/dist/entities/archivalSeries/index.js +17 -0
- package/dist/entities/audit/audit.entity.d.ts +27 -0
- package/dist/entities/audit/audit.entity.js +2 -0
- package/dist/entities/audit/index.d.ts +1 -0
- package/dist/entities/audit/index.js +17 -0
- package/dist/entities/caseFile/caseFile.entity.d.ts +300 -0
- package/dist/entities/caseFile/caseFile.entity.js +2 -0
- package/dist/entities/caseFile/index.d.ts +1 -0
- package/dist/entities/caseFile/index.js +17 -0
- package/dist/entities/document/document.entity.d.ts +252 -0
- package/dist/entities/documentType/documentType.entity.d.ts +37 -1
- package/dist/entities/holiday/holiday.entity.d.ts +10 -0
- package/dist/entities/holiday/holiday.entity.js +2 -0
- package/dist/entities/holiday/index.d.ts +1 -0
- package/dist/entities/holiday/index.js +17 -0
- package/dist/entities/index.d.ts +14 -0
- package/dist/entities/index.js +14 -0
- package/dist/entities/indicators/index.d.ts +1 -0
- package/dist/entities/indicators/index.js +17 -0
- package/dist/entities/indicators/indicators.entity.d.ts +152 -0
- package/dist/entities/indicators/indicators.entity.js +2 -0
- package/dist/entities/issuingEntity/index.d.ts +1 -0
- package/dist/entities/issuingEntity/index.js +17 -0
- package/dist/entities/issuingEntity/issuingEntity.entity.d.ts +20 -0
- package/dist/entities/issuingEntity/issuingEntity.entity.js +2 -0
- package/dist/entities/partsOffice/index.d.ts +1 -0
- package/dist/entities/partsOffice/index.js +17 -0
- package/dist/entities/partsOffice/partsOffice.entity.d.ts +105 -0
- package/dist/entities/partsOffice/partsOffice.entity.js +2 -0
- package/dist/entities/procedure/index.d.ts +1 -0
- package/dist/entities/procedure/index.js +17 -0
- package/dist/entities/procedure/procedure.entity.d.ts +20 -0
- package/dist/entities/procedure/procedure.entity.js +2 -0
- package/dist/entities/registerBook/index.d.ts +1 -0
- package/dist/entities/registerBook/index.js +17 -0
- package/dist/entities/registerBook/registerBook.entity.d.ts +48 -0
- package/dist/entities/registerBook/registerBook.entity.js +2 -0
- package/dist/entities/scan/index.d.ts +1 -0
- package/dist/entities/scan/index.js +17 -0
- package/dist/entities/scan/scan.entity.d.ts +29 -0
- package/dist/entities/scan/scan.entity.js +2 -0
- package/dist/entities/signatureBatch/index.d.ts +1 -0
- package/dist/entities/signatureBatch/index.js +17 -0
- package/dist/entities/signatureBatch/signatureBatch.entity.d.ts +107 -0
- package/dist/entities/signatureBatch/signatureBatch.entity.js +2 -0
- package/dist/entities/signatureCheck/index.d.ts +1 -0
- package/dist/entities/signatureCheck/index.js +17 -0
- package/dist/entities/signatureCheck/signatureCheck.entity.d.ts +49 -0
- package/dist/entities/signatureCheck/signatureCheck.entity.js +2 -0
- package/dist/entities/textSnippet/index.d.ts +1 -0
- package/dist/entities/textSnippet/index.js +17 -0
- package/dist/entities/textSnippet/textSnippet.entity.d.ts +20 -0
- package/dist/entities/textSnippet/textSnippet.entity.js +2 -0
- package/dist/entities/workFolder/index.d.ts +1 -0
- package/dist/entities/workFolder/index.js +17 -0
- package/dist/entities/workFolder/workFolder.entity.d.ts +83 -0
- package/dist/entities/workFolder/workFolder.entity.js +2 -0
- package/package.json +1 -1
- package/src/base/entities.ts +716 -1
- package/src/contracts/archivalSeries.contract.ts +53 -0
- package/src/contracts/audit.contract.ts +30 -0
- package/src/contracts/caseFile.contract.ts +228 -0
- package/src/contracts/document.contract.ts +151 -2
- package/src/contracts/documentType.contract.ts +32 -2
- package/src/contracts/holiday.contract.ts +16 -0
- package/src/contracts/index.ts +58 -1
- package/src/contracts/indicators.contract.ts +80 -0
- package/src/contracts/issuingEntity.contract.ts +55 -0
- package/src/contracts/partsOffice.contract.ts +123 -0
- package/src/contracts/procedure.contract.ts +53 -0
- package/src/contracts/registerBook.contract.ts +24 -0
- package/src/contracts/scan.contract.ts +52 -0
- package/src/contracts/signatureBatch.contract.ts +96 -0
- package/src/contracts/signatureCheck.contract.ts +11 -0
- package/src/contracts/textSnippet.contract.ts +53 -0
- package/src/contracts/workFolder.contract.ts +75 -0
- package/src/entities/archivalSeries/archivalSeries.entity.ts +32 -0
- package/src/entities/archivalSeries/index.ts +1 -0
- package/src/entities/audit/audit.entity.ts +30 -0
- package/src/entities/audit/index.ts +1 -0
- package/src/entities/caseFile/caseFile.entity.ts +324 -0
- package/src/entities/caseFile/index.ts +1 -0
- package/src/entities/document/document.entity.ts +250 -0
- package/src/entities/documentType/documentType.entity.ts +31 -1
- package/src/entities/holiday/holiday.entity.ts +11 -0
- package/src/entities/holiday/index.ts +1 -0
- package/src/entities/index.ts +14 -0
- package/src/entities/indicators/index.ts +1 -0
- package/src/entities/indicators/indicators.entity.ts +157 -0
- package/src/entities/issuingEntity/index.ts +1 -0
- package/src/entities/issuingEntity/issuingEntity.entity.ts +24 -0
- package/src/entities/partsOffice/index.ts +1 -0
- package/src/entities/partsOffice/partsOffice.entity.ts +110 -0
- package/src/entities/procedure/index.ts +1 -0
- package/src/entities/procedure/procedure.entity.ts +24 -0
- package/src/entities/registerBook/index.ts +1 -0
- package/src/entities/registerBook/registerBook.entity.ts +52 -0
- package/src/entities/scan/index.ts +1 -0
- package/src/entities/scan/scan.entity.ts +32 -0
- package/src/entities/signatureBatch/index.ts +1 -0
- package/src/entities/signatureBatch/signatureBatch.entity.ts +110 -0
- package/src/entities/signatureCheck/index.ts +1 -0
- package/src/entities/signatureCheck/signatureCheck.entity.ts +51 -0
- package/src/entities/textSnippet/index.ts +1 -0
- package/src/entities/textSnippet/textSnippet.entity.ts +24 -0
- package/src/entities/workFolder/index.ts +1 -0
- package/src/entities/workFolder/workFolder.entity.ts +84 -0
- package/tsconfig.json +1 -3
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ArchivalSeriesEntity } from '../base/entities';
|
|
2
|
+
import {
|
|
3
|
+
type ArchivalSeriesCreateResponseEntity,
|
|
4
|
+
type ArchivalSeriesGetAllResponseEntity,
|
|
5
|
+
type ArchivalSeriesGetByIdResponseEntity,
|
|
6
|
+
type ArchivalSeriesUpdateResponseEntity,
|
|
7
|
+
} from '../entities';
|
|
8
|
+
import { type RpcPage } from './contract';
|
|
9
|
+
|
|
10
|
+
/** Patrones NATS de `archivalSeries` (series del Cuadro de Clasificación): `<servicio>.<recurso>.<acción>`. */
|
|
11
|
+
export const ArchivalSeriesPatterns = {
|
|
12
|
+
getAll: 'gestorDocumental.archivalSeries.getAll',
|
|
13
|
+
getById: 'gestorDocumental.archivalSeries.getById',
|
|
14
|
+
create: 'gestorDocumental.archivalSeries.create',
|
|
15
|
+
update: 'gestorDocumental.archivalSeries.update',
|
|
16
|
+
setEnabled: 'gestorDocumental.archivalSeries.setEnabled',
|
|
17
|
+
} as const;
|
|
18
|
+
|
|
19
|
+
/** Datos de una serie documental al crearla o editarla. */
|
|
20
|
+
export interface ArchivalSeriesWritePayload {
|
|
21
|
+
code: string;
|
|
22
|
+
name: string;
|
|
23
|
+
section?: string | null;
|
|
24
|
+
description?: string | null;
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ArchivalSeriesContract {
|
|
29
|
+
[ArchivalSeriesPatterns.getAll]: {
|
|
30
|
+
// sin `page` y `limit` responde todas en una sola página
|
|
31
|
+
payload: {
|
|
32
|
+
pagination?: { page?: number; limit?: number };
|
|
33
|
+
filters?: { search?: string; enabled?: boolean };
|
|
34
|
+
};
|
|
35
|
+
response: RpcPage<ArchivalSeriesGetAllResponseEntity[]>;
|
|
36
|
+
};
|
|
37
|
+
[ArchivalSeriesPatterns.getById]: {
|
|
38
|
+
payload: Pick<ArchivalSeriesEntity, 'id'>;
|
|
39
|
+
response: ArchivalSeriesGetByIdResponseEntity;
|
|
40
|
+
};
|
|
41
|
+
[ArchivalSeriesPatterns.create]: {
|
|
42
|
+
payload: ArchivalSeriesWritePayload;
|
|
43
|
+
response: ArchivalSeriesCreateResponseEntity;
|
|
44
|
+
};
|
|
45
|
+
[ArchivalSeriesPatterns.update]: {
|
|
46
|
+
payload: ArchivalSeriesWritePayload & Pick<ArchivalSeriesEntity, 'id'>;
|
|
47
|
+
response: ArchivalSeriesUpdateResponseEntity;
|
|
48
|
+
};
|
|
49
|
+
[ArchivalSeriesPatterns.setEnabled]: {
|
|
50
|
+
payload: Pick<ArchivalSeriesEntity, 'id' | 'enabled'>;
|
|
51
|
+
response: ArchivalSeriesUpdateResponseEntity;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type AuditEventEntity, type AuditSource, type IndicatorsFileEntity } from '../entities';
|
|
2
|
+
import { type RpcPage } from './contract';
|
|
3
|
+
|
|
4
|
+
/** Patrones NATS de `audit`: la auditoría reúne todos los registros del gestor en una sola vista. */
|
|
5
|
+
export const AuditPatterns = {
|
|
6
|
+
getEvents: 'gestorDocumental.audit.getEvents',
|
|
7
|
+
export: 'gestorDocumental.audit.export',
|
|
8
|
+
} as const;
|
|
9
|
+
|
|
10
|
+
/** Qué hechos: período (días de Chile «AAAA-MM-DD», hasta un año) y filtros optativos. */
|
|
11
|
+
export interface AuditQuery {
|
|
12
|
+
from: string;
|
|
13
|
+
to: string;
|
|
14
|
+
sources?: AuditSource[];
|
|
15
|
+
/** Parte del nombre de quien actuó. */
|
|
16
|
+
person?: string;
|
|
17
|
+
/** Parte del folio, materia, IUIe, título o nombre de lo afectado. */
|
|
18
|
+
reference?: string;
|
|
19
|
+
page?: number;
|
|
20
|
+
limit?: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface AuditContract {
|
|
24
|
+
[AuditPatterns.getEvents]: { payload: AuditQuery; response: RpcPage<AuditEventEntity[]> };
|
|
25
|
+
/** Los hechos filtrados (hasta 10.000) en Excel. `generatedBy`: quién la descarga. */
|
|
26
|
+
[AuditPatterns.export]: {
|
|
27
|
+
payload: Omit<AuditQuery, 'page' | 'limit'> & { generatedBy: string };
|
|
28
|
+
response: IndicatorsFileEntity;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type CaseFileActorRelation,
|
|
3
|
+
type CaseFileActorType,
|
|
4
|
+
type CaseFileActuationType,
|
|
5
|
+
type CaseFileEntity,
|
|
6
|
+
type CaseFileStatus,
|
|
7
|
+
type DocumentAccessLevel,
|
|
8
|
+
} from '../base/entities';
|
|
9
|
+
import {
|
|
10
|
+
type CaseFileAddBatchResponseEntity,
|
|
11
|
+
type CaseFileAddEntryResponseEntity,
|
|
12
|
+
type CaseFileCreateResponseEntity,
|
|
13
|
+
type CaseFileEntryFileResponseEntity,
|
|
14
|
+
type CaseFileExportResponseEntity,
|
|
15
|
+
type CaseFileGetAllResponseEntity,
|
|
16
|
+
type CaseFileGetByIdResponseEntity,
|
|
17
|
+
type CaseFileShareLinkCreateResponseEntity,
|
|
18
|
+
type CaseFileShareLinkResponseEntity,
|
|
19
|
+
type CaseFileSharedResponseEntity,
|
|
20
|
+
type CaseFileUpdateResponseEntity,
|
|
21
|
+
type CaseFileVerifyExportResponseEntity,
|
|
22
|
+
} from '../entities';
|
|
23
|
+
import { type RpcPage } from './contract';
|
|
24
|
+
import { type DocumentActor } from './document.contract';
|
|
25
|
+
|
|
26
|
+
/** Patrones NATS de `caseFile`: `<servicio>.<recurso>.<acción>`. */
|
|
27
|
+
export const CaseFilePatterns = {
|
|
28
|
+
getAll: 'gestorDocumental.caseFile.getAll',
|
|
29
|
+
getById: 'gestorDocumental.caseFile.getById',
|
|
30
|
+
create: 'gestorDocumental.caseFile.create',
|
|
31
|
+
update: 'gestorDocumental.caseFile.update',
|
|
32
|
+
addEntry: 'gestorDocumental.caseFile.addEntry',
|
|
33
|
+
addBatch: 'gestorDocumental.caseFile.addBatch',
|
|
34
|
+
voidEntry: 'gestorDocumental.caseFile.voidEntry',
|
|
35
|
+
moveEntry: 'gestorDocumental.caseFile.moveEntry',
|
|
36
|
+
share: 'gestorDocumental.caseFile.share',
|
|
37
|
+
unshare: 'gestorDocumental.caseFile.unshare',
|
|
38
|
+
close: 'gestorDocumental.caseFile.close',
|
|
39
|
+
getEntryFile: 'gestorDocumental.caseFile.getEntryFile',
|
|
40
|
+
getExport: 'gestorDocumental.caseFile.getExport',
|
|
41
|
+
createShareLink: 'gestorDocumental.caseFile.createShareLink',
|
|
42
|
+
getShareLinks: 'gestorDocumental.caseFile.getShareLinks',
|
|
43
|
+
revokeShareLink: 'gestorDocumental.caseFile.revokeShareLink',
|
|
44
|
+
getShared: 'gestorDocumental.caseFile.getShared',
|
|
45
|
+
getSharedEntryFile: 'gestorDocumental.caseFile.getSharedEntryFile',
|
|
46
|
+
getSharedExport: 'gestorDocumental.caseFile.getSharedExport',
|
|
47
|
+
verifyExport: 'gestorDocumental.caseFile.verifyExport',
|
|
48
|
+
} as const;
|
|
49
|
+
|
|
50
|
+
/** Enlace temporal para que alguien de fuera consulte el expediente sin sesión. */
|
|
51
|
+
export interface CaseFileShareLinkPayload {
|
|
52
|
+
/** A quién se entrega. Ej: «Contraloría Regional». */
|
|
53
|
+
recipient: string;
|
|
54
|
+
/** Si se indica, el gateway le envía el enlace por correo. */
|
|
55
|
+
recipientEmail?: string | null;
|
|
56
|
+
purpose?: string | null;
|
|
57
|
+
/** Cuántos días dura: de 1 a 30. */
|
|
58
|
+
days: number;
|
|
59
|
+
/** Puede descargar el expediente completo (ZIP). Por omisión, sí. */
|
|
60
|
+
allowExport?: boolean;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Persona u organización relacionada con el expediente (MGDEE54). */
|
|
64
|
+
export interface CaseFileActorInput {
|
|
65
|
+
relation: CaseFileActorRelation;
|
|
66
|
+
actorType: CaseFileActorType;
|
|
67
|
+
identifier?: string | null;
|
|
68
|
+
name: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Metadatos del expediente que se ingresan a mano. */
|
|
72
|
+
export interface CaseFileWritePayload {
|
|
73
|
+
title: string;
|
|
74
|
+
subject: string;
|
|
75
|
+
summary?: string | null;
|
|
76
|
+
procedureId: string;
|
|
77
|
+
accessLevel: DocumentAccessLevel;
|
|
78
|
+
hasSensitiveData: boolean;
|
|
79
|
+
/** MGDEE8_2: fin de la restricción de acceso (ISO 8601), si no es público. */
|
|
80
|
+
restrictionEndsAt?: string | null;
|
|
81
|
+
/** MGDEE1_2: serie del Cuadro de Clasificación. */
|
|
82
|
+
archivalSeriesId?: string | null;
|
|
83
|
+
actors?: CaseFileActorInput[];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Actuación que se incorpora al índice: un documento del gestor, un archivo subido u otro expediente. */
|
|
87
|
+
export type CaseFileEntryInput =
|
|
88
|
+
| { kind: 'Document'; actuationType: CaseFileActuationType; documentId: string }
|
|
89
|
+
| {
|
|
90
|
+
kind: 'File';
|
|
91
|
+
actuationType: CaseFileActuationType;
|
|
92
|
+
fileId: string;
|
|
93
|
+
fileName: string;
|
|
94
|
+
title: string;
|
|
95
|
+
documentTypeName?: string | null;
|
|
96
|
+
originDate?: string | null;
|
|
97
|
+
author?: string | null;
|
|
98
|
+
keywords: string[];
|
|
99
|
+
accessLevel: DocumentAccessLevel;
|
|
100
|
+
hasSensitiveData: boolean;
|
|
101
|
+
}
|
|
102
|
+
| { kind: 'CaseFile'; actuationType: CaseFileActuationType; linkedCaseFileId: string }
|
|
103
|
+
| {
|
|
104
|
+
kind: 'Physical';
|
|
105
|
+
actuationType: CaseFileActuationType;
|
|
106
|
+
title: string;
|
|
107
|
+
documentTypeName?: string | null;
|
|
108
|
+
originDate?: string | null;
|
|
109
|
+
author?: string | null;
|
|
110
|
+
/** Dónde está el papel: oficina, archivador, caja (MGDDE5_5). */
|
|
111
|
+
physicalLocation: string;
|
|
112
|
+
/** Por qué no se pudo digitalizar. */
|
|
113
|
+
physicalReason: string;
|
|
114
|
+
pageCount?: number | null;
|
|
115
|
+
keywords: string[];
|
|
116
|
+
accessLevel: DocumentAccessLevel;
|
|
117
|
+
hasSensitiveData: boolean;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
/** Quién hace la operación (de la sesión) y si puede ver todos los expedientes. */
|
|
121
|
+
interface CaseFileActorPayload {
|
|
122
|
+
actor: DocumentActor;
|
|
123
|
+
viewAll?: boolean;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Ámbito del listado: los expedientes del funcionario (responsable o compartidos con él) o todos. */
|
|
127
|
+
export type CaseFileScope = 'mine' | 'all';
|
|
128
|
+
|
|
129
|
+
export interface CaseFileContract {
|
|
130
|
+
[CaseFilePatterns.getAll]: {
|
|
131
|
+
payload: {
|
|
132
|
+
pagination?: { page?: number; limit?: number };
|
|
133
|
+
filters?: { search?: string; status?: CaseFileStatus; procedureId?: string; scope?: CaseFileScope };
|
|
134
|
+
} & CaseFileActorPayload;
|
|
135
|
+
response: RpcPage<CaseFileGetAllResponseEntity[]>;
|
|
136
|
+
};
|
|
137
|
+
/** Por id o por su identificador (`EXP-2026-00001`), que es el del enlace persistente. Queda en el registro de accesos. */
|
|
138
|
+
[CaseFilePatterns.getById]: {
|
|
139
|
+
payload: { id: string } & CaseFileActorPayload;
|
|
140
|
+
response: CaseFileGetByIdResponseEntity;
|
|
141
|
+
};
|
|
142
|
+
[CaseFilePatterns.create]: {
|
|
143
|
+
payload: CaseFileWritePayload & { actor: DocumentActor };
|
|
144
|
+
response: CaseFileCreateResponseEntity;
|
|
145
|
+
};
|
|
146
|
+
[CaseFilePatterns.update]: {
|
|
147
|
+
payload: CaseFileWritePayload & Pick<CaseFileEntity, 'id'> & { actor: DocumentActor };
|
|
148
|
+
response: CaseFileUpdateResponseEntity;
|
|
149
|
+
};
|
|
150
|
+
/** Incorpora los documentos finalizados de un lote de firma, en su orden; omite los que ya están en el expediente. */
|
|
151
|
+
[CaseFilePatterns.addBatch]: {
|
|
152
|
+
payload: { id: string; batchId: string; actuationType: CaseFileActuationType } & CaseFileActorPayload;
|
|
153
|
+
response: CaseFileAddBatchResponseEntity;
|
|
154
|
+
};
|
|
155
|
+
[CaseFilePatterns.addEntry]: {
|
|
156
|
+
// `folder`: subcarpeta del índice en que queda (sin valor: en la raíz)
|
|
157
|
+
payload: Pick<CaseFileEntity, 'id'> & { entry: CaseFileEntryInput; folder?: string | null } & CaseFileActorPayload;
|
|
158
|
+
response: CaseFileAddEntryResponseEntity;
|
|
159
|
+
};
|
|
160
|
+
/** Deja una actuación sin efecto, con su motivo. No se elimina del índice. */
|
|
161
|
+
/** Pasa una actuación a otra subcarpeta del índice (`null`: a la raíz). El orden de incorporación no cambia. */
|
|
162
|
+
[CaseFilePatterns.moveEntry]: {
|
|
163
|
+
payload: { id: string; entryId: string; folder: string | null } & CaseFileActorPayload;
|
|
164
|
+
response: CaseFileUpdateResponseEntity;
|
|
165
|
+
};
|
|
166
|
+
[CaseFilePatterns.voidEntry]: {
|
|
167
|
+
payload: Pick<CaseFileEntity, 'id'> & { entryId: string; reason: string; actor: DocumentActor };
|
|
168
|
+
response: CaseFileUpdateResponseEntity;
|
|
169
|
+
};
|
|
170
|
+
[CaseFilePatterns.share]: {
|
|
171
|
+
payload: Pick<CaseFileEntity, 'id'> & { employeeIds: string[]; actor: DocumentActor };
|
|
172
|
+
response: CaseFileUpdateResponseEntity;
|
|
173
|
+
};
|
|
174
|
+
[CaseFilePatterns.unshare]: {
|
|
175
|
+
payload: Pick<CaseFileEntity, 'id'> & { participantId: string; actor: DocumentActor };
|
|
176
|
+
response: CaseFileUpdateResponseEntity;
|
|
177
|
+
};
|
|
178
|
+
[CaseFilePatterns.close]: {
|
|
179
|
+
payload: Pick<CaseFileEntity, 'id'> & { note?: string | null; actor: DocumentActor };
|
|
180
|
+
response: CaseFileUpdateResponseEntity;
|
|
181
|
+
};
|
|
182
|
+
/** Archivo de una actuación del índice. Queda en el registro de accesos. */
|
|
183
|
+
[CaseFilePatterns.getEntryFile]: {
|
|
184
|
+
payload: Pick<CaseFileEntity, 'id'> & { entryId: string } & CaseFileActorPayload;
|
|
185
|
+
response: CaseFileEntryFileResponseEntity;
|
|
186
|
+
};
|
|
187
|
+
/** Metadatos y archivos para exportar el expediente completo. Queda en la trazabilidad y en el registro de accesos. */
|
|
188
|
+
[CaseFilePatterns.getExport]: {
|
|
189
|
+
payload: Pick<CaseFileEntity, 'id'> & CaseFileActorPayload;
|
|
190
|
+
response: CaseFileExportResponseEntity;
|
|
191
|
+
};
|
|
192
|
+
/** Crea un enlace temporal: solo su responsable. El token viaja solo en esta respuesta. */
|
|
193
|
+
[CaseFilePatterns.createShareLink]: {
|
|
194
|
+
payload: Pick<CaseFileEntity, 'id'> & CaseFileShareLinkPayload & { actor: DocumentActor };
|
|
195
|
+
response: CaseFileShareLinkCreateResponseEntity;
|
|
196
|
+
};
|
|
197
|
+
/** Enlaces del expediente, vigentes o no, con cuántas veces se usaron: su responsable o quien ve todos. */
|
|
198
|
+
[CaseFilePatterns.getShareLinks]: {
|
|
199
|
+
payload: Pick<CaseFileEntity, 'id'> & CaseFileActorPayload;
|
|
200
|
+
response: CaseFileShareLinkResponseEntity[];
|
|
201
|
+
};
|
|
202
|
+
[CaseFilePatterns.revokeShareLink]: {
|
|
203
|
+
payload: Pick<CaseFileEntity, 'id'> & { linkId: string; actor: DocumentActor };
|
|
204
|
+
response: CaseFileUpdateResponseEntity;
|
|
205
|
+
};
|
|
206
|
+
/** Sin sesión, con el token del enlace: metadatos e índice. Queda en el registro de accesos. */
|
|
207
|
+
[CaseFilePatterns.getShared]: {
|
|
208
|
+
payload: { token: string };
|
|
209
|
+
response: CaseFileSharedResponseEntity;
|
|
210
|
+
};
|
|
211
|
+
[CaseFilePatterns.getSharedEntryFile]: {
|
|
212
|
+
payload: { token: string; entryId: string };
|
|
213
|
+
response: CaseFileEntryFileResponseEntity;
|
|
214
|
+
};
|
|
215
|
+
/** El expediente completo, si el enlace lo permite. Queda en la trazabilidad y en el registro de accesos. */
|
|
216
|
+
/**
|
|
217
|
+
* Verificador público del ZIP exportado: sin sesión, con el identificador del expediente y la huella SHA-256 que
|
|
218
|
+
* calculó el navegador para cada actuación (el ZIP no se sube). Se compara con las huellas registradas al incorporar.
|
|
219
|
+
*/
|
|
220
|
+
[CaseFilePatterns.verifyExport]: {
|
|
221
|
+
payload: { code: string; entries: { sequence: number; sha256: string }[] };
|
|
222
|
+
response: CaseFileVerifyExportResponseEntity;
|
|
223
|
+
};
|
|
224
|
+
[CaseFilePatterns.getSharedExport]: {
|
|
225
|
+
payload: { token: string };
|
|
226
|
+
response: CaseFileExportResponseEntity;
|
|
227
|
+
};
|
|
228
|
+
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
type DocumentAccessAction,
|
|
2
3
|
type DocumentAccessLevel,
|
|
3
4
|
type DocumentAttachmentEntity,
|
|
4
5
|
type DocumentDeliveryEntity,
|
|
5
6
|
type DocumentEntity,
|
|
6
7
|
type DocumentInstruction,
|
|
8
|
+
type DocumentParticipantEntity,
|
|
7
9
|
type DocumentStatus,
|
|
8
10
|
} from '../base/entities';
|
|
9
11
|
import {
|
|
@@ -12,12 +14,21 @@ import {
|
|
|
12
14
|
type DocumentCreateResponseEntity,
|
|
13
15
|
type DocumentDeriveResponseEntity,
|
|
14
16
|
type DocumentDiscardResponseEntity,
|
|
17
|
+
type DocumentEmailCopyIssuedEntity,
|
|
18
|
+
type DocumentEmailCopyViewEntity,
|
|
19
|
+
type DocumentReminderEntity,
|
|
15
20
|
type DocumentGetAllResponseEntity,
|
|
16
21
|
type DocumentGetByIdResponseEntity,
|
|
17
22
|
type DocumentGetSummaryResponseEntity,
|
|
18
23
|
type DocumentInboxItemEntity,
|
|
19
24
|
type DocumentPublicFileResponseEntity,
|
|
25
|
+
type DocumentReassignResponseEntity,
|
|
20
26
|
type DocumentReviewResponseEntity,
|
|
27
|
+
type DocumentSignManyResponseEntity,
|
|
28
|
+
type DocumentAgendaResponseEntity,
|
|
29
|
+
type DocumentComposeResponseEntity,
|
|
30
|
+
type DocumentComposition,
|
|
31
|
+
type DocumentTrailExportEntity,
|
|
21
32
|
type DocumentUpdateResponseEntity,
|
|
22
33
|
type DocumentVerifyResponseEntity,
|
|
23
34
|
} from '../entities';
|
|
@@ -32,6 +43,8 @@ export const DocumentPatterns = {
|
|
|
32
43
|
create: 'gestorDocumental.document.create',
|
|
33
44
|
update: 'gestorDocumental.document.update',
|
|
34
45
|
review: 'gestorDocumental.document.review',
|
|
46
|
+
signMany: 'gestorDocumental.document.signMany',
|
|
47
|
+
reassign: 'gestorDocumental.document.reassign',
|
|
35
48
|
discard: 'gestorDocumental.document.discard',
|
|
36
49
|
annul: 'gestorDocumental.document.annul',
|
|
37
50
|
derive: 'gestorDocumental.document.derive',
|
|
@@ -39,6 +52,13 @@ export const DocumentPatterns = {
|
|
|
39
52
|
verify: 'gestorDocumental.document.verify',
|
|
40
53
|
getPublicFile: 'gestorDocumental.document.getPublicFile',
|
|
41
54
|
getFilesFolder: 'gestorDocumental.document.getFilesFolder',
|
|
55
|
+
getAgenda: 'gestorDocumental.document.getAgenda',
|
|
56
|
+
exportTrail: 'gestorDocumental.document.exportTrail',
|
|
57
|
+
compose: 'gestorDocumental.document.compose',
|
|
58
|
+
issueEmailCopies: 'gestorDocumental.document.issueEmailCopies',
|
|
59
|
+
getEmailCopy: 'gestorDocumental.document.getEmailCopy',
|
|
60
|
+
getEmailCopyFile: 'gestorDocumental.document.getEmailCopyFile',
|
|
61
|
+
claimReminders: 'gestorDocumental.document.claimReminders',
|
|
42
62
|
} as const;
|
|
43
63
|
|
|
44
64
|
/**
|
|
@@ -90,6 +110,12 @@ export interface DocumentWritePayload extends Pick<DocumentEntity, 'subject' | '
|
|
|
90
110
|
attachments?: Pick<DocumentAttachmentEntity, 'name' | 'type' | 'fileId' | 'url'>[];
|
|
91
111
|
// Funcionarios que visan y que firman, en el orden en que les toca. Primero visan todos y después firman.
|
|
92
112
|
visaEmployeeIds: string[];
|
|
113
|
+
// Etapa de cada visador, en su orden ([1, 1, 2]: los dos primeros visan a la vez). Sin etapas, visan en cadena.
|
|
114
|
+
visaStages?: number[] | null;
|
|
115
|
+
// Al reenviar un documento rechazado, pedir de nuevo las visaciones ya hechas en vez de seguir donde quedó.
|
|
116
|
+
restartFlow?: boolean;
|
|
117
|
+
// Contenido redactado con una plantilla (el PDF ya armado va en `file`): se guarda para volver a editarlo.
|
|
118
|
+
composition?: DocumentComposition | null;
|
|
93
119
|
signatureEmployeeIds: string[];
|
|
94
120
|
// Firmas y visaciones en una hoja aparte al final, en vez de al pie de la última página.
|
|
95
121
|
signatureSheet?: boolean;
|
|
@@ -99,14 +125,71 @@ export interface DocumentWritePayload extends Pick<DocumentEntity, 'subject' | '
|
|
|
99
125
|
responseDueAt?: string | null;
|
|
100
126
|
// Documento al que este responde.
|
|
101
127
|
replyToDocumentId?: string | null;
|
|
128
|
+
// Instituciones (y usuarios) de DocDigital a quienes va: al terminar la firma pasa a Oficina de Partes.
|
|
129
|
+
externalRecipients?: DocumentExternalRecipientInput[];
|
|
130
|
+
// Fin de la restricción de acceso (ISO 8601), si no es público.
|
|
131
|
+
restrictionEndsAt?: string | null;
|
|
132
|
+
// Copia por correo a quienes están fuera del Estado: sale al finalizar o, si también va por DocDigital, al despacharlo.
|
|
133
|
+
emailCopies?: DocumentEmailCopyInput[];
|
|
102
134
|
action?: 'Submit';
|
|
103
135
|
actor: DocumentActor;
|
|
104
136
|
}
|
|
105
137
|
|
|
138
|
+
/** Persona u organización fuera del Estado que recibe una copia por correo. */
|
|
139
|
+
export interface DocumentEmailCopyInput {
|
|
140
|
+
name: string;
|
|
141
|
+
email: string;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** Destinatario externo: una institución de DocDigital y, si se indica, uno de sus usuarios. */
|
|
145
|
+
export interface DocumentExternalRecipientInput {
|
|
146
|
+
entityId: number;
|
|
147
|
+
userId?: number | null;
|
|
148
|
+
}
|
|
149
|
+
|
|
106
150
|
/**
|
|
107
151
|
* Qué se envía y qué se responde en cada patrón. Generado desde los handlers y los DTO del microservicio.
|
|
108
152
|
*/
|
|
153
|
+
/** Una lectura que queda en el registro de accesos del documento. */
|
|
154
|
+
export interface DocumentAccessInput {
|
|
155
|
+
action: DocumentAccessAction;
|
|
156
|
+
fullName: string;
|
|
157
|
+
}
|
|
158
|
+
|
|
109
159
|
export interface DocumentContract {
|
|
160
|
+
/**
|
|
161
|
+
* Arma el PDF de un documento redactado con una plantilla oficial: membrete, estructura y espacio libre para el
|
|
162
|
+
* número, las visaciones, las firmas y el QR. Con `preview` lo entrega para verlo; si no, lo sube y entrega su
|
|
163
|
+
* `fileId` para guardarlo como el PDF del documento.
|
|
164
|
+
*/
|
|
165
|
+
[DocumentPatterns.compose]: {
|
|
166
|
+
payload: {
|
|
167
|
+
documentTypeId: string;
|
|
168
|
+
subject: string;
|
|
169
|
+
composition: DocumentComposition;
|
|
170
|
+
visaCount: number;
|
|
171
|
+
signatureCount: number;
|
|
172
|
+
signatureSheet?: boolean;
|
|
173
|
+
/** Unidad que emite, para el membrete. */
|
|
174
|
+
issuingUnitName?: string | null;
|
|
175
|
+
preview?: boolean;
|
|
176
|
+
actor: DocumentActor;
|
|
177
|
+
};
|
|
178
|
+
response: DocumentComposeResponseEntity;
|
|
179
|
+
};
|
|
180
|
+
/** Plazos del funcionario entre `from` y `to` (hasta 62 días), y lo que tiene vencido sin atender. */
|
|
181
|
+
[DocumentPatterns.getAgenda]: {
|
|
182
|
+
payload: { from: string; to: string; actor: DocumentActor };
|
|
183
|
+
response: DocumentAgendaResponseEntity;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Trazabilidad del documento en PDF: datos, flujo, hechos y huella de sus archivos. Con las mismas reglas de acceso
|
|
187
|
+
* del detalle. `generatedBy`: quién la descarga (va al pie).
|
|
188
|
+
*/
|
|
189
|
+
[DocumentPatterns.exportTrail]: {
|
|
190
|
+
payload: Pick<DocumentEntity, 'id'> & { actor?: DocumentActor; viewAll?: boolean; generatedBy: string };
|
|
191
|
+
response: DocumentTrailExportEntity;
|
|
192
|
+
};
|
|
110
193
|
[DocumentPatterns.getAll]: {
|
|
111
194
|
payload: {
|
|
112
195
|
pagination?: { page?: number; limit?: number };
|
|
@@ -118,6 +201,14 @@ export interface DocumentContract {
|
|
|
118
201
|
// Rango de fechas de creación (ISO 8601).
|
|
119
202
|
dateFrom?: string;
|
|
120
203
|
dateTo?: string;
|
|
204
|
+
// Búsqueda avanzada: número (del documento o folio de ingreso) y año, firmante, redactor y unidad emisora.
|
|
205
|
+
number?: number;
|
|
206
|
+
year?: number;
|
|
207
|
+
signerEmployeeId?: string;
|
|
208
|
+
authorEmployeeId?: string;
|
|
209
|
+
directorateCodeReference?: number;
|
|
210
|
+
// Texto completo, en el asunto y en el contenido del PDF.
|
|
211
|
+
text?: string;
|
|
121
212
|
};
|
|
122
213
|
// Obligatorio en todas las bandejas salvo `all`.
|
|
123
214
|
actor?: DocumentActor;
|
|
@@ -140,8 +231,9 @@ export interface DocumentContract {
|
|
|
140
231
|
[DocumentPatterns.getById]: {
|
|
141
232
|
// Con `actor`, el documento solo se entrega a su redactor y a quienes lo visan o firman, y la respuesta dice qué
|
|
142
233
|
// puede hacer con él. `viewAll` levanta esa restricción para quien tiene permiso de ver todos los documentos
|
|
143
|
-
// (historial), sin perder lo que puede hacer si además participa.
|
|
144
|
-
|
|
234
|
+
// (historial), sin perder lo que puede hacer si además participa. Con `access`, la lectura queda en el registro de
|
|
235
|
+
// accesos del documento a nombre de `fullName` (abrirlo varias veces seguidas cuenta una vez).
|
|
236
|
+
payload: Pick<DocumentEntity, 'id'> & { actor?: DocumentActor; viewAll?: boolean; access?: DocumentAccessInput };
|
|
145
237
|
response: DocumentGetByIdResponseEntity;
|
|
146
238
|
};
|
|
147
239
|
[DocumentPatterns.create]: {
|
|
@@ -165,6 +257,36 @@ export interface DocumentContract {
|
|
|
165
257
|
};
|
|
166
258
|
response: DocumentReviewResponseEntity;
|
|
167
259
|
};
|
|
260
|
+
/**
|
|
261
|
+
* Firma con un solo OTP varios documentos que el funcionario tiene en su turno de firma (los de un lote, o los que
|
|
262
|
+
* marcó en su bandeja). Cada uno queda firmado aparte; los que no caben en la solicitud quedan en `remaining`.
|
|
263
|
+
*/
|
|
264
|
+
[DocumentPatterns.signMany]: {
|
|
265
|
+
payload: {
|
|
266
|
+
ids: DocumentEntity['id'][];
|
|
267
|
+
observation?: string | null;
|
|
268
|
+
// Datos de quien firma, para el sello de la firma (los resuelve el gateway desde la sesión).
|
|
269
|
+
signer: { rut: string; fullName: string; role: string; areaName: string };
|
|
270
|
+
otp?: string;
|
|
271
|
+
actor: DocumentActor;
|
|
272
|
+
};
|
|
273
|
+
response: DocumentSignManyResponseEntity;
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* Pasa un turno pendiente (de visación o de firma) a otro funcionario, por ausencia o por error, y lo deja en la
|
|
277
|
+
* trazabilidad con su motivo. Puede hacerlo quien redactó el documento; con `anyDocument`, quien lleva el registro.
|
|
278
|
+
*/
|
|
279
|
+
[DocumentPatterns.reassign]: {
|
|
280
|
+
payload: Pick<DocumentEntity, 'id'> & {
|
|
281
|
+
participantId: DocumentParticipantEntity['id'];
|
|
282
|
+
// Funcionario que toma el turno.
|
|
283
|
+
employeeId: string;
|
|
284
|
+
reason: string;
|
|
285
|
+
actor: DocumentActor;
|
|
286
|
+
anyDocument?: boolean;
|
|
287
|
+
};
|
|
288
|
+
response: DocumentReassignResponseEntity;
|
|
289
|
+
};
|
|
168
290
|
[DocumentPatterns.discard]: {
|
|
169
291
|
payload: Pick<DocumentEntity, 'id'> & { actor: DocumentActor };
|
|
170
292
|
response: DocumentDiscardResponseEntity;
|
|
@@ -186,6 +308,8 @@ export interface DocumentContract {
|
|
|
186
308
|
note?: string | null;
|
|
187
309
|
// Plazo para atenderlo (ISO 8601).
|
|
188
310
|
dueAt?: string | null;
|
|
311
|
+
// O el plazo en días hábiles (Ley 19.880): el servicio calcula la fecha con los feriados cargados.
|
|
312
|
+
dueBusinessDays?: number | null;
|
|
189
313
|
actor: DocumentActor;
|
|
190
314
|
viewAll?: boolean;
|
|
191
315
|
};
|
|
@@ -206,6 +330,31 @@ export interface DocumentContract {
|
|
|
206
330
|
payload: { code: string };
|
|
207
331
|
response: DocumentPublicFileResponseEntity;
|
|
208
332
|
};
|
|
333
|
+
/**
|
|
334
|
+
* Emite las copias por correo pendientes de estos documentos, si ya corresponde (finalizado y, si va por DocDigital,
|
|
335
|
+
* despachado): genera el enlace de cada una. Se puede pedir de más: lo ya emitido no se repite.
|
|
336
|
+
*/
|
|
337
|
+
[DocumentPatterns.issueEmailCopies]: {
|
|
338
|
+
payload: { documentIds: string[] };
|
|
339
|
+
response: DocumentEmailCopyIssuedEntity[];
|
|
340
|
+
};
|
|
341
|
+
/** Sin sesión, con el token de la copia: el documento y quién lo emitió. */
|
|
342
|
+
[DocumentPatterns.getEmailCopy]: {
|
|
343
|
+
payload: { token: string };
|
|
344
|
+
response: DocumentEmailCopyViewEntity;
|
|
345
|
+
};
|
|
346
|
+
/**
|
|
347
|
+
* Recordatorios de plazos que corresponde enviar ahora: lo que vence en un día hábil y lo vencido sin atender. Cada
|
|
348
|
+
* uno se entrega una sola vez (queda marcado al reclamarlo), aunque lo pidan varias instancias del gateway a la vez.
|
|
349
|
+
*/
|
|
350
|
+
[DocumentPatterns.claimReminders]: {
|
|
351
|
+
payload: Record<string, never>;
|
|
352
|
+
response: DocumentReminderEntity[];
|
|
353
|
+
};
|
|
354
|
+
[DocumentPatterns.getEmailCopyFile]: {
|
|
355
|
+
payload: { token: string };
|
|
356
|
+
response: DocumentPublicFileResponseEntity;
|
|
357
|
+
};
|
|
209
358
|
/** Carpeta de Drive de los documentos y sus anexos: el gateway la pide antes de subir cada archivo. */
|
|
210
359
|
[DocumentPatterns.getFilesFolder]: {
|
|
211
360
|
payload: Record<string, never>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type DocumentCategory, type DocumentTypeEntity } from '../base/entities';
|
|
1
|
+
import { type DocumentCategory, type DocumentParticipantRole, type DocumentTypeEntity } from '../base/entities';
|
|
2
2
|
import {
|
|
3
3
|
type DocumentTypeCreateResponseEntity,
|
|
4
4
|
type DocumentTypeGetAllResponseEntity,
|
|
@@ -16,6 +16,19 @@ export const DocumentTypePatterns = {
|
|
|
16
16
|
setEnabled: 'gestorDocumental.documentType.setEnabled',
|
|
17
17
|
} as const;
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Paso del flujo sugerido de un tipo documental: un funcionario en particular, o quien dirija una dirección al
|
|
21
|
+
* momento de redactar (su jefatura o, con subrogancia activa, el subrogante). El nombre de la dirección lo resuelve
|
|
22
|
+
* el gateway; el navegador solo indica cuál es.
|
|
23
|
+
*/
|
|
24
|
+
export type DocumentFlowStepInput = (
|
|
25
|
+
| { role: DocumentParticipantRole; type: 'Employee'; employeeId: string }
|
|
26
|
+
| { role: DocumentParticipantRole; type: 'DirectorateHead'; directorateCodeReference: number; name: string }
|
|
27
|
+
) & {
|
|
28
|
+
// Visa a la vez con el paso anterior (visación en paralelo). Solo en visaciones.
|
|
29
|
+
withPrevious?: boolean;
|
|
30
|
+
};
|
|
31
|
+
|
|
19
32
|
/** Datos de un tipo documental al crearlo o editarlo. */
|
|
20
33
|
export interface DocumentTypeWritePayload {
|
|
21
34
|
name: string;
|
|
@@ -25,8 +38,18 @@ export interface DocumentTypeWritePayload {
|
|
|
25
38
|
// Próximo número que se asignará: permite partir desde el correlativo que la municipalidad ya lleva.
|
|
26
39
|
nextCorrelative?: number;
|
|
27
40
|
resetsYearly?: boolean;
|
|
41
|
+
// Sus documentos llevan número (por omisión, sí).
|
|
42
|
+
numbered?: boolean;
|
|
28
43
|
directorateCodeReference?: number | null;
|
|
44
|
+
// Serie documental del Cuadro de Clasificación (sin valor: sin clasificar).
|
|
45
|
+
archivalSeriesId?: string | null;
|
|
46
|
+
// Entidad emisora (sin valor: la municipalidad).
|
|
47
|
+
issuingEntityId?: string | null;
|
|
48
|
+
// Tipo cuyo correlativo comparte (sin valor: el suyo propio).
|
|
49
|
+
sharesNumberingWithId?: string | null;
|
|
29
50
|
enabled?: boolean;
|
|
51
|
+
// Flujo sugerido, en el orden en que les toca dentro de cada rol. Al editar, si no viene, el flujo no cambia.
|
|
52
|
+
flowSteps?: DocumentFlowStepInput[];
|
|
30
53
|
}
|
|
31
54
|
|
|
32
55
|
/**
|
|
@@ -37,7 +60,14 @@ export interface DocumentTypeContract {
|
|
|
37
60
|
// sin `page` y `limit` responde todos los tipos en una sola página
|
|
38
61
|
payload: {
|
|
39
62
|
pagination?: { page?: number; limit?: number };
|
|
40
|
-
filters?: {
|
|
63
|
+
filters?: {
|
|
64
|
+
search?: string;
|
|
65
|
+
enabled?: boolean;
|
|
66
|
+
category?: DocumentCategory;
|
|
67
|
+
// Solo los que puede usar quien redacta: los de toda la municipalidad y los de estas direcciones (o de una
|
|
68
|
+
// entidad emisora por la que actúan).
|
|
69
|
+
usableByDirectorates?: number[];
|
|
70
|
+
};
|
|
41
71
|
};
|
|
42
72
|
response: RpcPage<DocumentTypeGetAllResponseEntity[]>;
|
|
43
73
|
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type HolidayRemoveResponseEntity, type HolidayResponseEntity } from '../entities';
|
|
2
|
+
|
|
3
|
+
/** Patrones NATS de `holiday`: feriados para contar días hábiles. */
|
|
4
|
+
export const HolidayPatterns = {
|
|
5
|
+
getAll: 'gestorDocumental.holiday.getAll',
|
|
6
|
+
create: 'gestorDocumental.holiday.create',
|
|
7
|
+
remove: 'gestorDocumental.holiday.remove',
|
|
8
|
+
} as const;
|
|
9
|
+
|
|
10
|
+
export interface HolidayContract {
|
|
11
|
+
/** Feriados de un año, en orden. */
|
|
12
|
+
[HolidayPatterns.getAll]: { payload: { year: number }; response: HolidayResponseEntity[] };
|
|
13
|
+
/** `date` como «AAAA-MM-DD». */
|
|
14
|
+
[HolidayPatterns.create]: { payload: { date: string; name: string }; response: HolidayResponseEntity };
|
|
15
|
+
[HolidayPatterns.remove]: { payload: { id: string }; response: HolidayRemoveResponseEntity };
|
|
16
|
+
}
|