@muni-sanfer/types-gestor-documental 0.0.1-beta.25 → 0.0.1-beta.27

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.
@@ -33,7 +33,7 @@ export declare const DocumentParticipantStatus: {
33
33
  Resolved: "Resolved";
34
34
  Rejected: "Rejected";
35
35
  };
36
- export type DocumentTrackingAction = 'Created' | 'Updated' | 'Submitted' | 'Visaed' | 'Signed' | 'Rejected' | 'Finished' | 'Discarded' | 'Numbered' | 'NumberAnnulled' | 'Annulled' | 'Delivered' | 'Derived' | 'Reassigned' | 'Dispatched' | 'DispatchReturned' | 'Received' | 'EmailCopySent' | 'EmailCopyOpened' | 'DispositionRecorded';
36
+ export type DocumentTrackingAction = 'Created' | 'Updated' | 'Submitted' | 'Visaed' | 'Signed' | 'Rejected' | 'Finished' | 'Discarded' | 'Numbered' | 'NumberAnnulled' | 'Annulled' | 'Delivered' | 'Derived' | 'Reassigned' | 'Dispatched' | 'DispatchReturned' | 'DispatchedByContingency' | 'Received' | 'EmailCopySent' | 'EmailCopyOpened' | 'DispositionRecorded' | 'TransparencyRedacted' | 'TransparencyPublished' | 'TransparencyExcluded' | 'TransparencyWithdrawn';
37
37
  export declare const DocumentTrackingAction: {
38
38
  Created: "Created";
39
39
  Updated: "Updated";
@@ -51,15 +51,28 @@ export declare const DocumentTrackingAction: {
51
51
  Reassigned: "Reassigned";
52
52
  Dispatched: "Dispatched";
53
53
  DispatchReturned: "DispatchReturned";
54
+ DispatchedByContingency: "DispatchedByContingency";
54
55
  Received: "Received";
55
56
  EmailCopySent: "EmailCopySent";
56
57
  EmailCopyOpened: "EmailCopyOpened";
57
58
  DispositionRecorded: "DispositionRecorded";
59
+ TransparencyRedacted: "TransparencyRedacted";
60
+ TransparencyPublished: "TransparencyPublished";
61
+ TransparencyExcluded: "TransparencyExcluded";
62
+ TransparencyWithdrawn: "TransparencyWithdrawn";
58
63
  };
59
- export type DocumentOrigin = 'Internal' | 'DocDigital';
64
+ export type DocumentOrigin = 'Internal' | 'DocDigital' | 'Manual';
60
65
  export declare const DocumentOrigin: {
61
66
  Internal: "Internal";
62
67
  DocDigital: "DocDigital";
68
+ Manual: "Manual";
69
+ };
70
+ export type CommunicationMeans = 'Paper' | 'Email' | 'Courier' | 'Other';
71
+ export declare const CommunicationMeans: {
72
+ Paper: "Paper";
73
+ Email: "Email";
74
+ Courier: "Courier";
75
+ Other: "Other";
63
76
  };
64
77
  export type DocumentDispatchStatus = 'Pending' | 'Dispatched' | 'Returned';
65
78
  export declare const DocumentDispatchStatus: {
@@ -275,6 +288,11 @@ export declare const AccessRequestEventAction: {
275
288
  Resolved: "Resolved";
276
289
  AppealRegistered: "AppealRegistered";
277
290
  };
291
+ export type TransparencyStatus = 'Published' | 'Excluded';
292
+ export declare const TransparencyStatus: {
293
+ Published: "Published";
294
+ Excluded: "Excluded";
295
+ };
278
296
  export interface DocumentTypeEntity {
279
297
  id: string;
280
298
  name: string;
@@ -285,6 +303,8 @@ export interface DocumentTypeEntity {
285
303
  correlativeYear?: number | null;
286
304
  resetsYearly: boolean;
287
305
  numbered: boolean;
306
+ activeTransparency: boolean;
307
+ transparencySection?: string | null;
288
308
  directorateCodeReference?: number | null;
289
309
  archivalSeries?: ArchivalSeriesEntity | null;
290
310
  archivalSeriesId?: string | null;
@@ -324,6 +344,7 @@ export interface DocumentEntity {
324
344
  externalFolio?: string | null;
325
345
  externalSender?: string | null;
326
346
  externalDate?: string | null;
347
+ intakeMeans?: CommunicationMeans | null;
327
348
  composition?: JsonValue | null;
328
349
  contentText?: string | null;
329
350
  textExtractedAt?: string | null;
@@ -357,6 +378,13 @@ export interface DocumentEntity {
357
378
  accesses?: DocumentAccessEntity[];
358
379
  disposition?: DispositionRecordEntity | null;
359
380
  dispositionId?: string | null;
381
+ transparencyStatus?: TransparencyStatus | null;
382
+ transparencyUrl?: string | null;
383
+ transparencyNote?: string | null;
384
+ transparencyAt?: string | null;
385
+ transparencyByFullName?: string | null;
386
+ redactedFileId?: string | null;
387
+ redactedFileName?: string | null;
360
388
  accessRequestResponses?: AccessRequestEntity[];
361
389
  accessRequestDeliveries?: AccessRequestDocumentEntity[];
362
390
  dispatch?: DocumentDispatchEntity | null;
@@ -691,6 +719,11 @@ export interface DocumentDispatchEntity {
691
719
  returnedByEmployeeId?: string | null;
692
720
  returnedByFullName?: string | null;
693
721
  returnReason?: string | null;
722
+ contingencyMeans?: CommunicationMeans | null;
723
+ contingencySentTo?: string | null;
724
+ contingencyReason?: string | null;
725
+ contingencyReceiptFileId?: string | null;
726
+ contingencyReceiptName?: string | null;
694
727
  document?: DocumentEntity;
695
728
  documentId: string;
696
729
  createdAt: string;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // This file was auto-generated by prisma-generator-typescript-interfaces
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.AccessRequestEventAction = exports.AccessRequestResolution = exports.AccessRequestStatus = exports.AccessRequestChannel = exports.DispositionKind = exports.FinalDisposition = exports.AuditAction = exports.AuditEntity = exports.DocumentAccessAction = exports.QualityMetricKey = exports.ServiceOutageKind = exports.WorkFolderItemKind = exports.TextSnippetSection = exports.ScanSessionStatus = exports.CaseFileAccessAction = exports.CaseFileTrackingAction = exports.CaseFileActorType = exports.CaseFileActorRelation = exports.CaseFileEntryKind = exports.CaseFileActuationType = exports.CaseFileIncorporationMechanism = exports.CaseFileStatus = exports.DocumentInstruction = exports.DocumentDeliveryOrigin = exports.DocumentRecipientType = exports.DocumentAttachmentType = exports.DocumentFlowStepType = exports.DocDigitalInboundStatus = exports.DocumentDispatchStatus = exports.DocumentOrigin = exports.DocumentTrackingAction = exports.DocumentParticipantStatus = exports.DocumentParticipantRole = exports.DocumentAccessLevel = exports.DocumentStatus = exports.DocumentCategory = void 0;
4
+ exports.TransparencyStatus = exports.AccessRequestEventAction = exports.AccessRequestResolution = exports.AccessRequestStatus = exports.AccessRequestChannel = exports.DispositionKind = exports.FinalDisposition = exports.AuditAction = exports.AuditEntity = exports.DocumentAccessAction = exports.QualityMetricKey = exports.ServiceOutageKind = exports.WorkFolderItemKind = exports.TextSnippetSection = exports.ScanSessionStatus = exports.CaseFileAccessAction = exports.CaseFileTrackingAction = exports.CaseFileActorType = exports.CaseFileActorRelation = exports.CaseFileEntryKind = exports.CaseFileActuationType = exports.CaseFileIncorporationMechanism = exports.CaseFileStatus = exports.DocumentInstruction = exports.DocumentDeliveryOrigin = exports.DocumentRecipientType = exports.DocumentAttachmentType = exports.DocumentFlowStepType = exports.DocDigitalInboundStatus = exports.DocumentDispatchStatus = exports.CommunicationMeans = exports.DocumentOrigin = exports.DocumentTrackingAction = exports.DocumentParticipantStatus = exports.DocumentParticipantRole = exports.DocumentAccessLevel = exports.DocumentStatus = exports.DocumentCategory = void 0;
5
5
  exports.DocumentCategory = {
6
6
  Decree: 'Decree',
7
7
  Communication: 'Communication',
@@ -49,14 +49,26 @@ exports.DocumentTrackingAction = {
49
49
  Reassigned: 'Reassigned',
50
50
  Dispatched: 'Dispatched',
51
51
  DispatchReturned: 'DispatchReturned',
52
+ DispatchedByContingency: 'DispatchedByContingency',
52
53
  Received: 'Received',
53
54
  EmailCopySent: 'EmailCopySent',
54
55
  EmailCopyOpened: 'EmailCopyOpened',
55
56
  DispositionRecorded: 'DispositionRecorded',
57
+ TransparencyRedacted: 'TransparencyRedacted',
58
+ TransparencyPublished: 'TransparencyPublished',
59
+ TransparencyExcluded: 'TransparencyExcluded',
60
+ TransparencyWithdrawn: 'TransparencyWithdrawn',
56
61
  };
57
62
  exports.DocumentOrigin = {
58
63
  Internal: 'Internal',
59
64
  DocDigital: 'DocDigital',
65
+ Manual: 'Manual',
66
+ };
67
+ exports.CommunicationMeans = {
68
+ Paper: 'Paper',
69
+ Email: 'Email',
70
+ Courier: 'Courier',
71
+ Other: 'Other',
60
72
  };
61
73
  exports.DocumentDispatchStatus = {
62
74
  Pending: 'Pending',
@@ -243,3 +255,7 @@ exports.AccessRequestEventAction = {
243
255
  Resolved: 'Resolved',
244
256
  AppealRegistered: 'AppealRegistered',
245
257
  };
258
+ exports.TransparencyStatus = {
259
+ Published: 'Published',
260
+ Excluded: 'Excluded',
261
+ };
@@ -35,6 +35,9 @@ export interface DocumentTypeWritePayload {
35
35
  nextCorrelative?: number;
36
36
  resetsYearly?: boolean;
37
37
  numbered?: boolean;
38
+ /** Transparencia Activa: sus documentos se publican cada mes, en esta sección del Portal. */
39
+ activeTransparency?: boolean;
40
+ transparencySection?: string | null;
38
41
  directorateCodeReference?: number | null;
39
42
  archivalSeriesId?: string | null;
40
43
  issuingEntityId?: string | null;
@@ -11,6 +11,7 @@ import { type SignatureCheckContract } from './signatureCheck.contract';
11
11
  import { type RepositoryExportContract } from './repositoryExport.contract';
12
12
  import { type RetentionContract } from './retention.contract';
13
13
  import { type AccessRequestContract } from './accessRequest.contract';
14
+ import { type TransparencyContract } from './transparency.contract';
14
15
  import { type ScanContract } from './scan.contract';
15
16
  import { type PartsOfficeContract } from './partsOffice.contract';
16
17
  import { type ProcedureContract } from './procedure.contract';
@@ -37,6 +38,7 @@ export * from './signatureCheck.contract';
37
38
  export * from './repositoryExport.contract';
38
39
  export * from './retention.contract';
39
40
  export * from './accessRequest.contract';
41
+ export * from './transparency.contract';
40
42
  /** Patrones NATS de gestor-documental-ms, por recurso: `gestorDocumental.<recurso>.<acción>`. */
41
43
  export declare const GestorDocumentalPatterns: {
42
44
  readonly documentType: {
@@ -126,6 +128,8 @@ export declare const GestorDocumentalPatterns: {
126
128
  readonly returnInbound: "gestorDocumental.partsOffice.returnInbound";
127
129
  readonly getInboundFile: "gestorDocumental.partsOffice.getInboundFile";
128
130
  readonly checkEnablement: "gestorDocumental.partsOffice.checkEnablement";
131
+ readonly dispatchByContingency: "gestorDocumental.partsOffice.dispatchByContingency";
132
+ readonly registerManualIntake: "gestorDocumental.partsOffice.registerManualIntake";
129
133
  };
130
134
  readonly registerBook: {
131
135
  readonly get: "gestorDocumental.registerBook.get";
@@ -217,6 +221,14 @@ export declare const GestorDocumentalPatterns: {
217
221
  readonly update: "gestorDocumental.accessRequest.update";
218
222
  readonly act: "gestorDocumental.accessRequest.act";
219
223
  };
224
+ readonly transparency: {
225
+ readonly getMonth: "gestorDocumental.transparency.getMonth";
226
+ readonly update: "gestorDocumental.transparency.update";
227
+ readonly export: "gestorDocumental.transparency.export";
228
+ readonly getRedactedFile: "gestorDocumental.transparency.getRedactedFile";
229
+ readonly getPublic: "gestorDocumental.transparency.getPublic";
230
+ readonly getPublicFile: "gestorDocumental.transparency.getPublicFile";
231
+ };
220
232
  };
221
233
  /** Contrato completo de gestor-documental-ms: la unión de los contratos de sus recursos. */
222
- export type GestorDocumentalContract = DocumentTypeContract & DocumentContract & ProcedureContract & IssuingEntityContract & CaseFileContract & PartsOfficeContract & RegisterBookContract & SignatureBatchContract & WorkFolderContract & ScanContract & ArchivalSeriesContract & TextSnippetContract & HolidayContract & IndicatorsContract & AuditContract & SignatureCheckContract & RepositoryExportContract & RetentionContract & AccessRequestContract;
234
+ export type GestorDocumentalContract = DocumentTypeContract & DocumentContract & ProcedureContract & IssuingEntityContract & CaseFileContract & PartsOfficeContract & RegisterBookContract & SignatureBatchContract & WorkFolderContract & ScanContract & ArchivalSeriesContract & TextSnippetContract & HolidayContract & IndicatorsContract & AuditContract & SignatureCheckContract & RepositoryExportContract & RetentionContract & AccessRequestContract & TransparencyContract;
@@ -28,6 +28,7 @@ const signatureCheck_contract_1 = require("./signatureCheck.contract");
28
28
  const repositoryExport_contract_1 = require("./repositoryExport.contract");
29
29
  const retention_contract_1 = require("./retention.contract");
30
30
  const accessRequest_contract_1 = require("./accessRequest.contract");
31
+ const transparency_contract_1 = require("./transparency.contract");
31
32
  const scan_contract_1 = require("./scan.contract");
32
33
  const partsOffice_contract_1 = require("./partsOffice.contract");
33
34
  const procedure_contract_1 = require("./procedure.contract");
@@ -54,6 +55,7 @@ __exportStar(require("./signatureCheck.contract"), exports);
54
55
  __exportStar(require("./repositoryExport.contract"), exports);
55
56
  __exportStar(require("./retention.contract"), exports);
56
57
  __exportStar(require("./accessRequest.contract"), exports);
58
+ __exportStar(require("./transparency.contract"), exports);
57
59
  /** Patrones NATS de gestor-documental-ms, por recurso: `gestorDocumental.<recurso>.<acción>`. */
58
60
  exports.GestorDocumentalPatterns = {
59
61
  documentType: documentType_contract_1.DocumentTypePatterns,
@@ -75,4 +77,5 @@ exports.GestorDocumentalPatterns = {
75
77
  repositoryExport: repositoryExport_contract_1.RepositoryExportPatterns,
76
78
  retention: retention_contract_1.RetentionPatterns,
77
79
  accessRequest: accessRequest_contract_1.AccessRequestPatterns,
80
+ transparency: transparency_contract_1.TransparencyPatterns,
78
81
  };
@@ -1,4 +1,4 @@
1
- import { type DocumentAccessLevel, type DocumentInstruction } from '../base/entities';
1
+ import { type CommunicationMeans, type DocumentAccessLevel, type DocumentInstruction } from '../base/entities';
2
2
  import { type DocDigitalDocumentTypeEntity, type DocDigitalEntityEntity, type PartsOfficeInboundEntity, type DocDigitalUserEntity, type EnablementPersonInput, type PartsOfficeEnablementEntity, type PartsOfficeDispatchEntity, type PartsOfficeFileEntity, type PartsOfficeOkResponseEntity, type PartsOfficeRegisterResponseEntity, type PartsOfficeStatusEntity, type PartsOfficeSummaryEntity, type PartsOfficeSyncResponseEntity } from '../entities';
3
3
  import { type RpcPage } from './contract';
4
4
  import { type DocumentActor, type DocumentExternalRecipientInput } from './document.contract';
@@ -22,6 +22,8 @@ export declare const PartsOfficePatterns: {
22
22
  readonly returnInbound: "gestorDocumental.partsOffice.returnInbound";
23
23
  readonly getInboundFile: "gestorDocumental.partsOffice.getInboundFile";
24
24
  readonly checkEnablement: "gestorDocumental.partsOffice.checkEnablement";
25
+ readonly dispatchByContingency: "gestorDocumental.partsOffice.dispatchByContingency";
26
+ readonly registerManualIntake: "gestorDocumental.partsOffice.registerManualIntake";
25
27
  };
26
28
  /** Destinatario interno de un ingreso, ya resuelto por el gateway (las áreas con sus integrantes). */
27
29
  export type PartsOfficeRecipientInput = {
@@ -48,6 +50,35 @@ interface IListPayload<S> {
48
50
  status?: S;
49
51
  };
50
52
  }
53
+ /** Lo que llegó fuera de DocDigital y Oficina de Partes ingresa a mano. */
54
+ export interface ManualIntakePayload {
55
+ file: {
56
+ fileId: string;
57
+ name: string;
58
+ };
59
+ attachments?: {
60
+ fileId: string;
61
+ name: string;
62
+ }[];
63
+ means: CommunicationMeans;
64
+ /** Cuándo llegó (ISO); sin él, ahora. */
65
+ receivedAt?: string | null;
66
+ senderEntityName: string;
67
+ senderName?: string | null;
68
+ externalFolio?: string | null;
69
+ externalDate?: string | null;
70
+ subject: string;
71
+ documentTypeId: string;
72
+ keywords: string[];
73
+ accessLevel?: DocumentAccessLevel;
74
+ hasSensitiveData?: boolean;
75
+ recipients: unknown[];
76
+ instruction: DocumentInstruction;
77
+ note?: string | null;
78
+ dueAt?: string | null;
79
+ dueBusinessDays?: number | null;
80
+ actor: DocumentActor;
81
+ }
51
82
  export interface PartsOfficeContract {
52
83
  [PartsOfficePatterns.getStatus]: {
53
84
  payload: Record<string, never>;
@@ -118,6 +149,7 @@ export interface PartsOfficeContract {
118
149
  [PartsOfficePatterns.getDispatchFile]: {
119
150
  payload: {
120
151
  id: string;
152
+ receipt?: boolean;
121
153
  };
122
154
  response: PartsOfficeFileEntity;
123
155
  };
@@ -184,5 +216,33 @@ export interface PartsOfficeContract {
184
216
  };
185
217
  response: PartsOfficeEnablementEntity;
186
218
  };
219
+ /**
220
+ * Registro por contingencia: el documento no se pudo despachar por DocDigital y salió por otro medio. Queda
221
+ * despachado, con el medio, a quién, el motivo y el comprobante; si después se registra en DocDigital, su número.
222
+ */
223
+ [PartsOfficePatterns.dispatchByContingency]: {
224
+ payload: {
225
+ id: string;
226
+ means: CommunicationMeans;
227
+ sentAt: string;
228
+ sentTo: string;
229
+ reason: string;
230
+ receipt?: {
231
+ fileId: string;
232
+ name: string;
233
+ } | null;
234
+ docDigitalDocumentId?: string | null;
235
+ actor: DocumentActor;
236
+ };
237
+ response: PartsOfficeOkResponseEntity;
238
+ };
239
+ /**
240
+ * Ingreso manual: lo que llegó fuera de DocDigital (papel, correo) entra con folio de ingreso, como lo recibido
241
+ * por DocDigital, y se deriva.
242
+ */
243
+ [PartsOfficePatterns.registerManualIntake]: {
244
+ payload: ManualIntakePayload;
245
+ response: PartsOfficeRegisterResponseEntity;
246
+ };
187
247
  }
188
248
  export {};
@@ -21,4 +21,6 @@ exports.PartsOfficePatterns = {
21
21
  returnInbound: 'gestorDocumental.partsOffice.returnInbound',
22
22
  getInboundFile: 'gestorDocumental.partsOffice.getInboundFile',
23
23
  checkEnablement: 'gestorDocumental.partsOffice.checkEnablement',
24
+ dispatchByContingency: 'gestorDocumental.partsOffice.dispatchByContingency',
25
+ registerManualIntake: 'gestorDocumental.partsOffice.registerManualIntake',
24
26
  };
@@ -0,0 +1,96 @@
1
+ import { type DocumentPublicFileResponseEntity, type IndicatorsFileEntity, type TransparencyItemEntity, type TransparencyItemStatus, type TransparencyMonthEntity, type TransparencyPublicEntity } from '../entities';
2
+ /** Patrones NATS de `transparency`: Transparencia Activa de los documentos firmados (Ley 20.285, art. 7°). */
3
+ export declare const TransparencyPatterns: {
4
+ readonly getMonth: "gestorDocumental.transparency.getMonth";
5
+ readonly update: "gestorDocumental.transparency.update";
6
+ readonly export: "gestorDocumental.transparency.export";
7
+ readonly getRedactedFile: "gestorDocumental.transparency.getRedactedFile";
8
+ readonly getPublic: "gestorDocumental.transparency.getPublic";
9
+ readonly getPublicFile: "gestorDocumental.transparency.getPublicFile";
10
+ };
11
+ type TTransparencyActor = {
12
+ employeeId: string;
13
+ fullName: string;
14
+ };
15
+ /** Lo que se decide sobre un documento en Transparencia Activa. */
16
+ export type TransparencyUpdatePayload =
17
+ /** Publicarlo (o corregir el enlace): si el original no es público, exige antes la versión tarjada. */
18
+ {
19
+ action: 'publish';
20
+ documentId: string;
21
+ url?: string | null;
22
+ note?: string | null;
23
+ actor: TTransparencyActor;
24
+ }
25
+ /** No se publica, con su motivo (p. ej. reservado por el art. 21 de la Ley 20.285). */
26
+ | {
27
+ action: 'exclude';
28
+ documentId: string;
29
+ reason: string;
30
+ actor: TTransparencyActor;
31
+ }
32
+ /** Vuelve a pendiente: se retiró la publicación o se revisó la exclusión. */
33
+ | {
34
+ action: 'withdraw';
35
+ documentId: string;
36
+ reason: string;
37
+ actor: TTransparencyActor;
38
+ }
39
+ /** Versión tarjada ya subida al gestor de archivos (PDF). */
40
+ | {
41
+ action: 'setRedacted';
42
+ documentId: string;
43
+ fileId: string;
44
+ fileName: string;
45
+ actor: TTransparencyActor;
46
+ } | {
47
+ action: 'removeRedacted';
48
+ documentId: string;
49
+ actor: TTransparencyActor;
50
+ };
51
+ export interface TransparencyContract {
52
+ /** Lo firmado en el mes (hora de Chile) de los tipos que se publican, y lo que ya se publicó aunque el tipo cambie. */
53
+ [TransparencyPatterns.getMonth]: {
54
+ payload: {
55
+ year: number;
56
+ month: number;
57
+ status?: TransparencyItemStatus | null;
58
+ };
59
+ response: TransparencyMonthEntity;
60
+ };
61
+ [TransparencyPatterns.update]: {
62
+ payload: TransparencyUpdatePayload;
63
+ response: TransparencyItemEntity;
64
+ };
65
+ /** Planilla del mes (Excel) para cargar en el Portal de Transparencia. */
66
+ [TransparencyPatterns.export]: {
67
+ payload: {
68
+ year: number;
69
+ month: number;
70
+ generatedBy: string;
71
+ };
72
+ response: IndicatorsFileEntity;
73
+ };
74
+ /** La versión tarjada cargada, para revisarla antes de publicar. */
75
+ [TransparencyPatterns.getRedactedFile]: {
76
+ payload: {
77
+ documentId: string;
78
+ };
79
+ response: DocumentPublicFileResponseEntity;
80
+ };
81
+ /** Página pública de un documento publicado, por su código de verificación. No exige sesión. */
82
+ [TransparencyPatterns.getPublic]: {
83
+ payload: {
84
+ code: string;
85
+ };
86
+ response: TransparencyPublicEntity;
87
+ };
88
+ /** La versión publicada: la tarjada si existe; si no, el original público. Solo de un documento vigente. */
89
+ [TransparencyPatterns.getPublicFile]: {
90
+ payload: {
91
+ code: string;
92
+ };
93
+ response: DocumentPublicFileResponseEntity;
94
+ };
95
+ }
96
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransparencyPatterns = void 0;
4
+ /** Patrones NATS de `transparency`: Transparencia Activa de los documentos firmados (Ley 20.285, art. 7°). */
5
+ exports.TransparencyPatterns = {
6
+ getMonth: 'gestorDocumental.transparency.getMonth',
7
+ update: 'gestorDocumental.transparency.update',
8
+ export: 'gestorDocumental.transparency.export',
9
+ getRedactedFile: 'gestorDocumental.transparency.getRedactedFile',
10
+ getPublic: 'gestorDocumental.transparency.getPublic',
11
+ getPublicFile: 'gestorDocumental.transparency.getPublicFile',
12
+ };
@@ -1,4 +1,4 @@
1
- import { DocumentAnnulledNumberEntity, DocumentAttachmentEntity, DocumentDeliveryEntity, DocumentEntity, DocumentParticipantEntity, DocumentRecipientEntity, DocumentTrackingEntity, DocumentTypeEntity } from '../../base/entities';
1
+ import { type CommunicationMeans, DocumentAnnulledNumberEntity, DocumentAttachmentEntity, DocumentDeliveryEntity, DocumentEntity, DocumentParticipantEntity, DocumentRecipientEntity, DocumentTrackingEntity, DocumentTypeEntity } from '../../base/entities';
2
2
  /** Tipo documental de un documento, con lo necesario para citarlo. */
3
3
  export interface DocumentTypeSummaryEntity {
4
4
  id: DocumentTypeEntity['id'];
@@ -82,6 +82,14 @@ export interface DocumentDispatchResponseEntity {
82
82
  returnedAt: string | null;
83
83
  returnedByFullName: string | null;
84
84
  returnReason: string | null;
85
+ /** Registro por contingencia: salió por otro medio porque no se pudo por DocDigital. */
86
+ contingency: {
87
+ means: CommunicationMeans;
88
+ sentTo: string | null;
89
+ reason: string | null;
90
+ /** Nombre del comprobante, si se adjuntó. */
91
+ receiptName: string | null;
92
+ } | null;
85
93
  }
86
94
  export interface DocumentGetAllResponseEntity {
87
95
  id: DocumentEntity['id'];
@@ -21,6 +21,9 @@ export interface DocumentTypeGetAllResponseEntity {
21
21
  correlativeYear: DocumentTypeEntity['correlativeYear'];
22
22
  resetsYearly: DocumentTypeEntity['resetsYearly'];
23
23
  numbered: DocumentTypeEntity['numbered'];
24
+ /** Transparencia Activa: sus documentos se publican cada mes, en esta sección del Portal. */
25
+ activeTransparency: DocumentTypeEntity['activeTransparency'];
26
+ transparencySection: DocumentTypeEntity['transparencySection'];
24
27
  directorateCodeReference: DocumentTypeEntity['directorateCodeReference'];
25
28
  archivalSeries: {
26
29
  id: string;
@@ -17,3 +17,4 @@ export * from './signatureCheck';
17
17
  export * from './repositoryExport';
18
18
  export * from './retention';
19
19
  export * from './accessRequest';
20
+ export * from './transparency';
@@ -33,3 +33,4 @@ __exportStar(require("./signatureCheck"), exports);
33
33
  __exportStar(require("./repositoryExport"), exports);
34
34
  __exportStar(require("./retention"), exports);
35
35
  __exportStar(require("./accessRequest"), exports);
36
+ __exportStar(require("./transparency"), exports);
@@ -0,0 +1 @@
1
+ export * from './transparency.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("./transparency.entity"), exports);
@@ -0,0 +1,74 @@
1
+ import { type DocumentAccessLevel, type DocumentStatus } from '../../base/entities';
2
+ /** En qué quedó un documento en Transparencia Activa: aún sin decidir, publicado o excluido con su motivo. */
3
+ export type TransparencyItemStatus = 'Pending' | 'Published' | 'Excluded';
4
+ /** Un documento que se publica en Transparencia Activa (Ley 20.285, art. 7°), con lo que se decidió de él. */
5
+ export interface TransparencyItemEntity {
6
+ documentId: string;
7
+ documentStatus: DocumentStatus;
8
+ verificationCode: string | null;
9
+ documentTypeName: string;
10
+ documentTypeAbbreviation: string | null;
11
+ /** Sección del Portal en que se publica, según su tipo documental. */
12
+ section: string | null;
13
+ /** Folio del documento (`Decreto Alcaldicio N° 15/2026`), o el nombre del tipo si no lleva número. */
14
+ reference: string;
15
+ correlative: number | null;
16
+ correlativeYear: number | null;
17
+ subject: string;
18
+ finishedAt: string | null;
19
+ annulledAt: string | null;
20
+ accessLevel: DocumentAccessLevel;
21
+ hasSensitiveData: boolean;
22
+ /** El original se puede publicar tal cual: es público (o su restricción terminó) y no tiene datos sensibles. */
23
+ originalIsPublic: boolean;
24
+ /** Para publicarlo hace falta antes la versión tarjada. */
25
+ needsRedacted: boolean;
26
+ redactedFileName: string | null;
27
+ status: TransparencyItemStatus;
28
+ /** Dirección de la publicación en el Portal de Transparencia, si se anotó. */
29
+ transparencyUrl: string | null;
30
+ /** Motivo de la exclusión, u observación de la publicación. */
31
+ transparencyNote: string | null;
32
+ transparencyAt: string | null;
33
+ transparencyByFullName: string | null;
34
+ /** Enlace público estable a la versión que se publica (`<TRANSPARENCY_URL>/<código>`), si está configurado. */
35
+ publicLink: string | null;
36
+ }
37
+ export interface TransparencyMonthCountsEntity {
38
+ total: number;
39
+ pending: number;
40
+ published: number;
41
+ excluded: number;
42
+ /** Publicados que después se anularon: hay que retirarlos o actualizarlos en el Portal. */
43
+ annulledPublished: number;
44
+ }
45
+ /** Lo firmado en un mes de los tipos documentales que se publican, con lo que falta por decidir. */
46
+ export interface TransparencyMonthEntity {
47
+ year: number;
48
+ month: number;
49
+ counts: TransparencyMonthCountsEntity;
50
+ /** Tipos documentales marcados para Transparencia Activa. Sin ninguno, la bandeja queda vacía. */
51
+ documentTypes: {
52
+ id: string;
53
+ name: string;
54
+ section: string | null;
55
+ }[];
56
+ items: TransparencyItemEntity[];
57
+ }
58
+ /** Lo que muestra la página pública de un documento publicado en Transparencia Activa. No exige sesión. */
59
+ export interface TransparencyPublicEntity {
60
+ verificationCode: string;
61
+ documentTypeName: string;
62
+ issuerName: string;
63
+ section: string | null;
64
+ reference: string;
65
+ /** La materia solo se muestra si el original es público; si se publicó tarjado, se lee en el archivo. */
66
+ subject: string | null;
67
+ finishedAt: string | null;
68
+ /** Anulado después de publicarse: se informa y ya no se descarga. */
69
+ annulled: boolean;
70
+ /** Se publicó una versión tarjada (sin datos personales o reservados). */
71
+ redacted: boolean;
72
+ canDownload: boolean;
73
+ publishedAt: string | null;
74
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muni-sanfer/types-gestor-documental",
3
- "version": "0.0.1-beta.25",
3
+ "version": "0.0.1-beta.27",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -63,10 +63,15 @@ export type DocumentTrackingAction =
63
63
  | 'Reassigned'
64
64
  | 'Dispatched'
65
65
  | 'DispatchReturned'
66
+ | 'DispatchedByContingency'
66
67
  | 'Received'
67
68
  | 'EmailCopySent'
68
69
  | 'EmailCopyOpened'
69
- | 'DispositionRecorded';
70
+ | 'DispositionRecorded'
71
+ | 'TransparencyRedacted'
72
+ | 'TransparencyPublished'
73
+ | 'TransparencyExcluded'
74
+ | 'TransparencyWithdrawn';
70
75
 
71
76
  export const DocumentTrackingAction = {
72
77
  Created: 'Created',
@@ -85,19 +90,34 @@ export const DocumentTrackingAction = {
85
90
  Reassigned: 'Reassigned',
86
91
  Dispatched: 'Dispatched',
87
92
  DispatchReturned: 'DispatchReturned',
93
+ DispatchedByContingency: 'DispatchedByContingency',
88
94
  Received: 'Received',
89
95
  EmailCopySent: 'EmailCopySent',
90
96
  EmailCopyOpened: 'EmailCopyOpened',
91
97
  DispositionRecorded: 'DispositionRecorded',
98
+ TransparencyRedacted: 'TransparencyRedacted',
99
+ TransparencyPublished: 'TransparencyPublished',
100
+ TransparencyExcluded: 'TransparencyExcluded',
101
+ TransparencyWithdrawn: 'TransparencyWithdrawn',
92
102
  } satisfies Record<string, DocumentTrackingAction>;
93
103
 
94
- export type DocumentOrigin = 'Internal' | 'DocDigital';
104
+ export type DocumentOrigin = 'Internal' | 'DocDigital' | 'Manual';
95
105
 
96
106
  export const DocumentOrigin = {
97
107
  Internal: 'Internal',
98
108
  DocDigital: 'DocDigital',
109
+ Manual: 'Manual',
99
110
  } satisfies Record<string, DocumentOrigin>;
100
111
 
112
+ export type CommunicationMeans = 'Paper' | 'Email' | 'Courier' | 'Other';
113
+
114
+ export const CommunicationMeans = {
115
+ Paper: 'Paper',
116
+ Email: 'Email',
117
+ Courier: 'Courier',
118
+ Other: 'Other',
119
+ } satisfies Record<string, CommunicationMeans>;
120
+
101
121
  export type DocumentDispatchStatus = 'Pending' | 'Dispatched' | 'Returned';
102
122
 
103
123
  export const DocumentDispatchStatus = {
@@ -323,7 +343,8 @@ export type AuditEntity =
323
343
  | 'Procedure'
324
344
  | 'QualityMetric'
325
345
  | 'ServiceOutage'
326
- | 'Repository';
346
+ | 'Repository'
347
+ | 'DataTreatment';
327
348
 
328
349
  export const AuditEntity = {
329
350
  DocumentType: 'DocumentType',
@@ -335,6 +356,7 @@ export const AuditEntity = {
335
356
  QualityMetric: 'QualityMetric',
336
357
  ServiceOutage: 'ServiceOutage',
337
358
  Repository: 'Repository',
359
+ DataTreatment: 'DataTreatment',
338
360
  } satisfies Record<string, AuditEntity>;
339
361
 
340
362
  export type AuditAction = 'Created' | 'Updated' | 'Enabled' | 'Disabled' | 'Removed' | 'Exported';
@@ -418,6 +440,84 @@ export const AccessRequestEventAction = {
418
440
  AppealRegistered: 'AppealRegistered',
419
441
  } satisfies Record<string, AccessRequestEventAction>;
420
442
 
443
+ export type TransparencyStatus = 'Published' | 'Excluded';
444
+
445
+ export const TransparencyStatus = {
446
+ Published: 'Published',
447
+ Excluded: 'Excluded',
448
+ } satisfies Record<string, TransparencyStatus>;
449
+
450
+ export type DataLegalBasis = 'LegalFunction' | 'LegalObligation' | 'Consent' | 'Contract' | 'VitalInterest';
451
+
452
+ export const DataLegalBasis = {
453
+ LegalFunction: 'LegalFunction',
454
+ LegalObligation: 'LegalObligation',
455
+ Consent: 'Consent',
456
+ Contract: 'Contract',
457
+ VitalInterest: 'VitalInterest',
458
+ } satisfies Record<string, DataLegalBasis>;
459
+
460
+ export type DataRight = 'Access' | 'Rectification' | 'Suppression' | 'Opposition' | 'Portability';
461
+
462
+ export const DataRight = {
463
+ Access: 'Access',
464
+ Rectification: 'Rectification',
465
+ Suppression: 'Suppression',
466
+ Opposition: 'Opposition',
467
+ Portability: 'Portability',
468
+ } satisfies Record<string, DataRight>;
469
+
470
+ export type DataRightsChannel = 'Email' | 'WebForm' | 'InPerson' | 'Letter';
471
+
472
+ export const DataRightsChannel = {
473
+ Email: 'Email',
474
+ WebForm: 'WebForm',
475
+ InPerson: 'InPerson',
476
+ Letter: 'Letter',
477
+ } satisfies Record<string, DataRightsChannel>;
478
+
479
+ export type DataRightsRequestStatus = 'Received' | 'InProgress' | 'Resolved';
480
+
481
+ export const DataRightsRequestStatus = {
482
+ Received: 'Received',
483
+ InProgress: 'InProgress',
484
+ Resolved: 'Resolved',
485
+ } satisfies Record<string, DataRightsRequestStatus>;
486
+
487
+ export type DataRightsResolution = 'Granted' | 'PartiallyGranted' | 'Denied' | 'Withdrawn';
488
+
489
+ export const DataRightsResolution = {
490
+ Granted: 'Granted',
491
+ PartiallyGranted: 'PartiallyGranted',
492
+ Denied: 'Denied',
493
+ Withdrawn: 'Withdrawn',
494
+ } satisfies Record<string, DataRightsResolution>;
495
+
496
+ export type DataRightsEventAction =
497
+ | 'Received'
498
+ | 'Updated'
499
+ | 'Acknowledged'
500
+ | 'IdentityVerified'
501
+ | 'Assigned'
502
+ | 'BlockingResolved'
503
+ | 'Extended'
504
+ | 'Resolved'
505
+ | 'ResponseSent'
506
+ | 'ComplaintRegistered';
507
+
508
+ export const DataRightsEventAction = {
509
+ Received: 'Received',
510
+ Updated: 'Updated',
511
+ Acknowledged: 'Acknowledged',
512
+ IdentityVerified: 'IdentityVerified',
513
+ Assigned: 'Assigned',
514
+ BlockingResolved: 'BlockingResolved',
515
+ Extended: 'Extended',
516
+ Resolved: 'Resolved',
517
+ ResponseSent: 'ResponseSent',
518
+ ComplaintRegistered: 'ComplaintRegistered',
519
+ } satisfies Record<string, DataRightsEventAction>;
520
+
421
521
  export interface DocumentTypeEntity {
422
522
  id: string;
423
523
  name: string;
@@ -428,6 +528,8 @@ export interface DocumentTypeEntity {
428
528
  correlativeYear?: number | null;
429
529
  resetsYearly: boolean;
430
530
  numbered: boolean;
531
+ activeTransparency: boolean;
532
+ transparencySection?: string | null;
431
533
  directorateCodeReference?: number | null;
432
534
  archivalSeries?: ArchivalSeriesEntity | null;
433
535
  archivalSeriesId?: string | null;
@@ -468,6 +570,7 @@ export interface DocumentEntity {
468
570
  externalFolio?: string | null;
469
571
  externalSender?: string | null;
470
572
  externalDate?: string | null;
573
+ intakeMeans?: CommunicationMeans | null;
471
574
  composition?: JsonValue | null;
472
575
  contentText?: string | null;
473
576
  textExtractedAt?: string | null;
@@ -501,7 +604,15 @@ export interface DocumentEntity {
501
604
  accesses?: DocumentAccessEntity[];
502
605
  disposition?: DispositionRecordEntity | null;
503
606
  dispositionId?: string | null;
607
+ transparencyStatus?: TransparencyStatus | null;
608
+ transparencyUrl?: string | null;
609
+ transparencyNote?: string | null;
610
+ transparencyAt?: string | null;
611
+ transparencyByFullName?: string | null;
612
+ redactedFileId?: string | null;
613
+ redactedFileName?: string | null;
504
614
  accessRequestResponses?: AccessRequestEntity[];
615
+ dataRightsResponses?: DataRightsRequestEntity[];
505
616
  accessRequestDeliveries?: AccessRequestDocumentEntity[];
506
617
  dispatch?: DocumentDispatchEntity | null;
507
618
  docDigitalInbound?: DocDigitalInboundEntity | null;
@@ -857,6 +968,11 @@ export interface DocumentDispatchEntity {
857
968
  returnedByEmployeeId?: string | null;
858
969
  returnedByFullName?: string | null;
859
970
  returnReason?: string | null;
971
+ contingencyMeans?: CommunicationMeans | null;
972
+ contingencySentTo?: string | null;
973
+ contingencyReason?: string | null;
974
+ contingencyReceiptFileId?: string | null;
975
+ contingencyReceiptName?: string | null;
860
976
  document?: DocumentEntity;
861
977
  documentId: string;
862
978
  createdAt: string;
@@ -1130,4 +1246,86 @@ export interface AccessRequestEventEntity {
1130
1246
  createdAt: string;
1131
1247
  }
1132
1248
 
1249
+ export interface DataTreatmentEntity {
1250
+ id: string;
1251
+ name: string;
1252
+ purpose: string;
1253
+ legalBasis: DataLegalBasis;
1254
+ legalBasisDetail?: string | null;
1255
+ dataCategories: string[];
1256
+ sensitiveData: boolean;
1257
+ dataSubjects: string;
1258
+ recipients?: string | null;
1259
+ source?: string | null;
1260
+ retention?: string | null;
1261
+ securityMeasures?: string | null;
1262
+ internationalTransfer?: string | null;
1263
+ responsibleUnit?: string | null;
1264
+ published: boolean;
1265
+ requests?: DataRightsRequestEntity[];
1266
+ enabled: boolean;
1267
+ deleted: boolean;
1268
+ createdAt: string;
1269
+ updatedAt: string;
1270
+ }
1271
+
1272
+ export interface DataRightsRequestEntity {
1273
+ id: string;
1274
+ number: number;
1275
+ year: number;
1276
+ channel: DataRightsChannel;
1277
+ receivedAt: string;
1278
+ rights: DataRight[];
1279
+ requesterName: string;
1280
+ requesterRut?: string | null;
1281
+ requesterEmail?: string | null;
1282
+ requesterAddress?: string | null;
1283
+ representativeName?: string | null;
1284
+ identityVerifiedAt?: string | null;
1285
+ identityNote?: string | null;
1286
+ requestText: string;
1287
+ treatment?: DataTreatmentEntity | null;
1288
+ treatmentId?: string | null;
1289
+ status: DataRightsRequestStatus;
1290
+ acknowledgedAt?: string | null;
1291
+ dueAt: string;
1292
+ extendedAt?: string | null;
1293
+ extensionNote?: string | null;
1294
+ blockingRequested: boolean;
1295
+ blockingReason?: string | null;
1296
+ blockingDueAt?: string | null;
1297
+ blockingGranted?: boolean | null;
1298
+ blockingResolvedAt?: string | null;
1299
+ blockingNote?: string | null;
1300
+ assigneeEmployeeId?: string | null;
1301
+ assigneeFullName?: string | null;
1302
+ resolution?: DataRightsResolution | null;
1303
+ resolvedAt?: string | null;
1304
+ denialGrounds: string[];
1305
+ resolutionNote?: string | null;
1306
+ responseDocument?: DocumentEntity | null;
1307
+ responseDocumentId?: string | null;
1308
+ responseSentAt?: string | null;
1309
+ responseSentTo?: string | null;
1310
+ responseSentMeans?: CommunicationMeans | null;
1311
+ complaintAt?: string | null;
1312
+ complaintNote?: string | null;
1313
+ createdByEmployeeId: string;
1314
+ createdByFullName: string;
1315
+ events?: DataRightsEventEntity[];
1316
+ createdAt: string;
1317
+ updatedAt: string;
1318
+ }
1319
+
1320
+ export interface DataRightsEventEntity {
1321
+ id: string;
1322
+ action: DataRightsEventAction;
1323
+ note?: string | null;
1324
+ employeeId?: string | null;
1325
+ employeeFullName: string;
1326
+ request?: DataRightsRequestEntity;
1327
+ requestId: string;
1328
+ createdAt: string;
1329
+ }
1330
+
1133
1331
  type JsonValue = string | number | boolean | { [key in string]?: JsonValue } | Array<JsonValue> | null;
@@ -40,6 +40,9 @@ export interface DocumentTypeWritePayload {
40
40
  resetsYearly?: boolean;
41
41
  // Sus documentos llevan número (por omisión, sí).
42
42
  numbered?: boolean;
43
+ /** Transparencia Activa: sus documentos se publican cada mes, en esta sección del Portal. */
44
+ activeTransparency?: boolean;
45
+ transparencySection?: string | null;
43
46
  directorateCodeReference?: number | null;
44
47
  // Serie documental del Cuadro de Clasificación (sin valor: sin clasificar).
45
48
  archivalSeriesId?: string | null;
@@ -11,6 +11,7 @@ import { SignatureCheckPatterns, type SignatureCheckContract } from './signature
11
11
  import { RepositoryExportPatterns, type RepositoryExportContract } from './repositoryExport.contract';
12
12
  import { RetentionPatterns, type RetentionContract } from './retention.contract';
13
13
  import { AccessRequestPatterns, type AccessRequestContract } from './accessRequest.contract';
14
+ import { TransparencyPatterns, type TransparencyContract } from './transparency.contract';
14
15
  import { ScanPatterns, type ScanContract } from './scan.contract';
15
16
  import { PartsOfficePatterns, type PartsOfficeContract } from './partsOffice.contract';
16
17
  import { ProcedurePatterns, type ProcedureContract } from './procedure.contract';
@@ -38,6 +39,7 @@ export * from './signatureCheck.contract';
38
39
  export * from './repositoryExport.contract';
39
40
  export * from './retention.contract';
40
41
  export * from './accessRequest.contract';
42
+ export * from './transparency.contract';
41
43
 
42
44
  /** Patrones NATS de gestor-documental-ms, por recurso: `gestorDocumental.<recurso>.<acción>`. */
43
45
  export const GestorDocumentalPatterns = {
@@ -60,6 +62,7 @@ export const GestorDocumentalPatterns = {
60
62
  repositoryExport: RepositoryExportPatterns,
61
63
  retention: RetentionPatterns,
62
64
  accessRequest: AccessRequestPatterns,
65
+ transparency: TransparencyPatterns,
63
66
  } as const;
64
67
 
65
68
  /** Contrato completo de gestor-documental-ms: la unión de los contratos de sus recursos. */
@@ -81,4 +84,5 @@ export type GestorDocumentalContract = DocumentTypeContract &
81
84
  SignatureCheckContract &
82
85
  RepositoryExportContract &
83
86
  RetentionContract &
84
- AccessRequestContract;
87
+ AccessRequestContract &
88
+ TransparencyContract;
@@ -1,4 +1,4 @@
1
- import { type DocumentAccessLevel, type DocumentInstruction } from '../base/entities';
1
+ import { type CommunicationMeans, type DocumentAccessLevel, type DocumentInstruction } from '../base/entities';
2
2
  import {
3
3
  type DocDigitalDocumentTypeEntity,
4
4
  type DocDigitalEntityEntity,
@@ -37,6 +37,8 @@ export const PartsOfficePatterns = {
37
37
  returnInbound: 'gestorDocumental.partsOffice.returnInbound',
38
38
  getInboundFile: 'gestorDocumental.partsOffice.getInboundFile',
39
39
  checkEnablement: 'gestorDocumental.partsOffice.checkEnablement',
40
+ dispatchByContingency: 'gestorDocumental.partsOffice.dispatchByContingency',
41
+ registerManualIntake: 'gestorDocumental.partsOffice.registerManualIntake',
40
42
  } as const;
41
43
 
42
44
  /** Destinatario interno de un ingreso, ya resuelto por el gateway (las áreas con sus integrantes). */
@@ -50,6 +52,30 @@ interface IListPayload<S> {
50
52
  filters?: { search?: string; status?: S };
51
53
  }
52
54
 
55
+ /** Lo que llegó fuera de DocDigital y Oficina de Partes ingresa a mano. */
56
+ export interface ManualIntakePayload {
57
+ file: { fileId: string; name: string };
58
+ attachments?: { fileId: string; name: string }[];
59
+ means: CommunicationMeans;
60
+ /** Cuándo llegó (ISO); sin él, ahora. */
61
+ receivedAt?: string | null;
62
+ senderEntityName: string;
63
+ senderName?: string | null;
64
+ externalFolio?: string | null;
65
+ externalDate?: string | null;
66
+ subject: string;
67
+ documentTypeId: string;
68
+ keywords: string[];
69
+ accessLevel?: DocumentAccessLevel;
70
+ hasSensitiveData?: boolean;
71
+ recipients: unknown[];
72
+ instruction: DocumentInstruction;
73
+ note?: string | null;
74
+ dueAt?: string | null;
75
+ dueBusinessDays?: number | null;
76
+ actor: DocumentActor;
77
+ }
78
+
53
79
  export interface PartsOfficeContract {
54
80
  [PartsOfficePatterns.getStatus]: { payload: Record<string, never>; response: PartsOfficeStatusEntity };
55
81
  [PartsOfficePatterns.getSummary]: { payload: Record<string, never>; response: PartsOfficeSummaryEntity };
@@ -82,7 +108,11 @@ export interface PartsOfficeContract {
82
108
  response: PartsOfficeOkResponseEntity;
83
109
  };
84
110
  /** PDF firmado de un documento por despachar, para que Oficina de Partes lo revise. */
85
- [PartsOfficePatterns.getDispatchFile]: { payload: { id: string }; response: PartsOfficeFileEntity };
111
+ [PartsOfficePatterns.getDispatchFile]: {
112
+ // con `receipt`, el comprobante del despacho por contingencia
113
+ payload: { id: string; receipt?: boolean };
114
+ response: PartsOfficeFileEntity;
115
+ };
86
116
  [PartsOfficePatterns.getInbound]: {
87
117
  payload: IListPayload<'Pending' | 'Registered' | 'Returned'>;
88
118
  response: RpcPage<PartsOfficeInboundEntity[]>;
@@ -131,4 +161,29 @@ export interface PartsOfficeContract {
131
161
  payload: { people: EnablementPersonInput[] };
132
162
  response: PartsOfficeEnablementEntity;
133
163
  };
164
+ /**
165
+ * Registro por contingencia: el documento no se pudo despachar por DocDigital y salió por otro medio. Queda
166
+ * despachado, con el medio, a quién, el motivo y el comprobante; si después se registra en DocDigital, su número.
167
+ */
168
+ [PartsOfficePatterns.dispatchByContingency]: {
169
+ payload: {
170
+ id: string;
171
+ means: CommunicationMeans;
172
+ sentAt: string;
173
+ sentTo: string;
174
+ reason: string;
175
+ receipt?: { fileId: string; name: string } | null;
176
+ docDigitalDocumentId?: string | null;
177
+ actor: DocumentActor;
178
+ };
179
+ response: PartsOfficeOkResponseEntity;
180
+ };
181
+ /**
182
+ * Ingreso manual: lo que llegó fuera de DocDigital (papel, correo) entra con folio de ingreso, como lo recibido
183
+ * por DocDigital, y se deriva.
184
+ */
185
+ [PartsOfficePatterns.registerManualIntake]: {
186
+ payload: ManualIntakePayload;
187
+ response: PartsOfficeRegisterResponseEntity;
188
+ };
134
189
  }
@@ -0,0 +1,55 @@
1
+ import {
2
+ type DocumentPublicFileResponseEntity,
3
+ type IndicatorsFileEntity,
4
+ type TransparencyItemEntity,
5
+ type TransparencyItemStatus,
6
+ type TransparencyMonthEntity,
7
+ type TransparencyPublicEntity,
8
+ } from '../entities';
9
+
10
+ /** Patrones NATS de `transparency`: Transparencia Activa de los documentos firmados (Ley 20.285, art. 7°). */
11
+ export const TransparencyPatterns = {
12
+ getMonth: 'gestorDocumental.transparency.getMonth',
13
+ update: 'gestorDocumental.transparency.update',
14
+ export: 'gestorDocumental.transparency.export',
15
+ getRedactedFile: 'gestorDocumental.transparency.getRedactedFile',
16
+ getPublic: 'gestorDocumental.transparency.getPublic',
17
+ getPublicFile: 'gestorDocumental.transparency.getPublicFile',
18
+ } as const;
19
+
20
+ type TTransparencyActor = { employeeId: string; fullName: string };
21
+
22
+ /** Lo que se decide sobre un documento en Transparencia Activa. */
23
+ export type TransparencyUpdatePayload =
24
+ /** Publicarlo (o corregir el enlace): si el original no es público, exige antes la versión tarjada. */
25
+ | { action: 'publish'; documentId: string; url?: string | null; note?: string | null; actor: TTransparencyActor }
26
+ /** No se publica, con su motivo (p. ej. reservado por el art. 21 de la Ley 20.285). */
27
+ | { action: 'exclude'; documentId: string; reason: string; actor: TTransparencyActor }
28
+ /** Vuelve a pendiente: se retiró la publicación o se revisó la exclusión. */
29
+ | { action: 'withdraw'; documentId: string; reason: string; actor: TTransparencyActor }
30
+ /** Versión tarjada ya subida al gestor de archivos (PDF). */
31
+ | { action: 'setRedacted'; documentId: string; fileId: string; fileName: string; actor: TTransparencyActor }
32
+ | { action: 'removeRedacted'; documentId: string; actor: TTransparencyActor };
33
+
34
+ export interface TransparencyContract {
35
+ /** Lo firmado en el mes (hora de Chile) de los tipos que se publican, y lo que ya se publicó aunque el tipo cambie. */
36
+ [TransparencyPatterns.getMonth]: {
37
+ payload: { year: number; month: number; status?: TransparencyItemStatus | null };
38
+ response: TransparencyMonthEntity;
39
+ };
40
+ [TransparencyPatterns.update]: { payload: TransparencyUpdatePayload; response: TransparencyItemEntity };
41
+ /** Planilla del mes (Excel) para cargar en el Portal de Transparencia. */
42
+ [TransparencyPatterns.export]: {
43
+ payload: { year: number; month: number; generatedBy: string };
44
+ response: IndicatorsFileEntity;
45
+ };
46
+ /** La versión tarjada cargada, para revisarla antes de publicar. */
47
+ [TransparencyPatterns.getRedactedFile]: {
48
+ payload: { documentId: string };
49
+ response: DocumentPublicFileResponseEntity;
50
+ };
51
+ /** Página pública de un documento publicado, por su código de verificación. No exige sesión. */
52
+ [TransparencyPatterns.getPublic]: { payload: { code: string }; response: TransparencyPublicEntity };
53
+ /** La versión publicada: la tarjada si existe; si no, el original público. Solo de un documento vigente. */
54
+ [TransparencyPatterns.getPublicFile]: { payload: { code: string }; response: DocumentPublicFileResponseEntity };
55
+ }
@@ -1,4 +1,5 @@
1
1
  import {
2
+ type CommunicationMeans,
2
3
  DocumentAnnulledNumberEntity,
3
4
  DocumentAttachmentEntity,
4
5
  DocumentDeliveryEntity,
@@ -101,6 +102,14 @@ export interface DocumentDispatchResponseEntity {
101
102
  returnedAt: string | null;
102
103
  returnedByFullName: string | null;
103
104
  returnReason: string | null;
105
+ /** Registro por contingencia: salió por otro medio porque no se pudo por DocDigital. */
106
+ contingency: {
107
+ means: CommunicationMeans;
108
+ sentTo: string | null;
109
+ reason: string | null;
110
+ /** Nombre del comprobante, si se adjuntó. */
111
+ receiptName: string | null;
112
+ } | null;
104
113
  }
105
114
 
106
115
  export interface DocumentGetAllResponseEntity {
@@ -26,6 +26,9 @@ export interface DocumentTypeGetAllResponseEntity {
26
26
  resetsYearly: DocumentTypeEntity['resetsYearly'];
27
27
  // Sin numeración, sus documentos solo llevan fecha, código de verificación y QR.
28
28
  numbered: DocumentTypeEntity['numbered'];
29
+ /** Transparencia Activa: sus documentos se publican cada mes, en esta sección del Portal. */
30
+ activeTransparency: DocumentTypeEntity['activeTransparency'];
31
+ transparencySection: DocumentTypeEntity['transparencySection'];
29
32
  directorateCodeReference: DocumentTypeEntity['directorateCodeReference'];
30
33
  // Serie documental del Cuadro de Clasificación a la que van sus documentos (MGDDE1_2).
31
34
  archivalSeries: { id: string; code: string; name: string } | null;
@@ -17,3 +17,4 @@ export * from './signatureCheck';
17
17
  export * from './repositoryExport';
18
18
  export * from './retention';
19
19
  export * from './accessRequest';
20
+ export * from './transparency';
@@ -0,0 +1 @@
1
+ export * from './transparency.entity';
@@ -0,0 +1,75 @@
1
+ import { type DocumentAccessLevel, type DocumentStatus } from '../../base/entities';
2
+
3
+ /** En qué quedó un documento en Transparencia Activa: aún sin decidir, publicado o excluido con su motivo. */
4
+ export type TransparencyItemStatus = 'Pending' | 'Published' | 'Excluded';
5
+
6
+ /** Un documento que se publica en Transparencia Activa (Ley 20.285, art. 7°), con lo que se decidió de él. */
7
+ export interface TransparencyItemEntity {
8
+ documentId: string;
9
+ documentStatus: DocumentStatus;
10
+ verificationCode: string | null;
11
+ documentTypeName: string;
12
+ documentTypeAbbreviation: string | null;
13
+ /** Sección del Portal en que se publica, según su tipo documental. */
14
+ section: string | null;
15
+ /** Folio del documento (`Decreto Alcaldicio N° 15/2026`), o el nombre del tipo si no lleva número. */
16
+ reference: string;
17
+ correlative: number | null;
18
+ correlativeYear: number | null;
19
+ subject: string;
20
+ finishedAt: string | null;
21
+ annulledAt: string | null;
22
+ accessLevel: DocumentAccessLevel;
23
+ hasSensitiveData: boolean;
24
+ /** El original se puede publicar tal cual: es público (o su restricción terminó) y no tiene datos sensibles. */
25
+ originalIsPublic: boolean;
26
+ /** Para publicarlo hace falta antes la versión tarjada. */
27
+ needsRedacted: boolean;
28
+ redactedFileName: string | null;
29
+ status: TransparencyItemStatus;
30
+ /** Dirección de la publicación en el Portal de Transparencia, si se anotó. */
31
+ transparencyUrl: string | null;
32
+ /** Motivo de la exclusión, u observación de la publicación. */
33
+ transparencyNote: string | null;
34
+ transparencyAt: string | null;
35
+ transparencyByFullName: string | null;
36
+ /** Enlace público estable a la versión que se publica (`<TRANSPARENCY_URL>/<código>`), si está configurado. */
37
+ publicLink: string | null;
38
+ }
39
+
40
+ export interface TransparencyMonthCountsEntity {
41
+ total: number;
42
+ pending: number;
43
+ published: number;
44
+ excluded: number;
45
+ /** Publicados que después se anularon: hay que retirarlos o actualizarlos en el Portal. */
46
+ annulledPublished: number;
47
+ }
48
+
49
+ /** Lo firmado en un mes de los tipos documentales que se publican, con lo que falta por decidir. */
50
+ export interface TransparencyMonthEntity {
51
+ year: number;
52
+ month: number;
53
+ counts: TransparencyMonthCountsEntity;
54
+ /** Tipos documentales marcados para Transparencia Activa. Sin ninguno, la bandeja queda vacía. */
55
+ documentTypes: { id: string; name: string; section: string | null }[];
56
+ items: TransparencyItemEntity[];
57
+ }
58
+
59
+ /** Lo que muestra la página pública de un documento publicado en Transparencia Activa. No exige sesión. */
60
+ export interface TransparencyPublicEntity {
61
+ verificationCode: string;
62
+ documentTypeName: string;
63
+ issuerName: string;
64
+ section: string | null;
65
+ reference: string;
66
+ /** La materia solo se muestra si el original es público; si se publicó tarjado, se lee en el archivo. */
67
+ subject: string | null;
68
+ finishedAt: string | null;
69
+ /** Anulado después de publicarse: se informa y ya no se descarga. */
70
+ annulled: boolean;
71
+ /** Se publicó una versión tarjada (sin datos personales o reservados). */
72
+ redacted: boolean;
73
+ canDownload: boolean;
74
+ publishedAt: string | null;
75
+ }