evo360-types 1.3.518 → 1.3.520

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.
@@ -39,6 +39,23 @@ export interface INexVendasJourneySignature {
39
39
  signed_at?: Date | null;
40
40
  last_error?: string | null;
41
41
  }
42
+ /**
43
+ * PDF da proposta comercial já persistido no bucket, pronto para virar anexo do
44
+ * envelope de assinatura (feat-136).
45
+ *
46
+ * `sha256` é o hash do HTML **sanitizado** que originou o PDF, não do PDF: é o
47
+ * que permite detectar que o vendedor editou a proposta depois da geração e
48
+ * regerar em vez de anexar um documento obsoleto. `storage_path` é o objeto
49
+ * determinístico derivado desse mesmo hash.
50
+ */
51
+ export interface INexVendasJourneyProposalPdf {
52
+ /** Caminho do objeto no bucket, sem o `gs://` e sem o nome do bucket. */
53
+ storage_path: string;
54
+ /** SHA-256 hex do HTML SANITIZADO que gerou o PDF. */
55
+ sha256: string;
56
+ size_bytes: number;
57
+ generated_at: Date;
58
+ }
42
59
  export interface INexVendasJourneyCompany {
43
60
  legal_name?: string | null;
44
61
  trade_name?: string | null;
@@ -187,15 +204,20 @@ export interface INexVendasJourneyNotification {
187
204
  }
188
205
  /**
189
206
  * Slots que disparam efeito externo NÃO-idempotente e por isso precisam de
190
- * reserva transacional: criar o contrato, criar o envelope de assinatura e
191
- * (feat-131) criar o artefato de pagamento.
207
+ * reserva transacional: criar o contrato, criar o envelope de assinatura,
208
+ * (feat-131) criar o artefato de pagamento e (feat-136) renderizar o PDF da
209
+ * proposta.
192
210
  *
193
- * `payment` difere dos outros dois num ponto: contrato e envelope são efeito
194
- * ÚNICO por jornada, enquanto o artefato de pagamento pode legitimamente ser
195
- * recriado quando o cliente troca de método. Por isso o slot de pagamento é um
196
- * mutex puro — não tem valor "definitivo" que o torne `already_done`.
211
+ * `payment` difere dos outros num ponto: contrato e envelope são efeito ÚNICO
212
+ * por jornada, enquanto o artefato de pagamento pode legitimamente ser recriado
213
+ * quando o cliente troca de método. Por isso o slot de pagamento é um mutex
214
+ * puro — não tem valor "definitivo" que o torne `already_done`.
215
+ *
216
+ * `proposal_pdf` também é mutex puro, por motivo diferente: o PDF é reemitido
217
+ * quando o vendedor edita o `html_content`, e o "já feito" é decidido por
218
+ * comparação de hash antes do claim, não pela presença do campo.
197
219
  */
198
- export type NexVendasJourneySlot = 'contract' | 'signature' | 'payment';
220
+ export type NexVendasJourneySlot = 'contract' | 'signature' | 'payment' | 'proposal_pdf';
199
221
  /**
200
222
  * Marca de reserva de um slot, gravada e liberada dentro de transaction.
201
223
  *
@@ -227,6 +249,12 @@ export interface INexVendasJourney extends IFireGlobalDoc {
227
249
  customer_data?: INexVendasJourneyCustomerData | null;
228
250
  signature?: INexVendasJourneySignature | null;
229
251
  payment?: INexVendasJourneyPayment | null;
252
+ /**
253
+ * PDF da proposta pronto para anexar ao envelope (feat-136). Ausente = ainda
254
+ * não gerado, ou proposta sem `html_content` — nos dois casos o envelope sai
255
+ * sem anexo.
256
+ */
257
+ proposal_pdf?: INexVendasJourneyProposalPdf | null;
230
258
  /**
231
259
  * Espelho PLANO de todo id externo de pagamento que a jornada já produziu —
232
260
  * checkout, cobrança, assinatura e link, **inclusive os superseded**.
@@ -93,6 +93,26 @@ export interface INexVendasJourneySignature {
93
93
  last_error?: string | null;
94
94
  }
95
95
 
96
+ // ── PDF da proposta (anexo do envelope) ──
97
+
98
+ /**
99
+ * PDF da proposta comercial já persistido no bucket, pronto para virar anexo do
100
+ * envelope de assinatura (feat-136).
101
+ *
102
+ * `sha256` é o hash do HTML **sanitizado** que originou o PDF, não do PDF: é o
103
+ * que permite detectar que o vendedor editou a proposta depois da geração e
104
+ * regerar em vez de anexar um documento obsoleto. `storage_path` é o objeto
105
+ * determinístico derivado desse mesmo hash.
106
+ */
107
+ export interface INexVendasJourneyProposalPdf {
108
+ /** Caminho do objeto no bucket, sem o `gs://` e sem o nome do bucket. */
109
+ storage_path: string;
110
+ /** SHA-256 hex do HTML SANITIZADO que gerou o PDF. */
111
+ sha256: string;
112
+ size_bytes: number;
113
+ generated_at: Date;
114
+ }
115
+
96
116
  // ── Dados de identificação coletados ──
97
117
 
98
118
  export interface INexVendasJourneyCompany {
@@ -275,15 +295,20 @@ export interface INexVendasJourneyNotification {
275
295
 
276
296
  /**
277
297
  * Slots que disparam efeito externo NÃO-idempotente e por isso precisam de
278
- * reserva transacional: criar o contrato, criar o envelope de assinatura e
279
- * (feat-131) criar o artefato de pagamento.
298
+ * reserva transacional: criar o contrato, criar o envelope de assinatura,
299
+ * (feat-131) criar o artefato de pagamento e (feat-136) renderizar o PDF da
300
+ * proposta.
301
+ *
302
+ * `payment` difere dos outros num ponto: contrato e envelope são efeito ÚNICO
303
+ * por jornada, enquanto o artefato de pagamento pode legitimamente ser recriado
304
+ * quando o cliente troca de método. Por isso o slot de pagamento é um mutex
305
+ * puro — não tem valor "definitivo" que o torne `already_done`.
280
306
  *
281
- * `payment` difere dos outros dois num ponto: contrato e envelope são efeito
282
- * ÚNICO por jornada, enquanto o artefato de pagamento pode legitimamente ser
283
- * recriado quando o cliente troca de método. Por isso o slot de pagamento é um
284
- * mutex puro — não tem valor "definitivo" que o torne `already_done`.
307
+ * `proposal_pdf` também é mutex puro, por motivo diferente: o PDF é reemitido
308
+ * quando o vendedor edita o `html_content`, e o "já feito" é decidido por
309
+ * comparação de hash antes do claim, não pela presença do campo.
285
310
  */
286
- export type NexVendasJourneySlot = 'contract' | 'signature' | 'payment';
311
+ export type NexVendasJourneySlot = 'contract' | 'signature' | 'payment' | 'proposal_pdf';
287
312
 
288
313
  /**
289
314
  * Marca de reserva de um slot, gravada e liberada dentro de transaction.
@@ -323,6 +348,13 @@ export interface INexVendasJourney extends IFireGlobalDoc {
323
348
  signature?: INexVendasJourneySignature | null;
324
349
  payment?: INexVendasJourneyPayment | null;
325
350
 
351
+ /**
352
+ * PDF da proposta pronto para anexar ao envelope (feat-136). Ausente = ainda
353
+ * não gerado, ou proposta sem `html_content` — nos dois casos o envelope sai
354
+ * sem anexo.
355
+ */
356
+ proposal_pdf?: INexVendasJourneyProposalPdf | null;
357
+
326
358
  /**
327
359
  * Espelho PLANO de todo id externo de pagamento que a jornada já produziu —
328
360
  * checkout, cobrança, assinatura e link, **inclusive os superseded**.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.518",
3
+ "version": "1.3.520",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",