@autohubs/lib-cte 0.2.0

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.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +96 -0
  3. package/dist/application/use-cases/ConsultarCTeUseCase.d.ts +16 -0
  4. package/dist/application/use-cases/ConsultarCTeUseCase.d.ts.map +1 -0
  5. package/dist/application/use-cases/ConsultarCTeUseCase.js +51 -0
  6. package/dist/application/use-cases/ConsultarCTeUseCase.js.map +1 -0
  7. package/dist/application/use-cases/DesacordoCTeUseCase.d.ts +45 -0
  8. package/dist/application/use-cases/DesacordoCTeUseCase.d.ts.map +1 -0
  9. package/dist/application/use-cases/DesacordoCTeUseCase.js +102 -0
  10. package/dist/application/use-cases/DesacordoCTeUseCase.js.map +1 -0
  11. package/dist/application/use-cases/DistribuicaoDFeUseCase.d.ts +24 -0
  12. package/dist/application/use-cases/DistribuicaoDFeUseCase.d.ts.map +1 -0
  13. package/dist/application/use-cases/DistribuicaoDFeUseCase.js +56 -0
  14. package/dist/application/use-cases/DistribuicaoDFeUseCase.js.map +1 -0
  15. package/dist/application/use-cases/StatusServicoUseCase.d.ts +16 -0
  16. package/dist/application/use-cases/StatusServicoUseCase.d.ts.map +1 -0
  17. package/dist/application/use-cases/StatusServicoUseCase.js +60 -0
  18. package/dist/application/use-cases/StatusServicoUseCase.js.map +1 -0
  19. package/dist/contracts/CertificateProvider.d.ts +2 -0
  20. package/dist/contracts/CertificateProvider.d.ts.map +1 -0
  21. package/dist/contracts/CertificateProvider.js +3 -0
  22. package/dist/contracts/CertificateProvider.js.map +1 -0
  23. package/dist/contracts/SefazTransport.d.ts +2 -0
  24. package/dist/contracts/SefazTransport.d.ts.map +1 -0
  25. package/dist/contracts/SefazTransport.js +3 -0
  26. package/dist/contracts/SefazTransport.js.map +1 -0
  27. package/dist/contracts/XmlSigner.d.ts +2 -0
  28. package/dist/contracts/XmlSigner.d.ts.map +1 -0
  29. package/dist/contracts/XmlSigner.js +3 -0
  30. package/dist/contracts/XmlSigner.js.map +1 -0
  31. package/dist/contracts/index.d.ts +5 -0
  32. package/dist/contracts/index.d.ts.map +1 -0
  33. package/dist/contracts/index.js +3 -0
  34. package/dist/contracts/index.js.map +1 -0
  35. package/dist/core/CTeCore.d.ts +42 -0
  36. package/dist/core/CTeCore.d.ts.map +1 -0
  37. package/dist/core/CTeCore.js +83 -0
  38. package/dist/core/CTeCore.js.map +1 -0
  39. package/dist/core/types.d.ts +16 -0
  40. package/dist/core/types.d.ts.map +1 -0
  41. package/dist/core/types.js +3 -0
  42. package/dist/core/types.js.map +1 -0
  43. package/dist/domain/entities/CTe.d.ts +43 -0
  44. package/dist/domain/entities/CTe.d.ts.map +1 -0
  45. package/dist/domain/entities/CTe.js +28 -0
  46. package/dist/domain/entities/CTe.js.map +1 -0
  47. package/dist/domain/entities/Carga.d.ts +12 -0
  48. package/dist/domain/entities/Carga.d.ts.map +1 -0
  49. package/dist/domain/entities/Carga.js +3 -0
  50. package/dist/domain/entities/Carga.js.map +1 -0
  51. package/dist/domain/entities/Destinatario.d.ts +21 -0
  52. package/dist/domain/entities/Destinatario.d.ts.map +1 -0
  53. package/dist/domain/entities/Destinatario.js +3 -0
  54. package/dist/domain/entities/Destinatario.js.map +1 -0
  55. package/dist/domain/entities/Emitente.d.ts +18 -0
  56. package/dist/domain/entities/Emitente.d.ts.map +1 -0
  57. package/dist/domain/entities/Emitente.js +3 -0
  58. package/dist/domain/entities/Emitente.js.map +1 -0
  59. package/dist/domain/entities/Remetente.d.ts +22 -0
  60. package/dist/domain/entities/Remetente.d.ts.map +1 -0
  61. package/dist/domain/entities/Remetente.js +3 -0
  62. package/dist/domain/entities/Remetente.js.map +1 -0
  63. package/dist/domain/entities/index.d.ts +7 -0
  64. package/dist/domain/entities/index.d.ts.map +1 -0
  65. package/dist/domain/entities/index.js +6 -0
  66. package/dist/domain/entities/index.js.map +1 -0
  67. package/dist/index.d.ts +16 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +30 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/infra/sefaz/consulta-soap.d.ts +24 -0
  72. package/dist/infra/sefaz/consulta-soap.d.ts.map +1 -0
  73. package/dist/infra/sefaz/consulta-soap.js +56 -0
  74. package/dist/infra/sefaz/consulta-soap.js.map +1 -0
  75. package/dist/infra/sefaz/distribuicao-soap.d.ts +39 -0
  76. package/dist/infra/sefaz/distribuicao-soap.d.ts.map +1 -0
  77. package/dist/infra/sefaz/distribuicao-soap.js +92 -0
  78. package/dist/infra/sefaz/distribuicao-soap.js.map +1 -0
  79. package/dist/infra/sefaz/evento-soap.d.ts +48 -0
  80. package/dist/infra/sefaz/evento-soap.d.ts.map +1 -0
  81. package/dist/infra/sefaz/evento-soap.js +118 -0
  82. package/dist/infra/sefaz/evento-soap.js.map +1 -0
  83. package/dist/infra/sefaz/status-servico-soap.d.ts +24 -0
  84. package/dist/infra/sefaz/status-servico-soap.d.ts.map +1 -0
  85. package/dist/infra/sefaz/status-servico-soap.js +56 -0
  86. package/dist/infra/sefaz/status-servico-soap.js.map +1 -0
  87. package/dist/shared/constants/cte-an-urls.d.ts +7 -0
  88. package/dist/shared/constants/cte-an-urls.d.ts.map +1 -0
  89. package/dist/shared/constants/cte-an-urls.js +33 -0
  90. package/dist/shared/constants/cte-an-urls.js.map +1 -0
  91. package/dist/shared/constants/cte-urls.d.ts +76 -0
  92. package/dist/shared/constants/cte-urls.d.ts.map +1 -0
  93. package/dist/shared/constants/cte-urls.js +237 -0
  94. package/dist/shared/constants/cte-urls.js.map +1 -0
  95. package/dist/shared/errors/CTeError.d.ts +5 -0
  96. package/dist/shared/errors/CTeError.d.ts.map +1 -0
  97. package/dist/shared/errors/CTeError.js +12 -0
  98. package/dist/shared/errors/CTeError.js.map +1 -0
  99. package/dist/shared/errors/index.d.ts +3 -0
  100. package/dist/shared/errors/index.d.ts.map +1 -0
  101. package/dist/shared/errors/index.js +10 -0
  102. package/dist/shared/errors/index.js.map +1 -0
  103. package/dist/shared/helpers/evento-id.d.ts +6 -0
  104. package/dist/shared/helpers/evento-id.d.ts.map +1 -0
  105. package/dist/shared/helpers/evento-id.js +11 -0
  106. package/dist/shared/helpers/evento-id.js.map +1 -0
  107. package/package.json +55 -0
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DISTRIBUICAO_SOAP_ACTION = void 0;
4
+ exports.buildDistNSUEnvelope = buildDistNSUEnvelope;
5
+ exports.parseDistribuicaoResponse = parseDistribuicaoResponse;
6
+ exports.decompressDocZip = decompressDocZip;
7
+ const node_zlib_1 = require("node:zlib");
8
+ const CTeError_1 = require("../../shared/errors/CTeError");
9
+ const CTE_NAMESPACE = 'http://www.portalfiscal.inf.br/cte';
10
+ const WSDL_NAMESPACE = `${CTE_NAMESPACE}/wsdl/CTeDistribuicaoDFe`;
11
+ /**
12
+ * SOAPAction e namespace confirmados por WSDL real e por chamada real (ver
13
+ * cte-an-urls.ts). A versao do XML de negocio (`distDFeInt`) e' "1.00" para
14
+ * CT-e — diferente da NF-e, que usa "1.01". Usar "1.01" aqui causa rejeicao
15
+ * cStat 239 "versao do arquivo xml nao e suportada" (confirmado no teste).
16
+ */
17
+ exports.DISTRIBUICAO_SOAP_ACTION = `${WSDL_NAMESPACE}/cteDistDFeInteresse`;
18
+ const DIST_DFE_INT_VERSAO = '1.00';
19
+ /**
20
+ * Monta envelope SOAP para consulta por ultimo NSU (distNSU).
21
+ */
22
+ function buildDistNSUEnvelope(cnpj, cUFAutor, tpAmb, ultNSU) {
23
+ const nsuPadded = ultNSU.padStart(15, '0');
24
+ return [
25
+ '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">',
26
+ '<soap:Body>',
27
+ `<cteDistDFeInteresse xmlns="${WSDL_NAMESPACE}">`,
28
+ '<cteDadosMsg>',
29
+ `<distDFeInt versao="${DIST_DFE_INT_VERSAO}" xmlns="${CTE_NAMESPACE}">`,
30
+ `<tpAmb>${tpAmb}</tpAmb>`,
31
+ `<cUFAutor>${cUFAutor}</cUFAutor>`,
32
+ `<CNPJ>${cnpj}</CNPJ>`,
33
+ `<distNSU><ultNSU>${nsuPadded}</ultNSU></distNSU>`,
34
+ '</distDFeInt>',
35
+ '</cteDadosMsg>',
36
+ '</cteDistDFeInteresse>',
37
+ '</soap:Body>',
38
+ '</soap:Envelope>'
39
+ ].join('');
40
+ }
41
+ /**
42
+ * Parseia a resposta do servico CTeDistribuicaoDFe.
43
+ *
44
+ * O parsing de `docZip` (documento individual, base64+GZip) segue o mesmo
45
+ * formato documentado na NT 2015.002, compartilhado entre NFe/CTe/MDFe —
46
+ * ainda nao observado com um `docZip` real nesta validacao (a consulta de
47
+ * teste nao tinha documentos pendentes de distribuicao para o CNPJ usado),
48
+ * mas a estrutura do envelope de resposta (`retDistDFeInt`, `cStat`,
49
+ * `ultNSU`, `maxNSU`) foi confirmada contra a SEFAZ real.
50
+ */
51
+ function parseDistribuicaoResponse(body) {
52
+ const cStat = extractTag(body, 'cStat');
53
+ if (!cStat) {
54
+ throw new CTeError_1.CTeError('Resposta de distribuicao sem cStat');
55
+ }
56
+ const xMotivo = extractTag(body, 'xMotivo') ?? 'Motivo desconhecido';
57
+ const ultNSU = extractTag(body, 'ultNSU') ?? '000000000000000';
58
+ const maxNSU = extractTag(body, 'maxNSU') ?? '000000000000000';
59
+ const documentos = [];
60
+ const docZipRegex = /<docZip\s+NSU="(\d+)"\s+schema="([^"]+)"[^>]*>([^<]+)<\/docZip>/g;
61
+ let match;
62
+ while ((match = docZipRegex.exec(body)) !== null) {
63
+ const nsu = match[1];
64
+ const schema = match[2];
65
+ const base64Content = match[3];
66
+ try {
67
+ const xml = decompressDocZip(base64Content);
68
+ documentos.push({ nsu, schema, xml });
69
+ }
70
+ catch {
71
+ documentos.push({
72
+ nsu,
73
+ schema,
74
+ xml: `<erro>Falha ao descompactar documento NSU ${nsu}</erro>`
75
+ });
76
+ }
77
+ }
78
+ return { cStat, xMotivo, ultNSU, maxNSU, documentos };
79
+ }
80
+ /**
81
+ * Descompacta um docZip (base64 + GZip) para XML.
82
+ */
83
+ function decompressDocZip(base64Content) {
84
+ const buffer = Buffer.from(base64Content, 'base64');
85
+ const decompressed = (0, node_zlib_1.gunzipSync)(buffer);
86
+ return decompressed.toString('utf-8');
87
+ }
88
+ function extractTag(xml, tag) {
89
+ const match = xml.match(new RegExp(`<${tag}>([^<]*)</${tag}>`));
90
+ return match ? match[1] : null;
91
+ }
92
+ //# sourceMappingURL=distribuicao-soap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribuicao-soap.js","sourceRoot":"","sources":["../../../src/infra/sefaz/distribuicao-soap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * SOAPAction confirmada por WSDL real (`?wsdl` contra o host de homologacao
3
+ * do SVRS, autenticado com certificado A1). Faltava o sufixo "V4" no
4
+ * namespace do servico em relacao a inferencia anterior.
5
+ */
6
+ export declare const EVENTO_SOAP_ACTION = "http://www.portalfiscal.inf.br/cte/wsdl/CTeRecepcaoEventoV4/cteRecepcaoEvento";
7
+ export declare const TP_EVENTO_DESACORDO = "610110";
8
+ export declare const TP_EVENTO_CANCEL_DESACORDO = "610111";
9
+ /**
10
+ * Documento de identificacao do tomador do servico. Exatamente um dos dois
11
+ * campos deve estar preenchido — a SEFAZ aceita CPF como tomador de CT-e
12
+ * desde que pessoas fisicas nao-contribuintes tambem podem ser tomadoras do
13
+ * servico e registrar o evento de Desacordo, nao apenas CNPJ.
14
+ */
15
+ export type DocumentoTomador = {
16
+ readonly cnpj?: string;
17
+ readonly cpf?: string;
18
+ };
19
+ /**
20
+ * Monta XML do evento "Prestacao do Servico em Desacordo" (tpEvento 610110)
21
+ * — SEM envelope SOAP. Precisa ser assinado antes de envolver no SOAP.
22
+ *
23
+ * Raiz e' <eventoCTe> (nao <evento>, diferente do padrao generico de NFe).
24
+ */
25
+ export declare function buildDesacordoXml(chCTe: string, documentoTomador: DocumentoTomador, cOrgao: string, tpAmb: '1' | '2', dhEvento: string, xJust: string, nSeqEvento?: number): string;
26
+ /**
27
+ * Monta XML do evento "Cancelamento da Prestacao do Servico em Desacordo"
28
+ * (tpEvento 610111) — SEM envelope SOAP. Precisa ser assinado antes de
29
+ * envolver no SOAP.
30
+ */
31
+ export declare function buildCancelDesacordoXml(chCTe: string, documentoTomador: DocumentoTomador, cOrgao: string, tpAmb: '1' | '2', dhEvento: string, nProtDesacordo: string, nSeqEvento?: number): string;
32
+ /**
33
+ * Envolve XML de evento assinado em envelope SOAP para CTeRecepcaoEvento.
34
+ */
35
+ export declare function wrapEventoEnvelope(signedEventoXml: string): string;
36
+ export type EventoCTeResult = {
37
+ readonly cStat: string;
38
+ readonly xMotivo: string;
39
+ readonly nProt?: string;
40
+ readonly chCTe?: string;
41
+ readonly tpEvento?: string;
42
+ readonly dhRegEvento?: string;
43
+ };
44
+ /**
45
+ * Parseia resposta de CTeRecepcaoEvento (retEventoCTe).
46
+ */
47
+ export declare function parseEventoResponse(body: string): EventoCTeResult;
48
+ //# sourceMappingURL=evento-soap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evento-soap.d.ts","sourceRoot":"","sources":["../../../src/infra/sefaz/evento-soap.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,kFAAgE,CAAC;AAEhG,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,0BAA0B,WAAW,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAQF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,GAAG,GAAG,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAU,GACrB,MAAM,CAqBR;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,GAAG,GAAG,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,UAAU,GAAE,MAAU,GACrB,MAAM,CAqBR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAYlE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAkBjE"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TP_EVENTO_CANCEL_DESACORDO = exports.TP_EVENTO_DESACORDO = exports.EVENTO_SOAP_ACTION = void 0;
4
+ exports.buildDesacordoXml = buildDesacordoXml;
5
+ exports.buildCancelDesacordoXml = buildCancelDesacordoXml;
6
+ exports.wrapEventoEnvelope = wrapEventoEnvelope;
7
+ exports.parseEventoResponse = parseEventoResponse;
8
+ const CTeError_1 = require("../../shared/errors/CTeError");
9
+ const evento_id_1 = require("../../shared/helpers/evento-id");
10
+ const CTE_NAMESPACE = 'http://www.portalfiscal.inf.br/cte';
11
+ /**
12
+ * SOAPAction confirmada por WSDL real (`?wsdl` contra o host de homologacao
13
+ * do SVRS, autenticado com certificado A1). Faltava o sufixo "V4" no
14
+ * namespace do servico em relacao a inferencia anterior.
15
+ */
16
+ exports.EVENTO_SOAP_ACTION = `${CTE_NAMESPACE}/wsdl/CTeRecepcaoEventoV4/cteRecepcaoEvento`;
17
+ exports.TP_EVENTO_DESACORDO = '610110';
18
+ exports.TP_EVENTO_CANCEL_DESACORDO = '610111';
19
+ function tagDocumentoTomador(documento) {
20
+ if (documento.cnpj)
21
+ return `<CNPJ>${documento.cnpj}</CNPJ>`;
22
+ if (documento.cpf)
23
+ return `<CPF>${documento.cpf}</CPF>`;
24
+ throw new CTeError_1.CTeError('Documento do tomador (CNPJ ou CPF) nao informado ao montar o evento');
25
+ }
26
+ /**
27
+ * Monta XML do evento "Prestacao do Servico em Desacordo" (tpEvento 610110)
28
+ * — SEM envelope SOAP. Precisa ser assinado antes de envolver no SOAP.
29
+ *
30
+ * Raiz e' <eventoCTe> (nao <evento>, diferente do padrao generico de NFe).
31
+ */
32
+ function buildDesacordoXml(chCTe, documentoTomador, cOrgao, tpAmb, dhEvento, xJust, nSeqEvento = 1) {
33
+ const id = (0, evento_id_1.buildEventoId)(exports.TP_EVENTO_DESACORDO, chCTe, nSeqEvento);
34
+ return [
35
+ `<eventoCTe versao="4.00" xmlns="${CTE_NAMESPACE}">`,
36
+ `<infEvento Id="${id}">`,
37
+ `<cOrgao>${cOrgao}</cOrgao>`,
38
+ `<tpAmb>${tpAmb}</tpAmb>`,
39
+ tagDocumentoTomador(documentoTomador),
40
+ `<chCTe>${chCTe}</chCTe>`,
41
+ `<dhEvento>${dhEvento}</dhEvento>`,
42
+ `<tpEvento>${exports.TP_EVENTO_DESACORDO}</tpEvento>`,
43
+ `<nSeqEvento>${nSeqEvento}</nSeqEvento>`,
44
+ '<detEvento versao="4.00">',
45
+ '<evPrestDesacordo>',
46
+ `<xJust>${xJust}</xJust>`,
47
+ '</evPrestDesacordo>',
48
+ '</detEvento>',
49
+ '</infEvento>',
50
+ '</eventoCTe>'
51
+ ].join('');
52
+ }
53
+ /**
54
+ * Monta XML do evento "Cancelamento da Prestacao do Servico em Desacordo"
55
+ * (tpEvento 610111) — SEM envelope SOAP. Precisa ser assinado antes de
56
+ * envolver no SOAP.
57
+ */
58
+ function buildCancelDesacordoXml(chCTe, documentoTomador, cOrgao, tpAmb, dhEvento, nProtDesacordo, nSeqEvento = 1) {
59
+ const id = (0, evento_id_1.buildEventoId)(exports.TP_EVENTO_CANCEL_DESACORDO, chCTe, nSeqEvento);
60
+ return [
61
+ `<eventoCTe versao="4.00" xmlns="${CTE_NAMESPACE}">`,
62
+ `<infEvento Id="${id}">`,
63
+ `<cOrgao>${cOrgao}</cOrgao>`,
64
+ `<tpAmb>${tpAmb}</tpAmb>`,
65
+ tagDocumentoTomador(documentoTomador),
66
+ `<chCTe>${chCTe}</chCTe>`,
67
+ `<dhEvento>${dhEvento}</dhEvento>`,
68
+ `<tpEvento>${exports.TP_EVENTO_CANCEL_DESACORDO}</tpEvento>`,
69
+ `<nSeqEvento>${nSeqEvento}</nSeqEvento>`,
70
+ '<detEvento versao="4.00">',
71
+ '<evCancPrestDesacordo>',
72
+ `<nProt>${nProtDesacordo}</nProt>`,
73
+ '</evCancPrestDesacordo>',
74
+ '</detEvento>',
75
+ '</infEvento>',
76
+ '</eventoCTe>'
77
+ ].join('');
78
+ }
79
+ /**
80
+ * Envolve XML de evento assinado em envelope SOAP para CTeRecepcaoEvento.
81
+ */
82
+ function wrapEventoEnvelope(signedEventoXml) {
83
+ const inner = signedEventoXml.replace(/<\?xml[^?]*\?>\s*/g, '');
84
+ return [
85
+ '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">',
86
+ '<soap:Body>',
87
+ `<cteDadosMsg xmlns="${CTE_NAMESPACE}/wsdl/CTeRecepcaoEventoV4">`,
88
+ inner,
89
+ '</cteDadosMsg>',
90
+ '</soap:Body>',
91
+ '</soap:Envelope>'
92
+ ].join('');
93
+ }
94
+ /**
95
+ * Parseia resposta de CTeRecepcaoEvento (retEventoCTe).
96
+ */
97
+ function parseEventoResponse(body) {
98
+ const retEvento = body.match(/<retEventoCTe[^>]*>([\s\S]*?)<\/retEventoCTe>/);
99
+ const infEvento = body.match(/<infEvento[^>]*>([\s\S]*?)<\/infEvento>/);
100
+ const source = retEvento ? retEvento[1] : infEvento ? infEvento[1] : body;
101
+ const cStat = extractTag(source, 'cStat');
102
+ if (!cStat) {
103
+ throw new CTeError_1.CTeError('Resposta de evento sem cStat');
104
+ }
105
+ return {
106
+ cStat,
107
+ xMotivo: extractTag(source, 'xMotivo') ?? 'Motivo desconhecido',
108
+ nProt: extractTag(source, 'nProt') ?? undefined,
109
+ chCTe: extractTag(source, 'chCTe') ?? undefined,
110
+ tpEvento: extractTag(source, 'tpEvento') ?? undefined,
111
+ dhRegEvento: extractTag(source, 'dhRegEvento') ?? undefined
112
+ };
113
+ }
114
+ function extractTag(xml, tag) {
115
+ const match = xml.match(new RegExp(`<${tag}>([^<]*)</${tag}>`));
116
+ return match ? match[1] : null;
117
+ }
118
+ //# sourceMappingURL=evento-soap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evento-soap.js","sourceRoot":"","sources":["../../../src/infra/sefaz/evento-soap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * SOAPAction confirmada por WSDL real (`?wsdl` contra o host de homologacao
3
+ * do SVRS, autenticado com certificado A1). Namespace do servico e'
4
+ * `CTeStatusServicoV4`, nao `CteStatusServico` como versoes anteriores desta
5
+ * lib assumiam por inferencia — o "V4" e a capitalizacao ("CTe", nao "Cte")
6
+ * fazem parte do path real.
7
+ */
8
+ export declare const STATUS_SERVICO_SOAP_ACTION = "http://www.portalfiscal.inf.br/cte/wsdl/CTeStatusServicoV4/cteStatusServicoCT";
9
+ /**
10
+ * Monta envelope SOAP para consulta de status do servico (CTeStatusServico).
11
+ */
12
+ export declare function buildStatusServicoEnvelope(cUF: string, tpAmb: '1' | '2'): string;
13
+ export type StatusServicoResponse = {
14
+ readonly cStat: string;
15
+ readonly xMotivo: string;
16
+ readonly cUF?: string;
17
+ readonly dhRecbto?: string;
18
+ readonly tMed?: string;
19
+ };
20
+ /**
21
+ * Parseia a resposta de CTeStatusServico (retConsStatServCTe).
22
+ */
23
+ export declare function parseStatusServicoResponse(body: string): StatusServicoResponse;
24
+ //# sourceMappingURL=status-servico-soap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-servico-soap.d.ts","sourceRoot":"","sources":["../../../src/infra/sefaz/status-servico-soap.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,kFAAgE,CAAC;AAExG;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,CAchF;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAgB9E"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STATUS_SERVICO_SOAP_ACTION = void 0;
4
+ exports.buildStatusServicoEnvelope = buildStatusServicoEnvelope;
5
+ exports.parseStatusServicoResponse = parseStatusServicoResponse;
6
+ const CTeError_1 = require("../../shared/errors/CTeError");
7
+ const CTE_NAMESPACE = 'http://www.portalfiscal.inf.br/cte';
8
+ /**
9
+ * SOAPAction confirmada por WSDL real (`?wsdl` contra o host de homologacao
10
+ * do SVRS, autenticado com certificado A1). Namespace do servico e'
11
+ * `CTeStatusServicoV4`, nao `CteStatusServico` como versoes anteriores desta
12
+ * lib assumiam por inferencia — o "V4" e a capitalizacao ("CTe", nao "Cte")
13
+ * fazem parte do path real.
14
+ */
15
+ exports.STATUS_SERVICO_SOAP_ACTION = `${CTE_NAMESPACE}/wsdl/CTeStatusServicoV4/cteStatusServicoCT`;
16
+ /**
17
+ * Monta envelope SOAP para consulta de status do servico (CTeStatusServico).
18
+ */
19
+ function buildStatusServicoEnvelope(cUF, tpAmb) {
20
+ return [
21
+ '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">',
22
+ '<soap:Body>',
23
+ `<cteDadosMsg xmlns="${CTE_NAMESPACE}/wsdl/CTeStatusServicoV4">`,
24
+ `<consStatServCTe versao="4.00" xmlns="${CTE_NAMESPACE}">`,
25
+ `<tpAmb>${tpAmb}</tpAmb>`,
26
+ `<cUF>${cUF}</cUF>`,
27
+ '<xServ>STATUS</xServ>',
28
+ '</consStatServCTe>',
29
+ '</cteDadosMsg>',
30
+ '</soap:Body>',
31
+ '</soap:Envelope>'
32
+ ].join('');
33
+ }
34
+ /**
35
+ * Parseia a resposta de CTeStatusServico (retConsStatServCTe).
36
+ */
37
+ function parseStatusServicoResponse(body) {
38
+ const ret = body.match(/<retConsStatServCTe[^>]*>([\s\S]*?)<\/retConsStatServCTe>/);
39
+ const source = ret ? ret[1] : body;
40
+ const cStat = extractTag(source, 'cStat');
41
+ if (!cStat) {
42
+ throw new CTeError_1.CTeError('Resposta de status do servico sem cStat');
43
+ }
44
+ return {
45
+ cStat,
46
+ xMotivo: extractTag(source, 'xMotivo') ?? 'Motivo desconhecido',
47
+ cUF: extractTag(source, 'cUF') ?? undefined,
48
+ dhRecbto: extractTag(source, 'dhRecbto') ?? undefined,
49
+ tMed: extractTag(source, 'tMed') ?? undefined
50
+ };
51
+ }
52
+ function extractTag(xml, tag) {
53
+ const match = xml.match(new RegExp(`<${tag}>([^<]*)</${tag}>`));
54
+ return match ? match[1] : null;
55
+ }
56
+ //# sourceMappingURL=status-servico-soap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-servico-soap.js","sourceRoot":"","sources":["../../../src/infra/sefaz/status-servico-soap.ts"],"names":[],"mappings":";;;AAgBA,gEAcC;AAaD,gEAgBC;AA3DD,0DAAuD;AAEvD,MAAM,aAAa,GAAG,oCAAoC,CAAC;AAE3D;;;;;;GAMG;AACU,QAAA,0BAA0B,GAAG,GAAG,aAAa,6CAA6C,CAAC;AAExG;;GAEG;AACH,SAAgB,0BAA0B,CAAC,GAAW,EAAE,KAAgB;IACtE,OAAO;QACL,yKAAyK;QACzK,aAAa;QACb,uBAAuB,aAAa,4BAA4B;QAChE,yCAAyC,aAAa,IAAI;QAC1D,UAAU,KAAK,UAAU;QACzB,QAAQ,GAAG,QAAQ;QACnB,uBAAuB;QACvB,oBAAoB;QACpB,gBAAgB;QAChB,cAAc;QACd,kBAAkB;KACnB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAUD;;GAEG;AACH,SAAgB,0BAA0B,CAAC,IAAY;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,mBAAQ,CAAC,yCAAyC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,KAAK;QACL,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,qBAAqB;QAC/D,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,SAAS;QAC3C,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,SAAS;QACrD,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,SAAS;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,GAAW;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type CteAnService = 'CTeDistribuicaoDFe';
2
+ export type CteAnEnvironment = 'homologacao' | 'producao';
3
+ /**
4
+ * Retorna a URL do servico nacional (AN) do CT-e para o ambiente informado.
5
+ */
6
+ export declare function getCteAnUrl(environment: CteAnEnvironment, service: CteAnService): string;
7
+ //# sourceMappingURL=cte-an-urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cte-an-urls.d.ts","sourceRoot":"","sources":["../../../src/shared/constants/cte-an-urls.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAChD,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,UAAU,CAAC;AAqB1D;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CAMxF"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCteAnUrl = getCteAnUrl;
4
+ const CTeError_1 = require("../../shared/errors/CTeError");
5
+ /**
6
+ * URLs do Ambiente Nacional (AN) do CT-e. Distribuicao de DF-e (NT 2015.002)
7
+ * e' um servico nacional, nao segue o modelo UF → Autorizador (diferente de
8
+ * CTeStatusServico/CTeConsultaProtocolo/CTeRecepcaoEvento, que sao por UF).
9
+ *
10
+ * **Confirmado por WSDL real** (`?wsdl` contra os dois hosts, autenticado com
11
+ * certificado A1) e por chamada real (`cteDistDFeInteresse` retornou cStat
12
+ * 137 "Nenhum documento localizado" em homologacao — resposta de negocio
13
+ * valida, nao erro de schema/URL).
14
+ */
15
+ const AN_URLS = {
16
+ homologacao: {
17
+ CTeDistribuicaoDFe: 'https://hom1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx'
18
+ },
19
+ producao: {
20
+ CTeDistribuicaoDFe: 'https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx'
21
+ }
22
+ };
23
+ /**
24
+ * Retorna a URL do servico nacional (AN) do CT-e para o ambiente informado.
25
+ */
26
+ function getCteAnUrl(environment, service) {
27
+ const url = AN_URLS[environment][service];
28
+ if (!url) {
29
+ throw new CTeError_1.CTeError(`Servico ${service} nao configurado para ambiente ${environment}`);
30
+ }
31
+ return url;
32
+ }
33
+ //# sourceMappingURL=cte-an-urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cte-an-urls.js","sourceRoot":"","sources":["../../../src/shared/constants/cte-an-urls.ts"],"names":[],"mappings":";;AA2BA,kCAMC;AAjCD,0DAAuD;AAKvD;;;;;;;;;GASG;AACH,MAAM,OAAO,GAA2D;IACtE,WAAW,EAAE;QACX,kBAAkB,EAAE,4EAA4E;KACjG;IACD,QAAQ,EAAE;QACR,kBAAkB,EAAE,4EAA4E;KACjG;CACF,CAAC;AAEF;;GAEG;AACH,SAAgB,WAAW,CAAC,WAA6B,EAAE,OAAqB;IAC9E,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,mBAAQ,CAAC,WAAW,OAAO,kCAAkC,WAAW,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,76 @@
1
+ export type CTeService = 'CTeStatusServico' | 'CTeConsultaProtocolo' | 'CTeRecepcaoEvento';
2
+ export type CTeEnvironment = 'homologacao' | 'producao';
3
+ /**
4
+ * Autorizadores de CT-e. Tabela de autorizadores por UF e' distinta da NF-e
5
+ * (nem todo estado que tem webservice proprio de NFe tem o mesmo host para
6
+ * CTe, e vice-versa) — nao reaproveitar `sefaz-urls.ts` do lib-nfe.
7
+ *
8
+ * Cobertura das 27 UFs:
9
+ * - SVRS: AC, AL, AM, BA, CE, DF, ES, GO, MA, PA, PB, PI, RJ, RN, RO, RS, SC,
10
+ * SE, TO (RS incluido no SVRS pois nenhuma pesquisa encontrou host proprio
11
+ * de CT-e para RS distinto do SVRS — diferente da NF-e, onde RS tem host
12
+ * proprio `sefazrs.rs.gov.br` separado do SVRS `svrs.rs.gov.br`)
13
+ * - SVSP: AP, PE, RR
14
+ * - Webservice proprio: MG, MS, MT, PR, SP
15
+ */
16
+ export type Autorizador = 'SVRS' | 'SVSP' | 'MG' | 'MS' | 'MT' | 'PR' | 'SP';
17
+ type ServiceUrls = {
18
+ readonly [service in CTeService]: string;
19
+ };
20
+ type AutorizadorUrls = {
21
+ readonly [env in CTeEnvironment]: ServiceUrls;
22
+ };
23
+ /**
24
+ * Mapeamento de UF para autorizador do CT-e. Cobre as 27 UFs — ver nivel de
25
+ * confianca de cada URL nos comentarios de `AUTORIZADOR_URLS` abaixo.
26
+ */
27
+ export declare const UF_AUTORIZADOR: Record<string, Autorizador>;
28
+ /**
29
+ * URLs dos webservices de CT-e (v4.00) por autorizador e ambiente.
30
+ *
31
+ * Nivel de confianca por autorizador (revisar periodicamente, hosts de SEFAZ
32
+ * mudam sem aviso):
33
+ * - SVRS: **confirmado por WSDL real** (`?wsdl` contra o host de homologacao,
34
+ * autenticado com certificado A1 real — os 3 servicos retornaram 200 com o
35
+ * WSDL). Producao confirmada contra a documentacao oficial do SVRS
36
+ * (dfe-portal.svrs.rs.gov.br/Cte/Servicos), mesmo padrao de path trocando
37
+ * so' o subdominio. Path e' `ws/{Servico}V4/{Servico}V4.asmx` — uma
38
+ * pesquisa anterior havia encontrado `ws/ctestatusservico/CteStatusServico.asmx`
39
+ * (sem "V4", casing diferente), que se mostrou **incorreto** (404) no teste
40
+ * real; corrigido nesta validacao.
41
+ * - SP, PR, MG: confirmados via fetch direto das paginas oficiais da SEFAZ
42
+ * (portal.fazenda.sp.gov.br, sped.fazenda.pr.gov.br,
43
+ * portalsped.fazenda.mg.gov.br) — maior nivel de confianca desta tabela.
44
+ * - MS: confirmado por busca (nao fetch direto da pagina, que redireciona
45
+ * para uma landing page sem o detalhe tecnico) — padrao consistente
46
+ * `ws/CTeXxxV4` em homologacao e producao. CTeRecepcaoEvento de producao
47
+ * nao apareceu explicitamente na busca; inferido por simetria com
48
+ * homologacao (mesmo padrao de path, so' troca o subdominio).
49
+ * - MT: **ATENCAO, confianca baixa**. A pagina oficial (sefaz.mt.gov.br)
50
+ * retornou CTeStatusServico/CTeConsultaProtocolo em `ctews/services/...`
51
+ * (sem sufixo de versao), mas uma busca separada encontrou
52
+ * `ctews2/services/CteRecepcaoEvento` para o mesmo autorizador — o sufixo
53
+ * "2" e a ausencia de "V4" no primeiro grupo sugerem que a pagina oficial
54
+ * pode estar desatualizada (referenciando ainda a v3, desativada em
55
+ * fev/2024) e que o path correto para v4 seja `ctews2` em todos os
56
+ * servicos. CONFIRMAR contra o WSDL real (`?wsdl`) antes de usar em
57
+ * producao. CTeRecepcaoEvento de homologacao nao foi encontrado; inferido
58
+ * por simetria com producao.
59
+ * - SVSP (AP, PE, RR): host nao encontrado — ver comentario abaixo.
60
+ */
61
+ export declare const AUTORIZADOR_URLS: Record<Autorizador, AutorizadorUrls>;
62
+ /**
63
+ * Retorna a URL do webservice de CT-e para a UF, ambiente e servico informados.
64
+ * Lanca CTeError se a UF ou o servico ainda nao tiverem URL confirmada.
65
+ */
66
+ export declare function getCteUrl(uf: string, environment: CTeEnvironment, service: CTeService): string;
67
+ /**
68
+ * Converte codigo IBGE (2 digitos) para sigla da UF.
69
+ */
70
+ export declare function ibgeToUf(codigoIbge: string): string;
71
+ /**
72
+ * Converte sigla da UF para codigo IBGE (2 digitos).
73
+ */
74
+ export declare function ufToIbge(uf: string): string;
75
+ export {};
76
+ //# sourceMappingURL=cte-urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cte-urls.d.ts","sourceRoot":"","sources":["../../../src/shared/constants/cte-urls.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,kBAAkB,GAAG,sBAAsB,GAAG,mBAAmB,CAAC;AAE3F,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,UAAU,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7E,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,OAAO,IAAI,UAAU,GAAG,MAAM;CACzC,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,GAAG,IAAI,cAAc,GAAG,WAAW;CAC9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA4BtD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,eAAe,CAkGjE,CAAC;AAoCF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAgB9F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMnD;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM3C"}