@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.
- package/LICENSE +21 -0
- package/README.md +96 -0
- package/dist/application/use-cases/ConsultarCTeUseCase.d.ts +16 -0
- package/dist/application/use-cases/ConsultarCTeUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/ConsultarCTeUseCase.js +51 -0
- package/dist/application/use-cases/ConsultarCTeUseCase.js.map +1 -0
- package/dist/application/use-cases/DesacordoCTeUseCase.d.ts +45 -0
- package/dist/application/use-cases/DesacordoCTeUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/DesacordoCTeUseCase.js +102 -0
- package/dist/application/use-cases/DesacordoCTeUseCase.js.map +1 -0
- package/dist/application/use-cases/DistribuicaoDFeUseCase.d.ts +24 -0
- package/dist/application/use-cases/DistribuicaoDFeUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/DistribuicaoDFeUseCase.js +56 -0
- package/dist/application/use-cases/DistribuicaoDFeUseCase.js.map +1 -0
- package/dist/application/use-cases/StatusServicoUseCase.d.ts +16 -0
- package/dist/application/use-cases/StatusServicoUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/StatusServicoUseCase.js +60 -0
- package/dist/application/use-cases/StatusServicoUseCase.js.map +1 -0
- package/dist/contracts/CertificateProvider.d.ts +2 -0
- package/dist/contracts/CertificateProvider.d.ts.map +1 -0
- package/dist/contracts/CertificateProvider.js +3 -0
- package/dist/contracts/CertificateProvider.js.map +1 -0
- package/dist/contracts/SefazTransport.d.ts +2 -0
- package/dist/contracts/SefazTransport.d.ts.map +1 -0
- package/dist/contracts/SefazTransport.js +3 -0
- package/dist/contracts/SefazTransport.js.map +1 -0
- package/dist/contracts/XmlSigner.d.ts +2 -0
- package/dist/contracts/XmlSigner.d.ts.map +1 -0
- package/dist/contracts/XmlSigner.js +3 -0
- package/dist/contracts/XmlSigner.js.map +1 -0
- package/dist/contracts/index.d.ts +5 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +3 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/core/CTeCore.d.ts +42 -0
- package/dist/core/CTeCore.d.ts.map +1 -0
- package/dist/core/CTeCore.js +83 -0
- package/dist/core/CTeCore.js.map +1 -0
- package/dist/core/types.d.ts +16 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/domain/entities/CTe.d.ts +43 -0
- package/dist/domain/entities/CTe.d.ts.map +1 -0
- package/dist/domain/entities/CTe.js +28 -0
- package/dist/domain/entities/CTe.js.map +1 -0
- package/dist/domain/entities/Carga.d.ts +12 -0
- package/dist/domain/entities/Carga.d.ts.map +1 -0
- package/dist/domain/entities/Carga.js +3 -0
- package/dist/domain/entities/Carga.js.map +1 -0
- package/dist/domain/entities/Destinatario.d.ts +21 -0
- package/dist/domain/entities/Destinatario.d.ts.map +1 -0
- package/dist/domain/entities/Destinatario.js +3 -0
- package/dist/domain/entities/Destinatario.js.map +1 -0
- package/dist/domain/entities/Emitente.d.ts +18 -0
- package/dist/domain/entities/Emitente.d.ts.map +1 -0
- package/dist/domain/entities/Emitente.js +3 -0
- package/dist/domain/entities/Emitente.js.map +1 -0
- package/dist/domain/entities/Remetente.d.ts +22 -0
- package/dist/domain/entities/Remetente.d.ts.map +1 -0
- package/dist/domain/entities/Remetente.js +3 -0
- package/dist/domain/entities/Remetente.js.map +1 -0
- package/dist/domain/entities/index.d.ts +7 -0
- package/dist/domain/entities/index.d.ts.map +1 -0
- package/dist/domain/entities/index.js +6 -0
- package/dist/domain/entities/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/sefaz/consulta-soap.d.ts +24 -0
- package/dist/infra/sefaz/consulta-soap.d.ts.map +1 -0
- package/dist/infra/sefaz/consulta-soap.js +56 -0
- package/dist/infra/sefaz/consulta-soap.js.map +1 -0
- package/dist/infra/sefaz/distribuicao-soap.d.ts +39 -0
- package/dist/infra/sefaz/distribuicao-soap.d.ts.map +1 -0
- package/dist/infra/sefaz/distribuicao-soap.js +92 -0
- package/dist/infra/sefaz/distribuicao-soap.js.map +1 -0
- package/dist/infra/sefaz/evento-soap.d.ts +48 -0
- package/dist/infra/sefaz/evento-soap.d.ts.map +1 -0
- package/dist/infra/sefaz/evento-soap.js +118 -0
- package/dist/infra/sefaz/evento-soap.js.map +1 -0
- package/dist/infra/sefaz/status-servico-soap.d.ts +24 -0
- package/dist/infra/sefaz/status-servico-soap.d.ts.map +1 -0
- package/dist/infra/sefaz/status-servico-soap.js +56 -0
- package/dist/infra/sefaz/status-servico-soap.js.map +1 -0
- package/dist/shared/constants/cte-an-urls.d.ts +7 -0
- package/dist/shared/constants/cte-an-urls.d.ts.map +1 -0
- package/dist/shared/constants/cte-an-urls.js +33 -0
- package/dist/shared/constants/cte-an-urls.js.map +1 -0
- package/dist/shared/constants/cte-urls.d.ts +76 -0
- package/dist/shared/constants/cte-urls.d.ts.map +1 -0
- package/dist/shared/constants/cte-urls.js +237 -0
- package/dist/shared/constants/cte-urls.js.map +1 -0
- package/dist/shared/errors/CTeError.d.ts +5 -0
- package/dist/shared/errors/CTeError.d.ts.map +1 -0
- package/dist/shared/errors/CTeError.js +12 -0
- package/dist/shared/errors/CTeError.js.map +1 -0
- package/dist/shared/errors/index.d.ts +3 -0
- package/dist/shared/errors/index.d.ts.map +1 -0
- package/dist/shared/errors/index.js +10 -0
- package/dist/shared/errors/index.js.map +1 -0
- package/dist/shared/helpers/evento-id.d.ts +6 -0
- package/dist/shared/helpers/evento-id.d.ts.map +1 -0
- package/dist/shared/helpers/evento-id.js +11 -0
- package/dist/shared/helpers/evento-id.js.map +1 -0
- 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":";;;AAmBA,oDAwBC;AA0BD,8DAgCC;AAKD,4CAIC;AA9GD,yCAAuC;AACvC,0DAAuD;AAEvD,MAAM,aAAa,GAAG,oCAAoC,CAAC;AAC3D,MAAM,cAAc,GAAG,GAAG,aAAa,0BAA0B,CAAC;AAElE;;;;;GAKG;AACU,QAAA,wBAAwB,GAAG,GAAG,cAAc,sBAAsB,CAAC;AAEhF,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC;;GAEG;AACH,SAAgB,oBAAoB,CAClC,IAAY,EACZ,QAAgB,EAChB,KAAgB,EAChB,MAAc;IAEd,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAE3C,OAAO;QACL,yKAAyK;QACzK,aAAa;QACb,+BAA+B,cAAc,IAAI;QACjD,eAAe;QACf,uBAAuB,mBAAmB,YAAY,aAAa,IAAI;QACvE,UAAU,KAAK,UAAU;QACzB,aAAa,QAAQ,aAAa;QAClC,SAAS,IAAI,SAAS;QACtB,oBAAoB,SAAS,qBAAqB;QAClD,eAAe;QACf,gBAAgB;QAChB,wBAAwB;QACxB,cAAc;QACd,kBAAkB;KACnB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAgBD;;;;;;;;;GASG;AACH,SAAgB,yBAAyB,CAAC,IAAY;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,mBAAQ,CAAC,oCAAoC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,qBAAqB,CAAC;IACrE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,iBAAiB,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,iBAAiB,CAAC;IAE/D,MAAM,UAAU,GAAkB,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,kEAAkE,CAAC;IACvF,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAC5C,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG;gBACH,MAAM;gBACN,GAAG,EAAE,6CAA6C,GAAG,SAAS;aAC/D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,aAAqB;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAA,sBAAU,EAAC,MAAM,CAAC,CAAC;IACxC,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACxC,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,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"}
|