@useinvio/nfse-sdk 2.2.0 → 3.1.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/JSON_MAPPING.md +30 -17
- package/README.md +145 -67
- package/dist/agent.d.ts +86 -0
- package/dist/agent.js +235 -0
- package/dist/agent.js.map +1 -0
- package/dist/certificate.d.ts +96 -0
- package/dist/certificate.js +218 -0
- package/dist/certificate.js.map +1 -0
- package/dist/certificateValidation.d.ts +12 -5
- package/dist/certificateValidation.js +25 -9
- package/dist/certificateValidation.js.map +1 -1
- package/dist/client.d.ts +8 -3
- package/dist/client.js +8 -7
- package/dist/client.js.map +1 -1
- package/dist/decimal.d.ts +7 -0
- package/dist/decimal.js +24 -0
- package/dist/decimal.js.map +1 -0
- package/dist/dpsJson.js +15 -45
- package/dist/dpsJson.js.map +1 -1
- package/dist/dpsJsonSchema.d.ts +17 -0
- package/dist/dpsJsonSchema.js +184 -0
- package/dist/dpsJsonSchema.js.map +1 -0
- package/dist/dpsNormalization.d.ts +10 -0
- package/dist/dpsNormalization.js +85 -0
- package/dist/dpsNormalization.js.map +1 -0
- package/dist/emissaoNota.d.ts +4 -4
- package/dist/emissaoNota.js +27 -8
- package/dist/emissaoNota.js.map +1 -1
- package/dist/fiscalDomains.d.ts +22 -0
- package/dist/fiscalDomains.js +99 -0
- package/dist/fiscalDomains.js.map +1 -0
- package/dist/fiscalValidation.d.ts +1 -0
- package/dist/fiscalValidation.js +119 -88
- package/dist/fiscalValidation.js.map +1 -1
- package/dist/index.d.ts +9 -4
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/jsonSchemaCheck.d.ts +12 -0
- package/dist/jsonSchemaCheck.js +70 -0
- package/dist/jsonSchemaCheck.js.map +1 -0
- package/dist/loadPfx.d.ts +2 -0
- package/dist/loadPfx.js +2 -1
- package/dist/loadPfx.js.map +1 -1
- package/dist/sefinClient.d.ts +10 -4
- package/dist/sefinClient.js +22 -4
- package/dist/sefinClient.js.map +1 -1
- package/dist/signXml.d.ts +3 -3
- package/dist/signXml.js +8 -6
- package/dist/signXml.js.map +1 -1
- package/dist/xmlInspection.d.ts +6 -0
- package/dist/xmlInspection.js +62 -0
- package/dist/xmlInspection.js.map +1 -0
- package/dist/xsdValidation.d.ts +17 -5
- package/dist/xsdValidation.js +75 -67
- package/dist/xsdValidation.js.map +1 -1
- package/docs/CORRECOES_EMISSAO.md +55 -0
- package/docs/FISCAL_MATRIX.md +11 -0
- package/docs/REGRAS_NEGOCIO_EMISSAO.md +317 -0
- package/examples/README.md +4 -1
- package/examples/client-resource.ts +8 -44
- package/examples/emit-homologation.ts +4 -40
- package/examples/generate-dps-xml.ts +3 -40
- package/examples/handle-errors.ts +6 -5
- package/examples/payloads.ts +36 -0
- package/llms.txt +22 -7
- package/package.json +9 -4
package/dist/sefinClient.js
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
import https from 'node:https';
|
|
2
2
|
import { performance } from 'node:perf_hooks';
|
|
3
3
|
import { resolveSefinBaseUrl } from './config.js';
|
|
4
|
+
import { resolveCredentials } from './certificate.js';
|
|
4
5
|
/** Evita que uma conexao travada com o SEFIN prenda um worker indefinidamente. */
|
|
5
6
|
const SEFIN_REQUEST_TIMEOUT_MS = 60_000;
|
|
6
7
|
export const SEFIN_LATENCY_METRICS_ENV = 'NFSE_SEFIN_LATENCY_METRICS';
|
|
8
|
+
/** The access key is not 50 digits; raised before any network I/O so it never reaches the URL path. */
|
|
9
|
+
export class ChaveAcessoInvalidaError extends Error {
|
|
10
|
+
chaveAcesso;
|
|
11
|
+
code = 'CHAVE_ACESSO_INVALID_FORMAT';
|
|
12
|
+
constructor(chaveAcesso) {
|
|
13
|
+
super('chaveAcesso deve ter exatamente 50 digitos numericos.');
|
|
14
|
+
this.chaveAcesso = chaveAcesso;
|
|
15
|
+
this.name = 'ChaveAcessoInvalidaError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function assertChaveAcesso(chave) {
|
|
19
|
+
if (typeof chave !== 'string' || !/^\d{50}$/.test(chave))
|
|
20
|
+
throw new ChaveAcessoInvalidaError(String(chave));
|
|
21
|
+
return chave;
|
|
22
|
+
}
|
|
7
23
|
let sefinRequestObserver;
|
|
8
24
|
export function isSefinLatencyMetricsEnabled(env = process.env) {
|
|
9
25
|
const value = env[SEFIN_LATENCY_METRICS_ENV]?.trim().toLowerCase();
|
|
@@ -97,9 +113,10 @@ export function createSefinLatencyTracker(options = {}) {
|
|
|
97
113
|
}
|
|
98
114
|
/**
|
|
99
115
|
* Requisição mTLS de baixo nível ao SefinNacional, retornando o corpo bruto (Buffer).
|
|
100
|
-
* Usa key+cert PEM
|
|
116
|
+
* Usa key+cert PEM (ou o agente mTLS dedicado de `NfseCertificate`) no handshake;
|
|
117
|
+
* o .pfx legado ICP-Brasil é rejeitado pelo TLS do Node.
|
|
101
118
|
*/
|
|
102
|
-
function sefinRequest(opts,
|
|
119
|
+
function sefinRequest(opts, certificate, metricOpts, baseOverride) {
|
|
103
120
|
const url = new URL(`${baseOverride ?? resolveSefinBaseUrl()}${opts.path}`);
|
|
104
121
|
const payload = opts.jsonBody != null ? JSON.stringify(opts.jsonBody) : undefined;
|
|
105
122
|
const headers = {
|
|
@@ -115,8 +132,7 @@ function sefinRequest(opts, pfx, metricOpts, baseOverride) {
|
|
|
115
132
|
port: url.port || 443,
|
|
116
133
|
path: url.pathname + url.search,
|
|
117
134
|
headers,
|
|
118
|
-
|
|
119
|
-
cert: pfx.certPem,
|
|
135
|
+
...resolveCredentials(certificate).tls,
|
|
120
136
|
rejectUnauthorized: true,
|
|
121
137
|
timeout: SEFIN_REQUEST_TIMEOUT_MS,
|
|
122
138
|
};
|
|
@@ -234,11 +250,13 @@ export async function transmitirDpsCompactada(dpsXmlGZipB64, pfx, ambiente) {
|
|
|
234
250
|
}
|
|
235
251
|
/** SefinNacional · GET /nfse/{chave} — consulta a NFS-e pela chave de acesso (50 dígitos). */
|
|
236
252
|
export async function consultarNfse(chave, pfx, ambiente) {
|
|
253
|
+
assertChaveAcesso(chave);
|
|
237
254
|
const base = ambiente ? resolveSefinBaseUrl(ambiente) : undefined;
|
|
238
255
|
return parseJson(await sefinRequest({ method: 'GET', path: `/nfse/${chave}` }, pfx, { operation: 'consultar_nfse', ambiente, pathTemplate: '/nfse/{chave}' }, base));
|
|
239
256
|
}
|
|
240
257
|
/** SefinNacional · POST /nfse/{chave}/eventos — registra evento fiscal da NFS-e. */
|
|
241
258
|
export async function enviarEvento(pedRegXmlGZipB64, pfx, chaveAcesso, ambiente) {
|
|
259
|
+
assertChaveAcesso(chaveAcesso);
|
|
242
260
|
const base = ambiente ? resolveSefinBaseUrl(ambiente) : undefined;
|
|
243
261
|
return parseJson(await sefinRequest({
|
|
244
262
|
method: 'POST',
|
package/dist/sefinClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sefinClient.js","sourceRoot":"","sources":["../sefinClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,kFAAkF;AAClF,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AAqFtE,IAAI,oBAAsD,CAAC;AAE3D,MAAM,UAAU,4BAA4B,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC/E,MAAM,KAAK,GAAG,GAAG,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnE,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAA0C;IAChF,oBAAoB,GAAG,QAAQ,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,0BAA0B,CAAC,MAA0B;IAC5D,IAAI,CAAC,4BAA4B,EAAE;QAAE,OAAO;IAE5C,IAAI,CAAC;QACH,oBAAoB,EAAE,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,YAAsB,EAAE,QAAgB;IAC1D,IAAI,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5G,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAAC,MAA0D;IAC5E,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAsC,EAAE;IAChF,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,IAAI,KAAK,CAAC,CAAC,CAAC;IAC1F,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAI,GAAG,EAOlB,CAAC;IAEL,OAAO;QACL,OAAO,CAAC,MAAM;YACZ,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG;oBACP,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,CAAC;oBACR,YAAY,EAAE,CAAC;oBACf,UAAU,EAAE,CAAC;oBACb,SAAS,EAAE,EAAE;iBACd,CAAC;gBACF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1B,CAAC;YAED,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAClB,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;;gBACxC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YAC5B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;gBAClD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,mBAAmB,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,QAAQ;YACN,OAAO;gBACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACjD,MAAM,eAAe,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpE,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;oBAErE,MAAM,QAAQ,GAA+B;wBAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,WAAW,EAAE,eAAe,CAAC,MAAM;wBACnC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC9B,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBAClC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;qBACnE,CAAC;oBAEF,IAAI,kBAAkB,EAAE,CAAC;wBACvB,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;wBACnD,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;wBACnD,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;oBACrD,CAAC;oBAED,OAAO,QAAQ,CAAC;gBAClB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAChB,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;oBACtC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CACnD,CAAC;aACH,CAAC;QACJ,CAAC;QACD,KAAK;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CACnB,IAAiB,EACjB,GAAgB,EAChB,UAA6B,EAC7B,YAAqB;IAErB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,YAAY,IAAI,mBAAmB,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElF,MAAM,OAAO,GAAoC;QAC/C,MAAM,EAAE,kBAAkB;KAC3B,CAAC;IACF,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC7C,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAyB;QACpC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG;QACrB,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM;QAC/B,OAAO;QACP,GAAG,EAAE,GAAG,CAAC,aAAa;QACtB,IAAI,EAAE,GAAG,CAAC,OAAO;QACjB,kBAAkB,EAAE,IAAI;QACxB,OAAO,EAAE,wBAAwB;KAClC,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,UAAU,GAAG,CAAC,MAA8C,EAAE,EAAE;YACpE,IAAI,UAAU;gBAAE,OAAO;YACvB,UAAU,GAAG,IAAI,CAAC;YAClB,0BAA0B,CAAC;gBACzB,GAAG,MAAM;gBACT,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS;aAC1C,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzC,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;gBACnC,UAAU,CAAC;oBACT,SAAS,EAAE,UAAU,CAAC,SAAS;oBAC/B,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,YAAY,EAAE,UAAU,CAAC,YAAY;oBACrC,MAAM;oBACN,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;iBACvC,CAAC,CAAC;gBACH,OAAO,CAAC;oBACN,MAAM;oBACN,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;oBACtD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;iBAC9B,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,UAAU,CAAC;gBACT,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,YAAY,EAAE,KAAK,CAAC,OAAO;aAC5B,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,iCAAiC,wBAAwB,IAAI,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,IAAI,IAAI;YAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,SAAS,SAAS,CAAC,GAAqB;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,aAAa,CAAC,KAAU;IAC/B,MAAM,IAAI,GAAc;QACtB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,cAAc,CAAC;QAC5E,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;KAC/F,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC;IAC3D,IAAI,WAAW,IAAI,IAAI;QAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAyB;IACnD,OAAO,CACL,IAAI,CAAC,OAAO,KAAK,IAAI;QACrB,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QACpC,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;QACvC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAC/B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,IAAS;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO;QACL,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;KAC5D,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,aAAqB,EACrB,GAAgB,EAChB,QAAmB;IAEnB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,OAAO,SAAS,CAAC,MAAM,YAAY,CACjC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,EAAE,EAC9D,GAAG,EACH,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,EAChE,IAAI,CACL,CAAC,CAAC;AACL,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,GAAgB,EAAE,QAAmB;IACtF,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,OAAO,SAAS,CAAC,MAAM,YAAY,CACjC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,EACzC,GAAG,EACH,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,EACxE,IAAI,CACL,CAAC,CAAC;AACL,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,gBAAwB,EACxB,GAAgB,EAChB,WAAmB,EACnB,QAAmB;IAEnB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,OAAO,SAAS,CACd,MAAM,YAAY,CAChB;QACE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,SAAS,WAAW,UAAU;QACpC,QAAQ,EAAE,EAAE,gBAAgB,EAAE;KAC/B,EACD,GAAG,EACH,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,uBAAuB,EAAE,EAC/E,IAAI,CACL,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"sefinClient.js","sourceRoot":"","sources":["../sefinClient.ts"],"names":[],"mappings":"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"}
|
package/dist/signXml.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type CertificateInput } from './certificate.js';
|
|
2
2
|
/** Garante declaracao XML UTF-8 antes de compactar/enviar para a SEFIN. */
|
|
3
3
|
export declare function withUtf8XmlDeclaration(xml: string): string;
|
|
4
4
|
/**
|
|
@@ -6,8 +6,8 @@ export declare function withUtf8XmlDeclaration(xml: string): string;
|
|
|
6
6
|
* seu Id (URI="#<id>"). A <Signature> é inserida como irmã desse elemento.
|
|
7
7
|
* Usado para infDPS (emissão) e infPedReg (eventos/cancelamento).
|
|
8
8
|
*/
|
|
9
|
-
export declare function signEnveloped(xml: string, refId: string, localName: string,
|
|
9
|
+
export declare function signEnveloped(xml: string, refId: string, localName: string, certificate: CertificateInput): string;
|
|
10
10
|
/** Assina a DPS (referência em infDPS). */
|
|
11
|
-
export declare function signDps(xml: string, dpsId: string,
|
|
11
|
+
export declare function signDps(xml: string, dpsId: string, certificate: CertificateInput): string;
|
|
12
12
|
/** Valida uma DPS assinada usando o certificado fornecido. Útil em testes. */
|
|
13
13
|
export declare function verifyDps(signedXml: string, certPem: string): boolean;
|
package/dist/signXml.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SignedXml } from 'xml-crypto';
|
|
2
2
|
import { DOMParser } from '@xmldom/xmldom';
|
|
3
|
+
import { resolveCredentials } from './certificate.js';
|
|
3
4
|
// Algoritmos observados nas NFS-e reais do Sistema Nacional.
|
|
4
5
|
// Centralizados aqui para troca fácil caso o ambiente exija variantes.
|
|
5
6
|
const SIGNATURE_ALGORITHM = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256';
|
|
@@ -16,11 +17,12 @@ export function withUtf8XmlDeclaration(xml) {
|
|
|
16
17
|
* seu Id (URI="#<id>"). A <Signature> é inserida como irmã desse elemento.
|
|
17
18
|
* Usado para infDPS (emissão) e infPedReg (eventos/cancelamento).
|
|
18
19
|
*/
|
|
19
|
-
export function signEnveloped(xml, refId, localName,
|
|
20
|
+
export function signEnveloped(xml, refId, localName, certificate) {
|
|
21
|
+
const credentials = resolveCredentials(certificate);
|
|
20
22
|
const xpath = `//*[local-name(.)='${localName}']`;
|
|
21
23
|
const sig = new SignedXml({
|
|
22
|
-
privateKey:
|
|
23
|
-
publicCert:
|
|
24
|
+
privateKey: credentials.privateKey,
|
|
25
|
+
publicCert: credentials.certPem,
|
|
24
26
|
signatureAlgorithm: SIGNATURE_ALGORITHM,
|
|
25
27
|
canonicalizationAlgorithm: CANON_ALGORITHM,
|
|
26
28
|
});
|
|
@@ -31,13 +33,13 @@ export function signEnveloped(xml, refId, localName, pfx) {
|
|
|
31
33
|
uri: refId,
|
|
32
34
|
});
|
|
33
35
|
// Emite <KeyInfo> com o certificado do titular.
|
|
34
|
-
sig.getKeyInfoContent = () => `<X509Data><X509Certificate>${
|
|
36
|
+
sig.getKeyInfoContent = () => `<X509Data><X509Certificate>${credentials.certDerBase64}</X509Certificate></X509Data>`;
|
|
35
37
|
sig.computeSignature(xml, { location: { reference: xpath, action: 'after' } });
|
|
36
38
|
return withUtf8XmlDeclaration(sig.getSignedXml());
|
|
37
39
|
}
|
|
38
40
|
/** Assina a DPS (referência em infDPS). */
|
|
39
|
-
export function signDps(xml, dpsId,
|
|
40
|
-
return signEnveloped(xml, dpsId, 'infDPS',
|
|
41
|
+
export function signDps(xml, dpsId, certificate) {
|
|
42
|
+
return signEnveloped(xml, dpsId, 'infDPS', certificate);
|
|
41
43
|
}
|
|
42
44
|
/** Valida uma DPS assinada usando o certificado fornecido. Útil em testes. */
|
|
43
45
|
export function verifyDps(signedXml, certPem) {
|
package/dist/signXml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signXml.js","sourceRoot":"","sources":["../signXml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"signXml.js","sourceRoot":"","sources":["../signXml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAyB,MAAM,kBAAkB,CAAC;AAE7E,6DAA6D;AAC7D,uEAAuE;AACvE,MAAM,mBAAmB,GAAG,mDAAmD,CAAC;AAChF,MAAM,gBAAgB,GAAG,yCAAyC,CAAC;AACnE,MAAM,eAAe,GAAG,qDAAqD,CAAC;AAC9E,MAAM,SAAS,GAAG,uDAAuD,CAAC;AAE1E,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,qBAAqB,GAAG,GAAG,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO,yCAAyC,qBAAqB,EAAE,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,KAAa,EACb,SAAiB,EACjB,WAA6B;IAE7B,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,sBAAsB,SAAS,IAAI,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC;QACxB,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,UAAU,EAAE,WAAW,CAAC,OAAO;QAC/B,kBAAkB,EAAE,mBAAmB;QACvC,yBAAyB,EAAE,eAAe;KAC3C,CAAC,CAAC;IAEH,GAAG,CAAC,YAAY,CAAC;QACf,KAAK;QACL,UAAU,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;QACxC,eAAe,EAAE,gBAAgB;QACjC,GAAG,EAAE,KAAK;KACX,CAAC,CAAC;IAEH,gDAAgD;IAChD,GAAG,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAC3B,8BAA8B,WAAW,CAAC,aAAa,+BAA+B,CAAC;IAEzF,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO,sBAAsB,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,WAA6B;IAC/E,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC1D,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,SAAiB,EAAE,OAAe;IAC1D,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,GAAG,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,GAAG,CAAC,aAAa,CAAC,SAA4B,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Ambiente } from './config.js';
|
|
2
|
+
export declare function parseNfseXml(xml: string, rootName: 'DPS' | 'NFSe'): Element;
|
|
3
|
+
export declare function directChildren(element: Element, name: string): Element[];
|
|
4
|
+
export declare function dpsEnvironment(xml: string): Ambiente;
|
|
5
|
+
export declare function assertEnvironment(actual: Ambiente, expected: Ambiente): void;
|
|
6
|
+
export declare function authorizedAccessKey(xml: string, body: Record<string, unknown>): string;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { DOMParser } from '@xmldom/xmldom';
|
|
2
|
+
import { XmlDocument, XmlParseError } from 'libxml2-wasm';
|
|
3
|
+
import { SAFE_PARSE_OPTIONS, XsdEngineUnavailableError } from './xsdValidation.js';
|
|
4
|
+
const NS = 'http://www.sped.fazenda.gov.br/nfse';
|
|
5
|
+
export function parseNfseXml(xml, rootName) {
|
|
6
|
+
const errors = [];
|
|
7
|
+
const doc = new DOMParser({ errorHandler: (level, message) => errors.push(`${level}: ${message}`) }).parseFromString(xml, 'application/xml');
|
|
8
|
+
const roots = Array.from(doc.childNodes).filter((node) => node.nodeType === 1);
|
|
9
|
+
const strayText = Array.from(doc.childNodes).some((node) => node.nodeType === 3 && node.textContent?.trim());
|
|
10
|
+
const root = doc.documentElement;
|
|
11
|
+
if (errors.length || doc.doctype || strayText || roots.length !== 1 || root?.localName !== rootName || root.namespaceURI !== NS) {
|
|
12
|
+
throw new Error(`XML ${rootName} invalido: documento malformado, raiz ou namespace inesperado.`);
|
|
13
|
+
}
|
|
14
|
+
// xmldom recovers silently from some malformed XML (e.g. unescaped '&').
|
|
15
|
+
// Use libxml2 (WebAssembly) for strict syntax checking, without fetching DTDs.
|
|
16
|
+
let strict;
|
|
17
|
+
try {
|
|
18
|
+
strict = XmlDocument.fromString(xml, { option: SAFE_PARSE_OPTIONS });
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (error instanceof XmlParseError)
|
|
22
|
+
throw new Error(`XML ${rootName} invalido: documento malformado.`);
|
|
23
|
+
throw new XsdEngineUnavailableError(`Falha ao verificar XML ${rootName}: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
strict?.dispose();
|
|
27
|
+
}
|
|
28
|
+
return root;
|
|
29
|
+
}
|
|
30
|
+
export function directChildren(element, name) {
|
|
31
|
+
return Array.from(element.childNodes).filter((node) => node.nodeType === 1 && node.localName === name && node.namespaceURI === NS);
|
|
32
|
+
}
|
|
33
|
+
export function dpsEnvironment(xml) {
|
|
34
|
+
const root = parseNfseXml(xml, 'DPS');
|
|
35
|
+
const info = directChildren(root, 'infDPS');
|
|
36
|
+
const fields = info.length === 1 ? directChildren(info[0], 'tpAmb') : [];
|
|
37
|
+
const value = fields.length === 1 ? fields[0].textContent : undefined;
|
|
38
|
+
if (value !== '1' && value !== '2')
|
|
39
|
+
throw new Error('XML da DPS deve informar um unico tpAmb valido (1 ou 2).');
|
|
40
|
+
return value === '1' ? 'producao' : 'restrita';
|
|
41
|
+
}
|
|
42
|
+
export function assertEnvironment(actual, expected) {
|
|
43
|
+
if (actual !== expected)
|
|
44
|
+
throw new Error('Ambiente do XML da DPS difere do ambiente de transmissao.');
|
|
45
|
+
}
|
|
46
|
+
export function authorizedAccessKey(xml, body) {
|
|
47
|
+
const root = parseNfseXml(xml, 'NFSe');
|
|
48
|
+
const info = directChildren(root, 'infNFSe');
|
|
49
|
+
if (info.length > 1)
|
|
50
|
+
throw new Error('Resposta contem multiplos elementos infNFSe.');
|
|
51
|
+
const id = info[0]?.getAttribute('Id') || undefined;
|
|
52
|
+
if (id !== undefined && !/^NFS\d{50}$/.test(id))
|
|
53
|
+
throw new Error('Identificador da NFS-e invalido.');
|
|
54
|
+
const candidates = [body.chaveAcesso, body.ChaveAcesso, id?.slice(3)].filter((value) => value !== undefined);
|
|
55
|
+
if (!candidates.length || candidates.some((value) => typeof value !== 'string' || !/^\d{50}$/.test(value))) {
|
|
56
|
+
throw new Error('Resposta de autorizacao sem chave de acesso valida de 50 digitos.');
|
|
57
|
+
}
|
|
58
|
+
if (new Set(candidates).size !== 1)
|
|
59
|
+
throw new Error('Chaves de acesso divergentes no corpo e/ou XML da resposta.');
|
|
60
|
+
return candidates[0];
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=xmlInspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmlInspection.js","sourceRoot":"","sources":["../xmlInspection.ts"],"names":[],"mappings":"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"}
|
package/dist/xsdValidation.d.ts
CHANGED
|
@@ -4,14 +4,26 @@ export declare class DpsXsdValidationError extends Error {
|
|
|
4
4
|
constructor(details: string[]);
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* The embedded XSD engine (libxml2 compiled to WebAssembly) could not load the
|
|
8
|
+
* official schemas or crashed. This is an infrastructure problem, not proof
|
|
9
|
+
* that the XML is fiscally invalid, and callers must not treat it as a
|
|
10
10
|
* permanent rejection.
|
|
11
11
|
*/
|
|
12
|
-
export declare class
|
|
12
|
+
export declare class XsdEngineUnavailableError extends Error {
|
|
13
13
|
readonly cause: unknown;
|
|
14
14
|
constructor(message: string, cause: unknown);
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Since 3.1.0 the SDK no longer runs the `xmllint` binary.
|
|
18
|
+
* Kept as an alias so existing `instanceof XmllintUnavailableError` checks still work.
|
|
19
|
+
*/
|
|
20
|
+
export declare const XmllintUnavailableError: typeof XsdEngineUnavailableError;
|
|
21
|
+
/** @deprecated Use {@link XsdEngineUnavailableError}. */
|
|
22
|
+
export type XmllintUnavailableError = XsdEngineUnavailableError;
|
|
23
|
+
/** Never load DTDs, external entities or network resources while parsing. */
|
|
24
|
+
export declare const SAFE_PARSE_OPTIONS: number;
|
|
25
|
+
/**
|
|
26
|
+
* Validates a DPS against the official v1.01 schema before signing.
|
|
27
|
+
* Runs in-process (libxml2 in WebAssembly): no `xmllint`, no temp files, no network.
|
|
28
|
+
*/
|
|
17
29
|
export declare function validateDpsXmlAgainstXsd(xml: string): void;
|
package/dist/xsdValidation.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { cpSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
1
|
+
import { readdirSync, readFileSync } from 'node:fs';
|
|
4
2
|
import { join } from 'node:path';
|
|
5
3
|
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { ParseOption, XmlBufferInputProvider, XmlDocument, XmlParseError, XmlValidateError, XsdValidator, xmlRegisterInputProvider, } from 'libxml2-wasm';
|
|
6
5
|
/** The DPS XML violates the NFS-e v1.01 XSD. This is a fiscal payload problem. */
|
|
7
6
|
export class DpsXsdValidationError extends Error {
|
|
8
7
|
details;
|
|
@@ -13,87 +12,96 @@ export class DpsXsdValidationError extends Error {
|
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
14
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* The embedded XSD engine (libxml2 compiled to WebAssembly) could not load the
|
|
16
|
+
* official schemas or crashed. This is an infrastructure problem, not proof
|
|
17
|
+
* that the XML is fiscally invalid, and callers must not treat it as a
|
|
19
18
|
* permanent rejection.
|
|
20
19
|
*/
|
|
21
|
-
export class
|
|
20
|
+
export class XsdEngineUnavailableError extends Error {
|
|
22
21
|
cause;
|
|
23
22
|
constructor(message, cause) {
|
|
24
23
|
super(message);
|
|
25
24
|
this.cause = cause;
|
|
26
|
-
this.name = '
|
|
25
|
+
this.name = 'XsdEngineUnavailableError';
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
/**
|
|
29
|
+
* @deprecated Since 3.1.0 the SDK no longer runs the `xmllint` binary.
|
|
30
|
+
* Kept as an alias so existing `instanceof XmllintUnavailableError` checks still work.
|
|
31
|
+
*/
|
|
32
|
+
export const XmllintUnavailableError = XsdEngineUnavailableError;
|
|
33
|
+
/** Virtual URL scheme for the bundled schemas, so includes never touch disk or network. */
|
|
34
|
+
const SCHEMA_URL_PREFIX = 'nfse-sdk-xsd://v1.01/';
|
|
35
|
+
const ENTRY_SCHEMA = 'DPS_v1.01.xsd';
|
|
36
|
+
/** Never load DTDs, external entities or network resources while parsing. */
|
|
37
|
+
export const SAFE_PARSE_OPTIONS = ParseOption.XML_PARSE_NONET | ParseOption.XML_PARSE_NO_XXE;
|
|
38
|
+
let compiledValidator;
|
|
39
|
+
function schemaSourceDir() {
|
|
40
|
+
return fileURLToPath(new URL('../schemas/nfse/v1.01/Schemas/1.01/', import.meta.url));
|
|
31
41
|
}
|
|
32
|
-
function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
42
|
+
function loadSchemaBuffers() {
|
|
43
|
+
const dir = schemaSourceDir();
|
|
44
|
+
const encoder = new TextEncoder();
|
|
45
|
+
const buffers = {};
|
|
46
|
+
for (const file of readdirSync(dir)) {
|
|
47
|
+
if (!file.endsWith('.xsd'))
|
|
48
|
+
continue;
|
|
49
|
+
let text = readFileSync(join(dir, file), 'utf8');
|
|
50
|
+
if (file === 'tiposSimples_v1.01.xsd') {
|
|
51
|
+
// libxml2 treats ^/$ literally in XSD regexes. The official package ships
|
|
52
|
+
// one JavaScript-style anchor, so normalize that expression in memory.
|
|
53
|
+
text = text.replace('<xs:pattern value="^0{0,4}\\d{1,5}$"/>', '<xs:pattern value="0{0,4}\\d{1,5}"/>');
|
|
54
|
+
}
|
|
55
|
+
buffers[`${SCHEMA_URL_PREFIX}${file}`] = encoder.encode(text);
|
|
56
|
+
}
|
|
57
|
+
return buffers;
|
|
36
58
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
/** Compiles the official schemas once per process; later calls reuse the validator. */
|
|
60
|
+
function getValidator() {
|
|
61
|
+
if (compiledValidator)
|
|
62
|
+
return compiledValidator;
|
|
63
|
+
let schemaDoc;
|
|
64
|
+
try {
|
|
65
|
+
const buffers = loadSchemaBuffers();
|
|
66
|
+
const entry = buffers[`${SCHEMA_URL_PREFIX}${ENTRY_SCHEMA}`];
|
|
67
|
+
if (!entry)
|
|
68
|
+
throw new Error(`${ENTRY_SCHEMA} nao encontrado em ${schemaSourceDir()}`);
|
|
69
|
+
xmlRegisterInputProvider(new XmlBufferInputProvider(buffers));
|
|
70
|
+
schemaDoc = XmlDocument.fromBuffer(entry, { url: `${SCHEMA_URL_PREFIX}${ENTRY_SCHEMA}`, option: SAFE_PARSE_OPTIONS });
|
|
71
|
+
compiledValidator = XsdValidator.fromDoc(schemaDoc);
|
|
72
|
+
return compiledValidator;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new XsdEngineUnavailableError(`Nao foi possivel carregar os XSD oficiais v1.01: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
// The validator keeps its own compiled copy of the schema.
|
|
79
|
+
schemaDoc?.dispose();
|
|
80
|
+
}
|
|
54
81
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
82
|
+
function detailsOf(error) {
|
|
83
|
+
const details = error.details.map((detail) => detail.message.trim()).filter(Boolean);
|
|
84
|
+
return details.length ? details : [error.message.trim() || error.name];
|
|
57
85
|
}
|
|
58
|
-
/**
|
|
86
|
+
/**
|
|
87
|
+
* Validates a DPS against the official v1.01 schema before signing.
|
|
88
|
+
* Runs in-process (libxml2 in WebAssembly): no `xmllint`, no temp files, no network.
|
|
89
|
+
*/
|
|
59
90
|
export function validateDpsXmlAgainstXsd(xml) {
|
|
60
|
-
const
|
|
61
|
-
|
|
91
|
+
const validator = getValidator();
|
|
92
|
+
let doc;
|
|
62
93
|
try {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const xmlPath = join(workDir, 'dps.xml');
|
|
70
|
-
writeFileSync(xmlPath, xml);
|
|
71
|
-
try {
|
|
72
|
-
execFileSync('xmllint', ['--noout', '--schema', join(schemasDir, 'DPS_v1.01.xsd'), xmlPath], {
|
|
73
|
-
encoding: 'utf8',
|
|
74
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
if (!isExecFileSyncFailure(error)) {
|
|
79
|
-
throw new XmllintUnavailableError(`Falha ao executar xmllint: ${String(error)}`, error);
|
|
80
|
-
}
|
|
81
|
-
if (error.code === 'ENOENT') {
|
|
82
|
-
throw new XmllintUnavailableError(`xmllint nao encontrado no ambiente de execucao (path=${error.path ?? 'xmllint'}). ` +
|
|
83
|
-
'Instale o pacote libxml2/xmllint antes de validar o XSD.', error);
|
|
84
|
-
}
|
|
85
|
-
const stderrText = toText(error.stderr).trim();
|
|
86
|
-
if (stderrText) {
|
|
87
|
-
const details = stderrText.split('\n').map((line) => line.trim()).filter(Boolean);
|
|
88
|
-
throw new DpsXsdValidationError(details.length ? details : [stderrText]);
|
|
89
|
-
}
|
|
90
|
-
// xmllint failed but produced no stderr: do not mask this as an XML
|
|
91
|
-
// schema violation, since we have no evidence about the XML content.
|
|
92
|
-
throw new XmllintUnavailableError(`xmllint falhou sem stderr: ${describeSpawnFailure(error)}`, error);
|
|
94
|
+
doc = XmlDocument.fromString(xml, { option: SAFE_PARSE_OPTIONS });
|
|
95
|
+
validator.validate(doc);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (error instanceof XmlValidateError || error instanceof XmlParseError) {
|
|
99
|
+
throw new DpsXsdValidationError(detailsOf(error));
|
|
93
100
|
}
|
|
101
|
+
throw new XsdEngineUnavailableError(`Falha no motor de validacao XSD: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
94
102
|
}
|
|
95
103
|
finally {
|
|
96
|
-
|
|
104
|
+
doc?.dispose();
|
|
97
105
|
}
|
|
98
106
|
}
|
|
99
107
|
//# sourceMappingURL=xsdValidation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xsdValidation.js","sourceRoot":"","sources":["../xsdValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"xsdValidation.js","sourceRoot":"","sources":["../xsdValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,WAAW,EAEX,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,kFAAkF;AAClF,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAClB;IAA5B,YAA4B,OAAiB;QAC3C,KAAK,CAAC,yCAAyC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAD3C,YAAO,GAAP,OAAO,CAAU;QAE3C,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAGhC;IAFlB,YACE,OAAe,EACC,KAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,UAAK,GAAL,KAAK,CAAS;QAG9B,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAIjE,2FAA2F;AAC3F,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,YAAY,GAAG,eAAe,CAAC;AAErC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,eAAe,GAAG,WAAW,CAAC,gBAAgB,CAAC;AAE7F,IAAI,iBAA2C,CAAC;AAEhD,SAAS,eAAe;IACtB,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,qCAAqC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACtC,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,wCAAwC,EAAE,sCAAsC,CAAC,CAAC;QACxG,CAAC;QACD,OAAO,CAAC,GAAG,iBAAiB,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uFAAuF;AACvF,SAAS,YAAY;IACnB,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAChD,IAAI,SAAkC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,iBAAiB,GAAG,YAAY,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,sBAAsB,eAAe,EAAE,EAAE,CAAC,CAAC;QACtF,wBAAwB,CAAC,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,iBAAiB,GAAG,YAAY,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACtH,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,yBAAyB,CACjC,oDAAoD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC5G,KAAK,CACN,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,2DAA2D;QAC3D,SAAS,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAkB;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAClE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACxE,MAAM,IAAI,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC5F,KAAK,CACN,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,GAAG,EAAE,OAAO,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Migracao 2.x → 3.0.0 — 06/10/2026
|
|
2
|
+
|
|
3
|
+
Este e o guia de migracao da versao 3.0.0. O diagnostico historico em [REGRAS_NEGOCIO_EMISSAO.md](REGRAS_NEGOCIO_EMISSAO.md) permanece preservado. O leiaute local continua DPS 1.01; nao houve atualizacao dos XSD nem mudanca do enquadramento fiscal suportado.
|
|
4
|
+
|
|
5
|
+
## Breaking changes
|
|
6
|
+
|
|
7
|
+
Atualize a integracao se ela dependia de qualquer comportamento abaixo:
|
|
8
|
+
|
|
9
|
+
| Antes (2.x) | Agora (3.0.0) | Acao |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Campos opcionais vazios, `null` ou tipos incorretos podiam chegar ao builder/XSD. | Sao rejeitados com `INVALID_STRUCTURE` ou erro de validacao. | Omita o campo ou informe um valor valido. |
|
|
12
|
+
| Valores pequenos podiam virar `0.00` no XML; limites eram deixados ao XSD. | Valores de servico que arredondam para zero e valores fora dos limites locais sao rejeitados antes do XML. | Ajuste o valor e a escala antes de chamar o SDK. |
|
|
13
|
+
| `obra` podia ser incompleta e `inscImobFisc` era serializada depois de `cObra`. | `cObra` e obrigatorio quando houver obra; a ordem segue o XSD. | Informe `cObra` e teste a integracao contra 3.0.0. |
|
|
14
|
+
| XML externo podia usar um ambiente diferente do destino. | `tpAmb` e obrigatorio e deve coincidir com o ambiente de transmissao. | Corrija o XML ou remova a opcao de ambiente conflitante. |
|
|
15
|
+
| Certificado expirado podia chegar a assinatura/transmissao. | A vigencia e obrigatoria antes de assinar e antes de enviar. | Renove o certificado e trate `CertificateValidationError`. |
|
|
16
|
+
| HTTP 2xx sem resposta autorizada completa podia retornar chave vazia. | Gera `EmitirNotaError` com `INVALID_AUTHORIZATION_RESPONSE`. | Concilie a DPS antes de reenviar. |
|
|
17
|
+
| Intermediario com NIF/`cNaoNIF` podia passar pela pre-validacao e ser perdido no XML. | E rejeitado. | Use CPF/CNPJ ou envie XML externo completo. |
|
|
18
|
+
|
|
19
|
+
Nao sao breaking changes: divergencias cambiais agora produzem `warnings`, sem impedir emissao; `invoices.get(chave, { ambiente })` recebe apenas um segundo argumento opcional; `assertCertificateValidity` e uma nova exportacao.
|
|
20
|
+
|
|
21
|
+
## Mudancas de comportamento
|
|
22
|
+
|
|
23
|
+
| Area | Comportamento corrigido |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| Valores e atalhos | Resolucao por campo compartilhada pelo builder e validador; `valores` prevalece sobre atalhos. `comercioExterior` prevalece integralmente sobre `comExt`. |
|
|
26
|
+
| Relatorio | `normalizedPayload` e uma copia independente. `issues` contem erros; `warnings` contem avisos. Entradas com blocos/tipos incorretos retornam `INVALID_STRUCTURE`. |
|
|
27
|
+
| Cambio | `CURRENCY_BRL_MISMATCH` e `CURRENCY_FOREIGN_MISMATCH` avisam sobre divergencias em centavos sem bloquear nem substituir valores explicitos. |
|
|
28
|
+
| Precisao | Multiplicacao decimal exata com entradas originais; todos os valores monetarios serializados com duas casas, inclusive `comExt.vServMoeda`. Arredondamento metade para cima. |
|
|
29
|
+
| Limites | Valores de servico que arredondam para zero ou ultrapassam o tamanho do XSD sao rejeitados. Retencoes federais e aliquotas tambem passam pela validacao antecipada. |
|
|
30
|
+
| Estrutura | Opcionais vazios/nulos e tipos incorretos sao rejeitados. Datas de calendario, horarios, offsets e dominios pequenos de comercio exterior seguem os tipos locais. |
|
|
31
|
+
| Obra | `cObra` obrigatorio no modelo suportado; `inscImobFisc` opcional vem antes de `cObra` no XML. Ambos limitados a 30 caracteres. |
|
|
32
|
+
| Intermediario | NIF/`cNaoNIF` rejeitados, pois o builder atual so transmite CPF/CNPJ. |
|
|
33
|
+
| Ambiente JSON | Resolvido antes do XML: opcoes → request → restrita. XML e destino usam o mesmo ambiente. |
|
|
34
|
+
| Ambiente XML | Derivado de `tpAmb`; conflitos explicitos e divergencias na nota preparada bloqueiam o envio. |
|
|
35
|
+
| Consulta | `invoices.get(chave, { ambiente })` permite sobrescrita; padrao usa `defaults.ambiente` ou construtor, sem lembrar a ultima emissao. |
|
|
36
|
+
| Certificado | Vigencia obrigatoria antes da assinatura e novamente antes do envio. Titularidade permanece uma chamada explicita. |
|
|
37
|
+
| Autorizacao | Exige descompactacao, XML bem formado com raiz/namespace NFSe e chave de 50 digitos. Chaves do corpo e XML, quando presentes, devem ser validas e iguais. |
|
|
38
|
+
|
|
39
|
+
`assertCertificateValidity(pfx, now?)` e `GetInvoiceOptions` foram adicionados aos exports publicos. As assinaturas existentes continuam disponiveis; o segundo argumento de `invoices.get` e opcional. Certificados fora da vigencia produzem os codigos existentes `CERTIFICATE_NOT_YET_VALID`/`CERTIFICATE_EXPIRED`.
|
|
40
|
+
|
|
41
|
+
As novas rejeicoes tecnicas podem exigir ajustes de integracoes que enviavam campos vazios, datas fora do formato, obra incompleta ou valores fora dos limites. Divergencias cambiais continuam aceitas. O SDK nao recupera precisao que ja tenha sido perdida no `number` da cotacao.
|
|
42
|
+
|
|
43
|
+
## Respostas e infraestrutura
|
|
44
|
+
|
|
45
|
+
HTTP 2xx incompleto ou inconsistente gera `EmitirNotaError` com `INVALID_AUTHORIZATION_RESPONSE`, preservando status, corpo e identificador da DPS. Isso nao prova rejeicao fiscal: a aplicacao deve conciliar antes de reenviar. Rejeicoes oficiais preservam codigo, descricao e complemento. Falhas de transporte continuam propagadas, sem retentativas.
|
|
46
|
+
|
|
47
|
+
O `xmllint`, ja necessario para XSD, tambem verifica a sintaxe XML antes da leitura de ambiente e da aceitacao de respostas; o parser DOM sozinho recupera silenciosamente alguns XMLs malformados. DTDs nao sao aceitos, e a verificacao usa `--nonet`. Falha do executavel continua sendo `XmllintUnavailableError`, distinguida de resposta fiscal invalida. Nao se valida a assinatura nem o XSD completo da NFS-e recebida.
|
|
48
|
+
|
|
49
|
+
## Cobertura e limites
|
|
50
|
+
|
|
51
|
+
Os testes usam `node:test`, certificados sinteticos e `https.request` simulado, sem acesso a SEFIN. Cobrem regimes, documentos, normalizacao, conversao, precedencias, limites, datas, obra, tributos federais, vigencia, ambiente, respostas e erros. Os payloads de [examples/payloads.ts](../examples/payloads.ts) e os exemplos de emissao de README/ENGLISH sao validados contra o XSD.
|
|
52
|
+
|
|
53
|
+
Permanecem as restricoes anteriores de nacional/exportacao e `totTrib` por regime, inclusive as limitacoes conhecidas de pais do resultado e dependencias de retencao. IBS/CBS, descontos, deducoes, prestacao por pais, representacao, conciliacao automatica e novos cenarios fiscais nao foram implementados. Nenhuma nota real foi transmitida e nenhum pacote foi publicado.
|
|
54
|
+
|
|
55
|
+
Validacao de manutencao: `npm run typecheck`, `npm test` (inclui build) e `npm pack --dry-run`.
|
package/docs/FISCAL_MATRIX.md
CHANGED
|
@@ -10,3 +10,14 @@ O SDK valida estas combinações antes de construir, assinar ou transmitir a DPS
|
|
|
10
10
|
| ME/EPP (`opSimpNac=3`) | Somente `pTotTribSN` | `indTotTrib` e percentuais federal/estadual/municipal |
|
|
11
11
|
|
|
12
12
|
O SDK usa os XSDs NFS-e Nacional v1.01 distribuídos no pacote para validar a estrutura. A matriz não substitui a verificação contábil nem uma homologação no ambiente restrito da SEFIN.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Resolucao e validacao tecnica
|
|
16
|
+
|
|
17
|
+
- A matriz usa a mesma resolucao por campo do builder: `valores` prevalece sobre os atalhos legados. `comercioExterior` prevalece integralmente sobre `comExt`.
|
|
18
|
+
- Divergencias cambiais sao avisos em `warnings`; valores explicitos continuam prevalecendo. Somente erros em `issues` bloqueiam a geracao.
|
|
19
|
+
- A carga por regime e a classificacao nacional/exterior acima permanecem inalteradas. Nao foram adicionadas dependencias fiscais de retencao ou proibicao de pais `BR` na exportacao.
|
|
20
|
+
- Valores de servico devem continuar positivos depois do arredondamento; codigos e limites numericos seguem os XSD locais. Campos opcionais vazios ou nulos sao invalidos.
|
|
21
|
+
- Intermediario estrangeiro, IBS/CBS, descontos, deducoes e prestacao por pais continuam fora do modelo suportado.
|
|
22
|
+
|
|
23
|
+
Veja [CORRECOES_EMISSAO.md](CORRECOES_EMISSAO.md) para ambiente, certificados, respostas e compatibilidade. [REGRAS_NEGOCIO_EMISSAO.md](REGRAS_NEGOCIO_EMISSAO.md) permanece o diagnostico historico anterior a essas correcoes.
|