@muni-sanfer/types-gestor-documental 0.0.1-beta.0 → 0.0.1-beta.1
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 +25 -2
- package/dist/base/entities.js +4 -0
- package/dist/contracts/document.contract.d.ts +27 -1
- package/dist/contracts/document.contract.js +3 -0
- package/dist/contracts/index.d.ts +3 -0
- package/dist/entities/document/document.entity.d.ts +50 -1
- package/package.json +1 -1
- package/src/base/entities.ts +37 -2
- package/src/contracts/document.contract.ts +23 -0
- package/src/entities/document/document.entity.ts +61 -0
package/dist/base/entities.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare const DocumentCategory: {
|
|
|
4
4
|
Communication: "Communication";
|
|
5
5
|
Other: "Other";
|
|
6
6
|
};
|
|
7
|
-
export type DocumentStatus = 'Drafted' | 'PendingVisa' | 'PendingSignature' | 'Finished' | 'Rejected' | 'Discarded';
|
|
7
|
+
export type DocumentStatus = 'Drafted' | 'PendingVisa' | 'PendingSignature' | 'Finished' | 'Rejected' | 'Discarded' | 'Annulled';
|
|
8
8
|
export declare const DocumentStatus: {
|
|
9
9
|
Drafted: "Drafted";
|
|
10
10
|
PendingVisa: "PendingVisa";
|
|
@@ -12,6 +12,7 @@ export declare const DocumentStatus: {
|
|
|
12
12
|
Finished: "Finished";
|
|
13
13
|
Rejected: "Rejected";
|
|
14
14
|
Discarded: "Discarded";
|
|
15
|
+
Annulled: "Annulled";
|
|
15
16
|
};
|
|
16
17
|
export type DocumentAccessLevel = 'Public' | 'Restricted' | 'Secret' | 'Reserved';
|
|
17
18
|
export declare const DocumentAccessLevel: {
|
|
@@ -32,7 +33,7 @@ export declare const DocumentParticipantStatus: {
|
|
|
32
33
|
Resolved: "Resolved";
|
|
33
34
|
Rejected: "Rejected";
|
|
34
35
|
};
|
|
35
|
-
export type DocumentTrackingAction = 'Created' | 'Updated' | 'Submitted' | 'Visaed' | 'Signed' | 'Rejected' | 'Finished' | 'Discarded';
|
|
36
|
+
export type DocumentTrackingAction = 'Created' | 'Updated' | 'Submitted' | 'Visaed' | 'Signed' | 'Rejected' | 'Finished' | 'Discarded' | 'Numbered' | 'NumberAnnulled' | 'Annulled';
|
|
36
37
|
export declare const DocumentTrackingAction: {
|
|
37
38
|
Created: "Created";
|
|
38
39
|
Updated: "Updated";
|
|
@@ -42,6 +43,9 @@ export declare const DocumentTrackingAction: {
|
|
|
42
43
|
Rejected: "Rejected";
|
|
43
44
|
Finished: "Finished";
|
|
44
45
|
Discarded: "Discarded";
|
|
46
|
+
Numbered: "Numbered";
|
|
47
|
+
NumberAnnulled: "NumberAnnulled";
|
|
48
|
+
Annulled: "Annulled";
|
|
45
49
|
};
|
|
46
50
|
export type DocumentAttachmentType = 'File' | 'Link';
|
|
47
51
|
export declare const DocumentAttachmentType: {
|
|
@@ -60,6 +64,7 @@ export interface DocumentTypeEntity {
|
|
|
60
64
|
directorateCodeReference?: number | null;
|
|
61
65
|
enabled: boolean;
|
|
62
66
|
documents?: DocumentEntity[];
|
|
67
|
+
annulledNumbers?: DocumentAnnulledNumberEntity[];
|
|
63
68
|
deleted: boolean;
|
|
64
69
|
createdAt: string;
|
|
65
70
|
updatedAt: string;
|
|
@@ -74,6 +79,10 @@ export interface DocumentEntity {
|
|
|
74
79
|
correlative?: number | null;
|
|
75
80
|
correlativeYear?: number | null;
|
|
76
81
|
numberedAt?: string | null;
|
|
82
|
+
verificationCode?: string | null;
|
|
83
|
+
signatureSheet: boolean;
|
|
84
|
+
annulledAt?: string | null;
|
|
85
|
+
annulmentReason?: string | null;
|
|
77
86
|
directorateCodeReference?: number | null;
|
|
78
87
|
departmentId?: string | null;
|
|
79
88
|
createdByEmployeeId: string;
|
|
@@ -89,6 +98,7 @@ export interface DocumentEntity {
|
|
|
89
98
|
participants?: DocumentParticipantEntity[];
|
|
90
99
|
attachments?: DocumentAttachmentEntity[];
|
|
91
100
|
trackings?: DocumentTrackingEntity[];
|
|
101
|
+
annulledNumbers?: DocumentAnnulledNumberEntity[];
|
|
92
102
|
deleted: boolean;
|
|
93
103
|
createdAt: string;
|
|
94
104
|
updatedAt: string;
|
|
@@ -130,3 +140,16 @@ export interface DocumentTrackingEntity {
|
|
|
130
140
|
documentId: string;
|
|
131
141
|
createdAt: string;
|
|
132
142
|
}
|
|
143
|
+
export interface DocumentAnnulledNumberEntity {
|
|
144
|
+
id: string;
|
|
145
|
+
correlative: number;
|
|
146
|
+
correlativeYear: number;
|
|
147
|
+
reason: string;
|
|
148
|
+
employeeId: string;
|
|
149
|
+
employeeFullName: string;
|
|
150
|
+
documentType?: DocumentTypeEntity;
|
|
151
|
+
documentTypeId: string;
|
|
152
|
+
document?: DocumentEntity;
|
|
153
|
+
documentId: string;
|
|
154
|
+
createdAt: string;
|
|
155
|
+
}
|
package/dist/base/entities.js
CHANGED
|
@@ -14,6 +14,7 @@ exports.DocumentStatus = {
|
|
|
14
14
|
Finished: 'Finished',
|
|
15
15
|
Rejected: 'Rejected',
|
|
16
16
|
Discarded: 'Discarded',
|
|
17
|
+
Annulled: 'Annulled',
|
|
17
18
|
};
|
|
18
19
|
exports.DocumentAccessLevel = {
|
|
19
20
|
Public: 'Public',
|
|
@@ -40,6 +41,9 @@ exports.DocumentTrackingAction = {
|
|
|
40
41
|
Rejected: 'Rejected',
|
|
41
42
|
Finished: 'Finished',
|
|
42
43
|
Discarded: 'Discarded',
|
|
44
|
+
Numbered: 'Numbered',
|
|
45
|
+
NumberAnnulled: 'NumberAnnulled',
|
|
46
|
+
Annulled: 'Annulled',
|
|
43
47
|
};
|
|
44
48
|
exports.DocumentAttachmentType = {
|
|
45
49
|
File: 'File',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type DocumentAccessLevel, type DocumentAttachmentEntity, type DocumentEntity, type DocumentStatus } from '../base/entities';
|
|
2
|
-
import { type DocumentCreateResponseEntity, type DocumentDiscardResponseEntity, type DocumentGetAllResponseEntity, type DocumentGetByIdResponseEntity, type DocumentGetSummaryResponseEntity, type DocumentReviewResponseEntity, type DocumentUpdateResponseEntity } from '../entities';
|
|
2
|
+
import { type DocumentAnnulResponseEntity, type DocumentCreateResponseEntity, type DocumentDiscardResponseEntity, type DocumentGetAllResponseEntity, type DocumentGetByIdResponseEntity, type DocumentGetSummaryResponseEntity, type DocumentPublicFileResponseEntity, type DocumentReviewResponseEntity, type DocumentUpdateResponseEntity, type DocumentVerifyResponseEntity } from '../entities';
|
|
3
3
|
import { type RpcPage } from './contract';
|
|
4
4
|
/** Patrones NATS de `document`: `<servicio>.<recurso>.<acción>`. */
|
|
5
5
|
export declare const DocumentPatterns: {
|
|
@@ -10,6 +10,9 @@ export declare const DocumentPatterns: {
|
|
|
10
10
|
readonly update: "gestorDocumental.document.update";
|
|
11
11
|
readonly review: "gestorDocumental.document.review";
|
|
12
12
|
readonly discard: "gestorDocumental.document.discard";
|
|
13
|
+
readonly annul: "gestorDocumental.document.annul";
|
|
14
|
+
readonly verify: "gestorDocumental.document.verify";
|
|
15
|
+
readonly getPublicFile: "gestorDocumental.document.getPublicFile";
|
|
13
16
|
readonly getFilesFolder: "gestorDocumental.document.getFilesFolder";
|
|
14
17
|
};
|
|
15
18
|
/**
|
|
@@ -42,6 +45,7 @@ export interface DocumentWritePayload extends Pick<DocumentEntity, 'subject' | '
|
|
|
42
45
|
attachments?: Pick<DocumentAttachmentEntity, 'name' | 'type' | 'fileId' | 'url'>[];
|
|
43
46
|
visaEmployeeIds: string[];
|
|
44
47
|
signatureEmployeeIds: string[];
|
|
48
|
+
signatureSheet?: boolean;
|
|
45
49
|
action?: 'Submit';
|
|
46
50
|
actor: DocumentActor;
|
|
47
51
|
}
|
|
@@ -109,6 +113,28 @@ export interface DocumentContract {
|
|
|
109
113
|
};
|
|
110
114
|
response: DocumentDiscardResponseEntity;
|
|
111
115
|
};
|
|
116
|
+
/** Deja sin efecto un documento ya finalizado. Conserva su número, que no se reutiliza. */
|
|
117
|
+
[DocumentPatterns.annul]: {
|
|
118
|
+
payload: Pick<DocumentEntity, 'id'> & {
|
|
119
|
+
reason: string;
|
|
120
|
+
actor: DocumentActor;
|
|
121
|
+
};
|
|
122
|
+
response: DocumentAnnulResponseEntity;
|
|
123
|
+
};
|
|
124
|
+
/** Comprobación pública de un documento con el código que lleva impreso. No exige sesión. */
|
|
125
|
+
[DocumentPatterns.verify]: {
|
|
126
|
+
payload: {
|
|
127
|
+
code: string;
|
|
128
|
+
};
|
|
129
|
+
response: DocumentVerifyResponseEntity;
|
|
130
|
+
};
|
|
131
|
+
/** Archivo de un documento finalizado y de acceso público, para quien lo verificó con su código. */
|
|
132
|
+
[DocumentPatterns.getPublicFile]: {
|
|
133
|
+
payload: {
|
|
134
|
+
code: string;
|
|
135
|
+
};
|
|
136
|
+
response: DocumentPublicFileResponseEntity;
|
|
137
|
+
};
|
|
112
138
|
/** Carpeta de Drive de los documentos y sus anexos: el gateway la pide antes de subir cada archivo. */
|
|
113
139
|
[DocumentPatterns.getFilesFolder]: {
|
|
114
140
|
payload: Record<string, never>;
|
|
@@ -10,5 +10,8 @@ exports.DocumentPatterns = {
|
|
|
10
10
|
update: 'gestorDocumental.document.update',
|
|
11
11
|
review: 'gestorDocumental.document.review',
|
|
12
12
|
discard: 'gestorDocumental.document.discard',
|
|
13
|
+
annul: 'gestorDocumental.document.annul',
|
|
14
|
+
verify: 'gestorDocumental.document.verify',
|
|
15
|
+
getPublicFile: 'gestorDocumental.document.getPublicFile',
|
|
13
16
|
getFilesFolder: 'gestorDocumental.document.getFilesFolder',
|
|
14
17
|
};
|
|
@@ -20,6 +20,9 @@ export declare const GestorDocumentalPatterns: {
|
|
|
20
20
|
readonly update: "gestorDocumental.document.update";
|
|
21
21
|
readonly review: "gestorDocumental.document.review";
|
|
22
22
|
readonly discard: "gestorDocumental.document.discard";
|
|
23
|
+
readonly annul: "gestorDocumental.document.annul";
|
|
24
|
+
readonly verify: "gestorDocumental.document.verify";
|
|
25
|
+
readonly getPublicFile: "gestorDocumental.document.getPublicFile";
|
|
23
26
|
readonly getFilesFolder: "gestorDocumental.document.getFilesFolder";
|
|
24
27
|
};
|
|
25
28
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DocumentAttachmentEntity, DocumentEntity, DocumentParticipantEntity, DocumentTrackingEntity, DocumentTypeEntity } from '../../base/entities';
|
|
1
|
+
import { DocumentAnnulledNumberEntity, DocumentAttachmentEntity, DocumentEntity, DocumentParticipantEntity, 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'];
|
|
@@ -52,6 +52,18 @@ export interface DocumentGetByIdResponseEntity {
|
|
|
52
52
|
createdAt: DocumentEntity['createdAt'];
|
|
53
53
|
submittedAt: DocumentEntity['submittedAt'];
|
|
54
54
|
finishedAt: DocumentEntity['finishedAt'];
|
|
55
|
+
verificationCode: DocumentEntity['verificationCode'];
|
|
56
|
+
verificationUrl: string | null;
|
|
57
|
+
signatureSheet: DocumentEntity['signatureSheet'];
|
|
58
|
+
annulledAt: DocumentEntity['annulledAt'];
|
|
59
|
+
annulmentReason: DocumentEntity['annulmentReason'];
|
|
60
|
+
annulledNumbers: {
|
|
61
|
+
correlative: DocumentAnnulledNumberEntity['correlative'];
|
|
62
|
+
correlativeYear: DocumentAnnulledNumberEntity['correlativeYear'];
|
|
63
|
+
reason: DocumentAnnulledNumberEntity['reason'];
|
|
64
|
+
employeeFullName: DocumentAnnulledNumberEntity['employeeFullName'];
|
|
65
|
+
createdAt: DocumentAnnulledNumberEntity['createdAt'];
|
|
66
|
+
}[];
|
|
55
67
|
documentType: DocumentTypeSummaryEntity;
|
|
56
68
|
participants: DocumentParticipantResponseEntity[];
|
|
57
69
|
attachments: {
|
|
@@ -104,3 +116,40 @@ export interface DocumentDiscardResponseEntity {
|
|
|
104
116
|
id: DocumentEntity['id'];
|
|
105
117
|
ok: boolean;
|
|
106
118
|
}
|
|
119
|
+
export interface DocumentAnnulResponseEntity {
|
|
120
|
+
id: DocumentEntity['id'];
|
|
121
|
+
ok: boolean;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Qué se le dice a quien comprueba un documento con su código, sin sesión:
|
|
125
|
+
* - `Finished`: es un documento oficial vigente;
|
|
126
|
+
* - `Annulled`: lo fue, pero quedó sin efecto;
|
|
127
|
+
* - `InProgress`: todavía se está firmando, así que la copia que tiene no es el documento oficial.
|
|
128
|
+
*/
|
|
129
|
+
export type DocumentVerificationState = 'Finished' | 'Annulled' | 'InProgress';
|
|
130
|
+
/**
|
|
131
|
+
* Respuesta pública de la verificación. Dice lo necesario para comprobar la autenticidad (tipo, número, fecha y
|
|
132
|
+
* quiénes firmaron); la materia y la descarga solo se entregan si el documento es de acceso público.
|
|
133
|
+
*/
|
|
134
|
+
export interface DocumentVerifyResponseEntity {
|
|
135
|
+
state: DocumentVerificationState;
|
|
136
|
+
verificationCode: string;
|
|
137
|
+
documentType: Pick<DocumentTypeSummaryEntity, 'name' | 'abbreviation'>;
|
|
138
|
+
correlative: DocumentEntity['correlative'];
|
|
139
|
+
correlativeYear: DocumentEntity['correlativeYear'];
|
|
140
|
+
numberedAt: DocumentEntity['numberedAt'];
|
|
141
|
+
finishedAt: DocumentEntity['finishedAt'];
|
|
142
|
+
annulledAt: DocumentEntity['annulledAt'];
|
|
143
|
+
signers: {
|
|
144
|
+
fullName: DocumentParticipantEntity['fullName'];
|
|
145
|
+
position: DocumentParticipantEntity['position'];
|
|
146
|
+
signedAt: DocumentParticipantEntity['resolvedAt'];
|
|
147
|
+
}[];
|
|
148
|
+
subject: DocumentEntity['subject'] | null;
|
|
149
|
+
canDownload: boolean;
|
|
150
|
+
}
|
|
151
|
+
/** Archivo de un documento público, para que el gateway lo entregue a quien lo verifica. */
|
|
152
|
+
export interface DocumentPublicFileResponseEntity {
|
|
153
|
+
fileId: string;
|
|
154
|
+
fileName: string;
|
|
155
|
+
}
|
package/package.json
CHANGED
package/src/base/entities.ts
CHANGED
|
@@ -8,7 +8,8 @@ export const DocumentCategory = {
|
|
|
8
8
|
Other: 'Other',
|
|
9
9
|
} satisfies Record<string, DocumentCategory>;
|
|
10
10
|
|
|
11
|
-
export type DocumentStatus =
|
|
11
|
+
export type DocumentStatus =
|
|
12
|
+
'Drafted' | 'PendingVisa' | 'PendingSignature' | 'Finished' | 'Rejected' | 'Discarded' | 'Annulled';
|
|
12
13
|
|
|
13
14
|
export const DocumentStatus = {
|
|
14
15
|
Drafted: 'Drafted',
|
|
@@ -17,6 +18,7 @@ export const DocumentStatus = {
|
|
|
17
18
|
Finished: 'Finished',
|
|
18
19
|
Rejected: 'Rejected',
|
|
19
20
|
Discarded: 'Discarded',
|
|
21
|
+
Annulled: 'Annulled',
|
|
20
22
|
} satisfies Record<string, DocumentStatus>;
|
|
21
23
|
|
|
22
24
|
export type DocumentAccessLevel = 'Public' | 'Restricted' | 'Secret' | 'Reserved';
|
|
@@ -45,7 +47,17 @@ export const DocumentParticipantStatus = {
|
|
|
45
47
|
} satisfies Record<string, DocumentParticipantStatus>;
|
|
46
48
|
|
|
47
49
|
export type DocumentTrackingAction =
|
|
48
|
-
|
|
50
|
+
| 'Created'
|
|
51
|
+
| 'Updated'
|
|
52
|
+
| 'Submitted'
|
|
53
|
+
| 'Visaed'
|
|
54
|
+
| 'Signed'
|
|
55
|
+
| 'Rejected'
|
|
56
|
+
| 'Finished'
|
|
57
|
+
| 'Discarded'
|
|
58
|
+
| 'Numbered'
|
|
59
|
+
| 'NumberAnnulled'
|
|
60
|
+
| 'Annulled';
|
|
49
61
|
|
|
50
62
|
export const DocumentTrackingAction = {
|
|
51
63
|
Created: 'Created',
|
|
@@ -56,6 +68,9 @@ export const DocumentTrackingAction = {
|
|
|
56
68
|
Rejected: 'Rejected',
|
|
57
69
|
Finished: 'Finished',
|
|
58
70
|
Discarded: 'Discarded',
|
|
71
|
+
Numbered: 'Numbered',
|
|
72
|
+
NumberAnnulled: 'NumberAnnulled',
|
|
73
|
+
Annulled: 'Annulled',
|
|
59
74
|
} satisfies Record<string, DocumentTrackingAction>;
|
|
60
75
|
|
|
61
76
|
export type DocumentAttachmentType = 'File' | 'Link';
|
|
@@ -77,6 +92,7 @@ export interface DocumentTypeEntity {
|
|
|
77
92
|
directorateCodeReference?: number | null;
|
|
78
93
|
enabled: boolean;
|
|
79
94
|
documents?: DocumentEntity[];
|
|
95
|
+
annulledNumbers?: DocumentAnnulledNumberEntity[];
|
|
80
96
|
deleted: boolean;
|
|
81
97
|
createdAt: string;
|
|
82
98
|
updatedAt: string;
|
|
@@ -92,6 +108,10 @@ export interface DocumentEntity {
|
|
|
92
108
|
correlative?: number | null;
|
|
93
109
|
correlativeYear?: number | null;
|
|
94
110
|
numberedAt?: string | null;
|
|
111
|
+
verificationCode?: string | null;
|
|
112
|
+
signatureSheet: boolean;
|
|
113
|
+
annulledAt?: string | null;
|
|
114
|
+
annulmentReason?: string | null;
|
|
95
115
|
directorateCodeReference?: number | null;
|
|
96
116
|
departmentId?: string | null;
|
|
97
117
|
createdByEmployeeId: string;
|
|
@@ -107,6 +127,7 @@ export interface DocumentEntity {
|
|
|
107
127
|
participants?: DocumentParticipantEntity[];
|
|
108
128
|
attachments?: DocumentAttachmentEntity[];
|
|
109
129
|
trackings?: DocumentTrackingEntity[];
|
|
130
|
+
annulledNumbers?: DocumentAnnulledNumberEntity[];
|
|
110
131
|
deleted: boolean;
|
|
111
132
|
createdAt: string;
|
|
112
133
|
updatedAt: string;
|
|
@@ -151,3 +172,17 @@ export interface DocumentTrackingEntity {
|
|
|
151
172
|
documentId: string;
|
|
152
173
|
createdAt: string;
|
|
153
174
|
}
|
|
175
|
+
|
|
176
|
+
export interface DocumentAnnulledNumberEntity {
|
|
177
|
+
id: string;
|
|
178
|
+
correlative: number;
|
|
179
|
+
correlativeYear: number;
|
|
180
|
+
reason: string;
|
|
181
|
+
employeeId: string;
|
|
182
|
+
employeeFullName: string;
|
|
183
|
+
documentType?: DocumentTypeEntity;
|
|
184
|
+
documentTypeId: string;
|
|
185
|
+
document?: DocumentEntity;
|
|
186
|
+
documentId: string;
|
|
187
|
+
createdAt: string;
|
|
188
|
+
}
|
|
@@ -5,13 +5,16 @@ import {
|
|
|
5
5
|
type DocumentStatus,
|
|
6
6
|
} from '../base/entities';
|
|
7
7
|
import {
|
|
8
|
+
type DocumentAnnulResponseEntity,
|
|
8
9
|
type DocumentCreateResponseEntity,
|
|
9
10
|
type DocumentDiscardResponseEntity,
|
|
10
11
|
type DocumentGetAllResponseEntity,
|
|
11
12
|
type DocumentGetByIdResponseEntity,
|
|
12
13
|
type DocumentGetSummaryResponseEntity,
|
|
14
|
+
type DocumentPublicFileResponseEntity,
|
|
13
15
|
type DocumentReviewResponseEntity,
|
|
14
16
|
type DocumentUpdateResponseEntity,
|
|
17
|
+
type DocumentVerifyResponseEntity,
|
|
15
18
|
} from '../entities';
|
|
16
19
|
import { type RpcPage } from './contract';
|
|
17
20
|
|
|
@@ -24,6 +27,9 @@ export const DocumentPatterns = {
|
|
|
24
27
|
update: 'gestorDocumental.document.update',
|
|
25
28
|
review: 'gestorDocumental.document.review',
|
|
26
29
|
discard: 'gestorDocumental.document.discard',
|
|
30
|
+
annul: 'gestorDocumental.document.annul',
|
|
31
|
+
verify: 'gestorDocumental.document.verify',
|
|
32
|
+
getPublicFile: 'gestorDocumental.document.getPublicFile',
|
|
27
33
|
getFilesFolder: 'gestorDocumental.document.getFilesFolder',
|
|
28
34
|
} as const;
|
|
29
35
|
|
|
@@ -64,6 +70,8 @@ export interface DocumentWritePayload extends Pick<DocumentEntity, 'subject' | '
|
|
|
64
70
|
// Funcionarios que visan y que firman, en el orden en que les toca. Primero visan todos y después firman.
|
|
65
71
|
visaEmployeeIds: string[];
|
|
66
72
|
signatureEmployeeIds: string[];
|
|
73
|
+
// Firmas y visaciones en una hoja aparte al final, en vez de al pie de la última página.
|
|
74
|
+
signatureSheet?: boolean;
|
|
67
75
|
action?: 'Submit';
|
|
68
76
|
actor: DocumentActor;
|
|
69
77
|
}
|
|
@@ -125,6 +133,21 @@ export interface DocumentContract {
|
|
|
125
133
|
payload: Pick<DocumentEntity, 'id'> & { actor: DocumentActor };
|
|
126
134
|
response: DocumentDiscardResponseEntity;
|
|
127
135
|
};
|
|
136
|
+
/** Deja sin efecto un documento ya finalizado. Conserva su número, que no se reutiliza. */
|
|
137
|
+
[DocumentPatterns.annul]: {
|
|
138
|
+
payload: Pick<DocumentEntity, 'id'> & { reason: string; actor: DocumentActor };
|
|
139
|
+
response: DocumentAnnulResponseEntity;
|
|
140
|
+
};
|
|
141
|
+
/** Comprobación pública de un documento con el código que lleva impreso. No exige sesión. */
|
|
142
|
+
[DocumentPatterns.verify]: {
|
|
143
|
+
payload: { code: string };
|
|
144
|
+
response: DocumentVerifyResponseEntity;
|
|
145
|
+
};
|
|
146
|
+
/** Archivo de un documento finalizado y de acceso público, para quien lo verificó con su código. */
|
|
147
|
+
[DocumentPatterns.getPublicFile]: {
|
|
148
|
+
payload: { code: string };
|
|
149
|
+
response: DocumentPublicFileResponseEntity;
|
|
150
|
+
};
|
|
128
151
|
/** Carpeta de Drive de los documentos y sus anexos: el gateway la pide antes de subir cada archivo. */
|
|
129
152
|
[DocumentPatterns.getFilesFolder]: {
|
|
130
153
|
payload: Record<string, never>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
DocumentAnnulledNumberEntity,
|
|
2
3
|
DocumentAttachmentEntity,
|
|
3
4
|
DocumentEntity,
|
|
4
5
|
DocumentParticipantEntity,
|
|
@@ -64,6 +65,23 @@ export interface DocumentGetByIdResponseEntity {
|
|
|
64
65
|
createdAt: DocumentEntity['createdAt'];
|
|
65
66
|
submittedAt: DocumentEntity['submittedAt'];
|
|
66
67
|
finishedAt: DocumentEntity['finishedAt'];
|
|
68
|
+
// Código con que se comprueba el documento en la página pública. Null mientras no se envía a tramitación.
|
|
69
|
+
verificationCode: DocumentEntity['verificationCode'];
|
|
70
|
+
// Dirección de esa página para este documento. Null si el servicio no la tiene configurada.
|
|
71
|
+
verificationUrl: string | null;
|
|
72
|
+
// El redactor pidió una hoja aparte para firmas y visaciones.
|
|
73
|
+
signatureSheet: DocumentEntity['signatureSheet'];
|
|
74
|
+
// Anulación de un documento ya finalizado.
|
|
75
|
+
annulledAt: DocumentEntity['annulledAt'];
|
|
76
|
+
annulmentReason: DocumentEntity['annulmentReason'];
|
|
77
|
+
// Números que el documento tuvo y perdió: lo rechazaron cuando ya estaba numerado.
|
|
78
|
+
annulledNumbers: {
|
|
79
|
+
correlative: DocumentAnnulledNumberEntity['correlative'];
|
|
80
|
+
correlativeYear: DocumentAnnulledNumberEntity['correlativeYear'];
|
|
81
|
+
reason: DocumentAnnulledNumberEntity['reason'];
|
|
82
|
+
employeeFullName: DocumentAnnulledNumberEntity['employeeFullName'];
|
|
83
|
+
createdAt: DocumentAnnulledNumberEntity['createdAt'];
|
|
84
|
+
}[];
|
|
67
85
|
documentType: DocumentTypeSummaryEntity;
|
|
68
86
|
participants: DocumentParticipantResponseEntity[];
|
|
69
87
|
attachments: {
|
|
@@ -124,3 +142,46 @@ export interface DocumentDiscardResponseEntity {
|
|
|
124
142
|
id: DocumentEntity['id'];
|
|
125
143
|
ok: boolean;
|
|
126
144
|
}
|
|
145
|
+
|
|
146
|
+
export interface DocumentAnnulResponseEntity {
|
|
147
|
+
id: DocumentEntity['id'];
|
|
148
|
+
ok: boolean;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Qué se le dice a quien comprueba un documento con su código, sin sesión:
|
|
153
|
+
* - `Finished`: es un documento oficial vigente;
|
|
154
|
+
* - `Annulled`: lo fue, pero quedó sin efecto;
|
|
155
|
+
* - `InProgress`: todavía se está firmando, así que la copia que tiene no es el documento oficial.
|
|
156
|
+
*/
|
|
157
|
+
export type DocumentVerificationState = 'Finished' | 'Annulled' | 'InProgress';
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Respuesta pública de la verificación. Dice lo necesario para comprobar la autenticidad (tipo, número, fecha y
|
|
161
|
+
* quiénes firmaron); la materia y la descarga solo se entregan si el documento es de acceso público.
|
|
162
|
+
*/
|
|
163
|
+
export interface DocumentVerifyResponseEntity {
|
|
164
|
+
state: DocumentVerificationState;
|
|
165
|
+
verificationCode: string;
|
|
166
|
+
documentType: Pick<DocumentTypeSummaryEntity, 'name' | 'abbreviation'>;
|
|
167
|
+
correlative: DocumentEntity['correlative'];
|
|
168
|
+
correlativeYear: DocumentEntity['correlativeYear'];
|
|
169
|
+
numberedAt: DocumentEntity['numberedAt'];
|
|
170
|
+
finishedAt: DocumentEntity['finishedAt'];
|
|
171
|
+
annulledAt: DocumentEntity['annulledAt'];
|
|
172
|
+
// Quiénes firmaron (o deben firmar, si aún está en tramitación), en su orden.
|
|
173
|
+
signers: {
|
|
174
|
+
fullName: DocumentParticipantEntity['fullName'];
|
|
175
|
+
position: DocumentParticipantEntity['position'];
|
|
176
|
+
signedAt: DocumentParticipantEntity['resolvedAt'];
|
|
177
|
+
}[];
|
|
178
|
+
// Solo en documentos de acceso público y sin datos sensibles.
|
|
179
|
+
subject: DocumentEntity['subject'] | null;
|
|
180
|
+
canDownload: boolean;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** Archivo de un documento público, para que el gateway lo entregue a quien lo verifica. */
|
|
184
|
+
export interface DocumentPublicFileResponseEntity {
|
|
185
|
+
fileId: string;
|
|
186
|
+
fileName: string;
|
|
187
|
+
}
|