@wondai/n8n-nodes-nucleo 0.6.3 → 0.6.4

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/README.md CHANGED
@@ -66,6 +66,11 @@ alguma linha não traz `produto_id`/`alias` e `quantidade` positiva. É uma prot
66
66
  o Núcleo continua sendo a autoridade final das regras, mas o workflow não envia pedido vazio por
67
67
  erro de tool schema.
68
68
 
69
+ A partir da v0.6.4, `Pedido Criar` e `Pedido Alterar` aceitam `Cobranças Comerciais (JSON)`.
70
+ Use para adicionais pagos vindos de `Contexto -> commercial_rules`, por exemplo
71
+ `[{"tipo":"paid_addon","nome":"Confetes","valor":35,"origem":"commercial_rules"}]`.
72
+ Essas linhas entram no valor a cobrar, mas nao viram produto de catalogo nem pagamento.
73
+
69
74
  **Disponibilidade na Rede** ("tem na outra loja?") é exposta como **tool** do AI Agent, mas com regra
70
75
  estrita no prompt: **usar SÓ quando o cliente pedir explicitamente outra unidade**. Passe o `produto_id`
71
76
  já resolvido (ou uma `consulta` curta). A loja que pergunta vem do **vínculo do token** (a IA não
@@ -603,6 +603,14 @@ class Nucleo {
603
603
  description: "Opcional. Desconto concedido em reais (ex.: 5). Abate do valor a cobrar e do troco. 0/vazio = sem desconto.",
604
604
  displayOptions: { show: { resource: ["pedido"], operation: ["criar"] } },
605
605
  },
606
+ {
607
+ displayName: "Cobranças Comerciais (JSON)",
608
+ name: "cobrancas",
609
+ type: "json",
610
+ default: "[]",
611
+ description: 'Opcional. Array de cobranças comerciais que entram no valor a cobrar sem virar produto: [{"tipo":"paid_addon","nome":"Confetes","valor":35,"origem":"commercial_rules","operational_config_revision_id":"...","snapshot":{"label":"Confetes - R$35,00"}}]. Use quando vier de Contexto Loja/commercial_rules.',
612
+ displayOptions: { show: { resource: ["pedido"], operation: ["criar"] } },
613
+ },
606
614
  {
607
615
  displayName: "Loja (unit_id)",
608
616
  name: "unitId",
@@ -754,6 +762,14 @@ class Nucleo {
754
762
  description: "Redefine o desconto (recalcula o valor a cobrar e o pagamento pendente). Ex.: 5. Vazio = não altera o desconto. Use 0 para zerar.",
755
763
  displayOptions: { show: { resource: ["pedido"], operation: ["alterar"] } },
756
764
  },
765
+ {
766
+ displayName: "Cobranças Comerciais (JSON)",
767
+ name: "cobrancasNovo",
768
+ type: "json",
769
+ default: "[]",
770
+ description: 'Opcional. Substitui as cobranças comerciais do pedido. Envie [] para limpar. Ex.: [{"tipo":"paid_addon","nome":"Confetes","valor":35,"origem":"commercial_rules"}].',
771
+ displayOptions: { show: { resource: ["pedido"], operation: ["alterar"] } },
772
+ },
757
773
  {
758
774
  displayName: "Motivo",
759
775
  name: "motivo",
@@ -1294,6 +1310,7 @@ class Nucleo {
1294
1310
  const trocoPara = Number(this.getNodeParameter("trocoPara", i, 0));
1295
1311
  const taxaEntrega = Number(this.getNodeParameter("taxaEntrega", i, 0));
1296
1312
  const desconto = Number(this.getNodeParameter("desconto", i, 0));
1313
+ const cobrancas = asArray(this.getNodeParameter("cobrancas", i, "[]"));
1297
1314
  const unitId = this.getNodeParameter("unitId", i, "").trim();
1298
1315
  idempotencyKey =
1299
1316
  this.getNodeParameter("idempotencyKey", i, "").trim() || (0, node_crypto_1.randomUUID)();
@@ -1320,6 +1337,8 @@ class Nucleo {
1320
1337
  b.taxa_entrega = taxaEntrega;
1321
1338
  if (Number.isFinite(desconto) && desconto > 0)
1322
1339
  b.desconto = desconto;
1340
+ if (cobrancas.length)
1341
+ b.cobrancas = cobrancas;
1323
1342
  if (unitId)
1324
1343
  b.unit_id = unitId;
1325
1344
  method = "POST";
@@ -1342,6 +1361,7 @@ class Nucleo {
1342
1361
  const trocoParaNovo = Number(this.getNodeParameter("trocoParaNovo", i, 0));
1343
1362
  const taxaEntregaNova = this.getNodeParameter("taxaEntregaNova", i, "").trim();
1344
1363
  const descontoNovo = this.getNodeParameter("descontoNovo", i, "").trim();
1364
+ const cobrancasNovo = asArray(this.getNodeParameter("cobrancasNovo", i, "[]"));
1345
1365
  const b = {};
1346
1366
  if (observacoes.trim())
1347
1367
  b.observacoes = observacoes.trim();
@@ -1377,6 +1397,8 @@ class Nucleo {
1377
1397
  if (descontoNovo !== "" && Number.isFinite(Number(descontoNovo))) {
1378
1398
  b.desconto = Number(descontoNovo);
1379
1399
  }
1400
+ if (cobrancasNovo.length)
1401
+ b.cobrancas = cobrancasNovo;
1380
1402
  // Idempotência (opcional): mesma chave num retry → backend não reaplica a alteração.
1381
1403
  idempotencyKey =
1382
1404
  this.getNodeParameter("idempotencyKey", i, "").trim() || undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wondai/n8n-nodes-nucleo",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "description": "Node n8n para o Núcleo Wondai — atendimento de IA multi-vertical (gate liga/desliga, cliente/paciente, catálogo fuzzy, pedidos [padaria], procedimento/agenda/agendamento [odonto], contexto operacional, telemetria) com assinatura HMAC v1. Tenant e vertical vêm do token (a parede, ADR-013/038).",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",