sunat-engine-nest 2.0.4 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -0
- package/dist/gre/sunat-gre.client.d.ts +1 -0
- package/dist/gre/sunat-gre.client.js +2 -1
- package/dist/gre/sunat-gre.client.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/ose/ose.client.d.ts +20 -2
- package/dist/ose/ose.client.js +316 -27
- package/dist/ose/ose.client.js.map +1 -1
- package/dist/signer/xml-signer.service.js +4 -1
- package/dist/signer/xml-signer.service.js.map +1 -1
- package/dist/soap/sunat-soap.client.d.ts +2 -1
- package/dist/soap/sunat-soap.client.js +48 -23
- package/dist/soap/sunat-soap.client.js.map +1 -1
- package/dist/sunat-engine.module.d.ts +4 -0
- package/dist/sunat-engine.module.js.map +1 -1
- package/dist/sunat-engine.service.d.ts +1 -0
- package/dist/sunat-engine.service.js +41 -13
- package/dist/sunat-engine.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/sunat.types.d.ts +9 -1
- package/dist/validation/document.validator.d.ts +5 -0
- package/dist/validation/document.validator.js +262 -0
- package/dist/validation/document.validator.js.map +1 -0
- package/dist/validation/invoice.validator.d.ts +4 -0
- package/dist/validation/invoice.validator.js +249 -31
- package/dist/validation/invoice.validator.js.map +1 -1
- package/dist/xml/common.builder.js +50 -19
- package/dist/xml/common.builder.js.map +1 -1
- package/dist/xml/despatch.builder.d.ts +1 -0
- package/dist/xml/despatch.builder.js +217 -20
- package/dist/xml/despatch.builder.js.map +1 -1
- package/dist/xml/invoice.builder.js +4 -1
- package/dist/xml/invoice.builder.js.map +1 -1
- package/dist/xml/namespaces.js +2 -2
- package/dist/xml/namespaces.js.map +1 -1
- package/dist/xml/note.builder.js +2 -1
- package/dist/xml/note.builder.js.map +1 -1
- package/dist/xml/summary.builder.js +16 -23
- package/dist/xml/summary.builder.js.map +1 -1
- package/dist/xml/voided.builder.js +5 -5
- package/dist/xml/voided.builder.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -235,6 +235,49 @@ return this.engine.sendInvoice(payload, {
|
|
|
235
235
|
| Comunicación de Baja (RA) | `sendVoided()` | Baja de comprobantes — SOAP asíncrono |
|
|
236
236
|
| Consulta de ticket | `getTicketStatus()` | Estado de procesos asíncronos |
|
|
237
237
|
|
|
238
|
+
## Prevalidaciones (antes de guardar y antes de enviar)
|
|
239
|
+
|
|
240
|
+
Cada `send*()` ejecuta **primero** la prevalidación del payload y sólo después
|
|
241
|
+
resuelve credenciales, firma el XML y llama a SUNAT/OSE. Los errores salen como
|
|
242
|
+
`InvoiceValidationError` con `fields: string[]` (`campo: motivo`) para que el
|
|
243
|
+
consumidor responda `400` **antes** de crear registros en su base de datos.
|
|
244
|
+
|
|
245
|
+
Reglas cubiertas (Anexo N.° 8 y guías XML de SUNAT):
|
|
246
|
+
|
|
247
|
+
- Factura/Boleta/NC/ND: catálogos 01, 02, 06 y 07 (más el 51 en facturas y
|
|
248
|
+
boletas); coherencia de líneas
|
|
249
|
+
(`cantidad × valor unitario = valor de venta`, `IGV = base × 18%`,
|
|
250
|
+
`precio unitario = valor unitario × (1 + tasa)`, `totalImpuestos`), importes
|
|
251
|
+
a 2 decimales, tope de 500 líneas en RC y leyenda 1002 en operaciones
|
|
252
|
+
gratuitas.
|
|
253
|
+
- RC: catálogos 01/06/19, `sac:TotalAmount` y `TaxTotal` que cierran con la
|
|
254
|
+
línea, referencia obligatoria para NC/ND.
|
|
255
|
+
- RA: catálogo 01, serie/correlativo del comprobante y máximo 100 caracteres
|
|
256
|
+
en el motivo de baja.
|
|
257
|
+
- GRE: validación estructural más las reglas del Anexo N.° 14.
|
|
258
|
+
|
|
259
|
+
Para validar **sin enviar** (p. ej. antes de crear un placeholder de RC/RA en
|
|
260
|
+
la BD) usa los validadores exportados:
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
import {
|
|
264
|
+
validateInvoicePayload,
|
|
265
|
+
validateNotePayload,
|
|
266
|
+
validateSummaryPayload,
|
|
267
|
+
validateVoidedPayload,
|
|
268
|
+
validateDespatchPayload,
|
|
269
|
+
InvoiceValidationError,
|
|
270
|
+
} from 'sunat-engine-nest';
|
|
271
|
+
|
|
272
|
+
try {
|
|
273
|
+
validateSummaryPayload(payload);
|
|
274
|
+
} catch (err) {
|
|
275
|
+
if (err instanceof InvoiceValidationError) {
|
|
276
|
+
console.log(err.fields); // ['details[0].total: total 30 no coincide con ...', ...]
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
238
281
|
## Testing / Modo simulado
|
|
239
282
|
|
|
240
283
|
SUNAT beta rechaza `sendSummary` (RC/RA) con el RUC genérico de prueba `20000000001` — ese RUC solo funciona de forma confiable para `sendBill` (facturas y boletas). Para probar el flujo completo sin depender del entorno beta, el módulo incluye un **cliente SOAP simulado** que devuelve respuestas válidas sin realizar ninguna llamada HTTP.
|
|
@@ -44,7 +44,8 @@ let SunatGreClient = SunatGreClient_1 = class SunatGreClient {
|
|
|
44
44
|
if (!token) {
|
|
45
45
|
return { success: false, error: { code: 'AUTH_ERROR', message: 'No se pudo obtener token OAuth para GRE' } };
|
|
46
46
|
}
|
|
47
|
-
const
|
|
47
|
+
const tipoDoc = params.tipoDoc ?? '09';
|
|
48
|
+
const fileName = `${params.ruc}-${tipoDoc}-${params.serie}-${params.correlativo}`;
|
|
48
49
|
const zipBase64 = await this.createZip(`${fileName}.xml`, params.signedXml);
|
|
49
50
|
const hashZip = crypto.createHash('sha256').update(Buffer.from(zipBase64, 'base64')).digest('hex');
|
|
50
51
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sunat-gre.client.js","sourceRoot":"","sources":["../../src/gre/sunat-gre.client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,iCAA0C;AAC1C,iCAAiC;AACjC,+BAA+B;AAC/B,4CAAoD;AAuB7C,IAAM,cAAc,sBAApB,MAAM,cAAc;IAYzB,YAA0C,OAA2B;QAXpD,WAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;QAYxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAQ,GAAG,CAAC,OAAO,IAAS,kCAAkC,CAAC;QAClF,IAAI,CAAC,aAAa,GAAS,GAAG,CAAC,MAAM,IAAW,kCAAkC,CAAC;QACnF,IAAI,CAAC,eAAe,GAAO,GAAG,CAAC,QAAQ,IAAS,2CAA2C,CAAC;QAC5F,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,YAAY,IAAK,+BAA+B,CAAC;QAChF,IAAI,CAAC,aAAa,GAAS,GAAG,CAAC,MAAM,IAAW,EAAE,CAAC;QACnD,IAAI,CAAC,iBAAiB,GAAK,GAAG,CAAC,OAAO,IAAU,EAAE,CAAC;QACnD,IAAI,CAAC,iBAAiB,GAAK,GAAG,CAAC,OAAO,IAAU,EAAE,CAAC;QACnD,IAAI,CAAC,YAAY,GAAU,GAAG,CAAC,KAAK,IAAY,8BAA8B,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"sunat-gre.client.js","sourceRoot":"","sources":["../../src/gre/sunat-gre.client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type { SoapSendResult, SunatEndpointType } from './soap/sunat-soap.client
|
|
|
7
7
|
export { FakeSunatSoapClient } from './soap/fake-sunat-soap.client';
|
|
8
8
|
export { SunatGreClient } from './gre/sunat-gre.client';
|
|
9
9
|
export { OseClient } from './ose/ose.client';
|
|
10
|
-
export type { OseClientOptions } from './ose/ose.client';
|
|
10
|
+
export type { OseClientOptions, OseMode } from './ose/ose.client';
|
|
11
11
|
export { CdrParserService } from './cdr/cdr-parser.service';
|
|
12
12
|
export { DocumentPdfService } from './pdf/document-pdf.service';
|
|
13
13
|
export type { PdfFormat } from './pdf/document-pdf.service';
|
|
@@ -16,5 +16,7 @@ export { buildNoteXml } from './xml/note.builder';
|
|
|
16
16
|
export { buildDespatchXml } from './xml/despatch.builder';
|
|
17
17
|
export { buildSummaryXml } from './xml/summary.builder';
|
|
18
18
|
export { buildVoidedXml } from './xml/voided.builder';
|
|
19
|
-
export { validateInvoicePayload, validateNotePayload, InvoiceValidationError } from './validation/invoice.validator';
|
|
19
|
+
export { validateInvoicePayload, validateNotePayload, normalizeTipDocAfectado, InvoiceValidationError } from './validation/invoice.validator';
|
|
20
|
+
export { validateSummaryPayload, validateVoidedPayload, validateDespatchPayload, } from './validation/document.validator';
|
|
21
|
+
export { validarGre } from './xml/despatch.builder';
|
|
20
22
|
export type { AddressSunat, CompanySunat, ClientSunat, DetailSunat, LegendSunat, CuotaSunat, DescuentoSunat, DetraccionSunat, PercepcionSunat, InvoicePayload, NotePayload, DespatchPayload, DespatchDocReferencia, SummaryPayload, SummaryDetailSunat, VoidedPayload, VoidedDetailSunat, CompanyCredentials, EngineResponse, SunatResponse, CdrResponse, } from './types/sunat.types';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.InvoiceValidationError = exports.validateNotePayload = exports.validateInvoicePayload = exports.buildVoidedXml = exports.buildSummaryXml = exports.buildDespatchXml = exports.buildNoteXml = exports.buildInvoiceXml = exports.DocumentPdfService = exports.CdrParserService = exports.OseClient = exports.SunatGreClient = exports.FakeSunatSoapClient = exports.SunatSoapClient = exports.XmlSignerService = exports.SunatEngineService = exports.SUNAT_ENGINE_OPTIONS = exports.SunatEngineModule = void 0;
|
|
3
|
+
exports.validarGre = exports.validateDespatchPayload = exports.validateVoidedPayload = exports.validateSummaryPayload = exports.InvoiceValidationError = exports.normalizeTipDocAfectado = exports.validateNotePayload = exports.validateInvoicePayload = exports.buildVoidedXml = exports.buildSummaryXml = exports.buildDespatchXml = exports.buildNoteXml = exports.buildInvoiceXml = exports.DocumentPdfService = exports.CdrParserService = exports.OseClient = exports.SunatGreClient = exports.FakeSunatSoapClient = exports.SunatSoapClient = exports.XmlSignerService = exports.SunatEngineService = exports.SUNAT_ENGINE_OPTIONS = exports.SunatEngineModule = void 0;
|
|
4
4
|
var sunat_engine_module_1 = require("./sunat-engine.module");
|
|
5
5
|
Object.defineProperty(exports, "SunatEngineModule", { enumerable: true, get: function () { return sunat_engine_module_1.SunatEngineModule; } });
|
|
6
6
|
Object.defineProperty(exports, "SUNAT_ENGINE_OPTIONS", { enumerable: true, get: function () { return sunat_engine_module_1.SUNAT_ENGINE_OPTIONS; } });
|
|
@@ -33,5 +33,12 @@ Object.defineProperty(exports, "buildVoidedXml", { enumerable: true, get: functi
|
|
|
33
33
|
var invoice_validator_1 = require("./validation/invoice.validator");
|
|
34
34
|
Object.defineProperty(exports, "validateInvoicePayload", { enumerable: true, get: function () { return invoice_validator_1.validateInvoicePayload; } });
|
|
35
35
|
Object.defineProperty(exports, "validateNotePayload", { enumerable: true, get: function () { return invoice_validator_1.validateNotePayload; } });
|
|
36
|
+
Object.defineProperty(exports, "normalizeTipDocAfectado", { enumerable: true, get: function () { return invoice_validator_1.normalizeTipDocAfectado; } });
|
|
36
37
|
Object.defineProperty(exports, "InvoiceValidationError", { enumerable: true, get: function () { return invoice_validator_1.InvoiceValidationError; } });
|
|
38
|
+
var document_validator_1 = require("./validation/document.validator");
|
|
39
|
+
Object.defineProperty(exports, "validateSummaryPayload", { enumerable: true, get: function () { return document_validator_1.validateSummaryPayload; } });
|
|
40
|
+
Object.defineProperty(exports, "validateVoidedPayload", { enumerable: true, get: function () { return document_validator_1.validateVoidedPayload; } });
|
|
41
|
+
Object.defineProperty(exports, "validateDespatchPayload", { enumerable: true, get: function () { return document_validator_1.validateDespatchPayload; } });
|
|
42
|
+
var despatch_builder_2 = require("./xml/despatch.builder");
|
|
43
|
+
Object.defineProperty(exports, "validarGre", { enumerable: true, get: function () { return despatch_builder_2.validarGre; } });
|
|
37
44
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,6DAAgF;AAAvE,wHAAA,iBAAiB,OAAA;AAAE,2HAAA,oBAAoB,OAAA;AAIhD,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAG3B,kEAA+D;AAAtD,sHAAA,gBAAgB,OAAA;AACzB,8DAA2D;AAAlD,oHAAA,eAAe,OAAA;AAExB,wEAAoE;AAA3D,6HAAA,mBAAmB,OAAA;AAC5B,2DAAwD;AAA/C,kHAAA,cAAc,OAAA;AACvB,+CAA6C;AAApC,uGAAA,SAAS,OAAA;AAElB,+DAA4D;AAAnD,sHAAA,gBAAgB,OAAA;AACzB,mEAAgE;AAAvD,0HAAA,kBAAkB,OAAA;AAI3B,yDAAwD;AAA/C,kHAAA,eAAe,OAAA;AACxB,mDAAkD;AAAzC,4GAAA,YAAY,OAAA;AACrB,2DAA0D;AAAjD,oHAAA,gBAAgB,OAAA;AACzB,yDAAwD;AAA/C,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,gHAAA,cAAc,OAAA;AAGvB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,6DAAgF;AAAvE,wHAAA,iBAAiB,OAAA;AAAE,2HAAA,oBAAoB,OAAA;AAIhD,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAG3B,kEAA+D;AAAtD,sHAAA,gBAAgB,OAAA;AACzB,8DAA2D;AAAlD,oHAAA,eAAe,OAAA;AAExB,wEAAoE;AAA3D,6HAAA,mBAAmB,OAAA;AAC5B,2DAAwD;AAA/C,kHAAA,cAAc,OAAA;AACvB,+CAA6C;AAApC,uGAAA,SAAS,OAAA;AAElB,+DAA4D;AAAnD,sHAAA,gBAAgB,OAAA;AACzB,mEAAgE;AAAvD,0HAAA,kBAAkB,OAAA;AAI3B,yDAAwD;AAA/C,kHAAA,eAAe,OAAA;AACxB,mDAAkD;AAAzC,4GAAA,YAAY,OAAA;AACrB,2DAA0D;AAAjD,oHAAA,gBAAgB,OAAA;AACzB,yDAAwD;AAA/C,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,gHAAA,cAAc,OAAA;AAGvB,oEAA8I;AAArI,2HAAA,sBAAsB,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAAE,4HAAA,uBAAuB,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AACrG,sEAIyC;AAHvC,4HAAA,sBAAsB,OAAA;AACtB,2HAAA,qBAAqB,OAAA;AACrB,6HAAA,uBAAuB,OAAA;AAEzB,2DAAoD;AAA3C,8GAAA,UAAU,OAAA"}
|
package/dist/ose/ose.client.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { SoapSendResult } from '../soap/sunat-soap.client';
|
|
2
|
+
export type OseMode = 'auto' | 'soap' | 'rest';
|
|
2
3
|
export interface OseClientOptions {
|
|
3
4
|
url: string;
|
|
5
|
+
mode?: OseMode;
|
|
4
6
|
token?: string;
|
|
5
7
|
username?: string;
|
|
6
8
|
password?: string;
|
|
9
|
+
ruc?: string;
|
|
10
|
+
solUser?: string;
|
|
11
|
+
solPass?: string;
|
|
7
12
|
}
|
|
8
13
|
export declare class OseClient {
|
|
9
14
|
private readonly logger;
|
|
@@ -17,8 +22,21 @@ export declare class OseClient {
|
|
|
17
22
|
xmlSigned: string;
|
|
18
23
|
ose: OseClientOptions;
|
|
19
24
|
}): Promise<SoapSendResult>;
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
getStatus(params: {
|
|
26
|
+
ticket: string;
|
|
27
|
+
ose: OseClientOptions;
|
|
28
|
+
}): Promise<SoapSendResult>;
|
|
29
|
+
private postComprobante;
|
|
30
|
+
private useSoap;
|
|
31
|
+
private soapHeaders;
|
|
32
|
+
private buildSoapAuth;
|
|
33
|
+
private buildRestAuth;
|
|
34
|
+
private buildSoapEnvelope;
|
|
35
|
+
private soapSecurity;
|
|
36
|
+
private escapeXml;
|
|
37
|
+
private parseSoapResponse;
|
|
38
|
+
private parseSoapFault;
|
|
39
|
+
private parseJsonResponse;
|
|
22
40
|
private handleError;
|
|
23
41
|
private createZip;
|
|
24
42
|
}
|
package/dist/ose/ose.client.js
CHANGED
|
@@ -11,45 +11,305 @@ exports.OseClient = void 0;
|
|
|
11
11
|
const common_1 = require("@nestjs/common");
|
|
12
12
|
const axios_1 = require("axios");
|
|
13
13
|
const JSZip = require("jszip");
|
|
14
|
+
const OSE_ERROR_MESSAGES = {
|
|
15
|
+
'0100': 'El sistema no puede responder su solicitud. Intente nuevamente o comuníquese con su administrador.',
|
|
16
|
+
'0101': 'El encabezado de seguridad es incorrecto. Verifique las credenciales de acceso al OSE.',
|
|
17
|
+
'0102': 'Usuario o contraseña incorrectos.',
|
|
18
|
+
'0103': 'El usuario ingresado no existe.',
|
|
19
|
+
'0104': 'La clave ingresada es incorrecta.',
|
|
20
|
+
'0105': 'El usuario no está activo.',
|
|
21
|
+
'0106': 'El usuario no es válido.',
|
|
22
|
+
'0111': 'No tiene el perfil para enviar comprobantes electrónicos.',
|
|
23
|
+
'0127': 'Ticket no encontrado. Verifique el número de ticket.',
|
|
24
|
+
'0151': 'Nombre de archivo ZIP no válido. Verifique el formato RUC-TIPO-SERIE-CORRELATIVO.',
|
|
25
|
+
'0155': 'El archivo ZIP está vacío.',
|
|
26
|
+
'0156': 'El archivo ZIP está corrupto o no se pudo abrir.',
|
|
27
|
+
'0157': 'El ZIP no contiene comprobantes electrónicos (CPE).',
|
|
28
|
+
'0250': 'Error al descomprimir el archivo ZIP enviado.',
|
|
29
|
+
'0300': 'XML sin elemento raíz válido.',
|
|
30
|
+
'0304': 'No se encontró el esquema XSD del comprobante.',
|
|
31
|
+
'0305': 'El comprobante no se pudo procesar (XML inválido).',
|
|
32
|
+
'0306': 'No se pudo parsear el XML del comprobante.',
|
|
33
|
+
'2074': 'UBLVersionID - La versión del UBL no es correcta. Los resúmenes (RC/RA) deben enviarse con UBL 2.0.',
|
|
34
|
+
'2104': 'El número de RUC del emisor no existe.',
|
|
35
|
+
'2105': 'El comprobante a dar de baja no está registrado en SUNAT. Verifique serie y correlativo de la factura referenciada (ej: F001-00000001).',
|
|
36
|
+
'2119': 'El documento modificado en la Nota de Crédito no está registrado. Verifique numDocAfectado.',
|
|
37
|
+
'2120': 'El documento modificado en la Nota de Crédito se encuentra de baja.',
|
|
38
|
+
'2121': 'El documento modificado en la Nota de Crédito está registrado como rechazado.',
|
|
39
|
+
'2204': 'El tipo de documento modificado por la Nota de Débito debe ser factura electrónica o ticket.',
|
|
40
|
+
'2205': 'La serie o número del documento modificado por la Nota de Débito no cumple el formato. Verifique numDocAfectado.',
|
|
41
|
+
'2207': 'El documento modificado en la Nota de Débito se encuentra de baja.',
|
|
42
|
+
'2208': 'El documento modificado en la Nota de Débito está registrado como rechazado.',
|
|
43
|
+
'2209': 'El documento modificado en la Nota de Débito no está registrado. Verifique numDocAfectado.',
|
|
44
|
+
'2334': 'El XML fue alterado o la firma no coincide.',
|
|
45
|
+
'2987': 'El comprobante ya fue informado y se encuentra anulado o rechazado. No se puede volver a anular (RC) ni modificar; verifique el estado previo del comprobante.',
|
|
46
|
+
'1032': 'El comprobante ya está informado y se encuentra con estado anulado o rechazado. No se puede volver a informar ni anular.',
|
|
47
|
+
'2106': 'El comprobante a dar de baja ya se encuentra en estado de baja. La anulación (RC/RA) ya fue informada previamente.',
|
|
48
|
+
'2663': 'El documento indicado no existe y no puede ser modificado. En la RC, serie_nro debe coincidir con una boleta ya aceptada (ej: B001-00000001) y el comprobante debe haberse emitido previamente.',
|
|
49
|
+
};
|
|
50
|
+
function mapOseError(code, message) {
|
|
51
|
+
const msg = (message ?? '').trim();
|
|
52
|
+
const cd = (code ?? '').trim();
|
|
53
|
+
const key = /^\d{4}$/.test(msg)
|
|
54
|
+
? msg
|
|
55
|
+
: /^\d{4}$/.test(cd)
|
|
56
|
+
? cd
|
|
57
|
+
: (msg.match(/\b\d{4}\b/)?.[0] ?? cd.match(/\b\d{4}\b/)?.[0]);
|
|
58
|
+
const friendly = key ? OSE_ERROR_MESSAGES[key] : undefined;
|
|
59
|
+
if (!friendly) {
|
|
60
|
+
if (key && (msg === key || !msg || msg === cd)) {
|
|
61
|
+
return {
|
|
62
|
+
code: key,
|
|
63
|
+
message: `Error OSE ${key}. Consulte la documentación del operador.`,
|
|
64
|
+
rawCode: code,
|
|
65
|
+
rawMessage: message,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return { code, message: message ?? 'Error OSE desconocido' };
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
code: key,
|
|
72
|
+
message: friendly,
|
|
73
|
+
rawCode: code,
|
|
74
|
+
rawMessage: message,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
14
77
|
let OseClient = OseClient_1 = class OseClient {
|
|
15
78
|
constructor() {
|
|
16
79
|
this.logger = new common_1.Logger(OseClient_1.name);
|
|
17
80
|
}
|
|
18
81
|
async sendBill(params) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
82
|
+
return this.postComprobante('sendBill', params);
|
|
83
|
+
}
|
|
84
|
+
async sendSummary(params) {
|
|
85
|
+
return this.postComprobante('sendSummary', params);
|
|
86
|
+
}
|
|
87
|
+
async getStatus(params) {
|
|
88
|
+
const ose = params.ose;
|
|
89
|
+
if (!this.useSoap(ose)) {
|
|
90
|
+
return {
|
|
91
|
+
success: false,
|
|
92
|
+
error: {
|
|
93
|
+
code: 'UNSUPPORTED',
|
|
94
|
+
message: 'getStatus solo está soportado en modo SOAP para OSE',
|
|
25
95
|
},
|
|
26
|
-
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const envelope = this.buildSoapEnvelope('getStatus', [['ticket', params.ticket]], this.soapSecurity(ose));
|
|
99
|
+
try {
|
|
100
|
+
const response = await axios_1.default.post(ose.url, envelope, {
|
|
101
|
+
headers: this.soapHeaders(ose),
|
|
102
|
+
timeout: 30_000,
|
|
27
103
|
});
|
|
28
|
-
return this.
|
|
104
|
+
return this.parseSoapResponse(String(response.data ?? ''), 'getStatus');
|
|
29
105
|
}
|
|
30
106
|
catch (err) {
|
|
31
107
|
return this.handleError(err);
|
|
32
108
|
}
|
|
33
109
|
}
|
|
34
|
-
async
|
|
110
|
+
async postComprobante(operation, params) {
|
|
111
|
+
const ose = params.ose;
|
|
112
|
+
if (!ose?.url) {
|
|
113
|
+
return {
|
|
114
|
+
success: false,
|
|
115
|
+
error: { code: 'OSE_CONFIG', message: 'OSE_ENDPOINT no configurado' },
|
|
116
|
+
};
|
|
117
|
+
}
|
|
35
118
|
const contentFile = await this.createZip(params.fileName, params.xmlSigned);
|
|
119
|
+
const fileName = /\.zip$/i.test(params.fileName) ? params.fileName : `${params.fileName}.zip`;
|
|
120
|
+
if (this.useSoap(ose)) {
|
|
121
|
+
const envelope = this.buildSoapEnvelope(operation, [
|
|
122
|
+
['fileName', fileName],
|
|
123
|
+
['contentFile', contentFile],
|
|
124
|
+
], this.soapSecurity(ose));
|
|
125
|
+
try {
|
|
126
|
+
const response = await axios_1.default.post(ose.url, envelope, {
|
|
127
|
+
headers: this.soapHeaders(ose),
|
|
128
|
+
timeout: 60_000,
|
|
129
|
+
});
|
|
130
|
+
return this.parseSoapResponse(String(response.data ?? ''), operation);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
return this.handleError(err);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
36
136
|
try {
|
|
37
|
-
const response = await axios_1.default.post(
|
|
137
|
+
const response = await axios_1.default.post(ose.url, { fileName, contentFile }, {
|
|
38
138
|
headers: {
|
|
39
139
|
'Content-Type': 'application/json',
|
|
40
|
-
|
|
140
|
+
Authorization: this.buildRestAuth(ose),
|
|
41
141
|
},
|
|
42
142
|
timeout: 60_000,
|
|
43
143
|
});
|
|
44
|
-
return this.
|
|
144
|
+
return this.parseJsonResponse(response.data);
|
|
45
145
|
}
|
|
46
146
|
catch (err) {
|
|
47
147
|
return this.handleError(err);
|
|
48
148
|
}
|
|
49
149
|
}
|
|
50
|
-
|
|
150
|
+
useSoap(ose) {
|
|
151
|
+
const mode = (ose.mode ?? 'auto').toLowerCase();
|
|
152
|
+
if (mode === 'soap')
|
|
153
|
+
return true;
|
|
154
|
+
if (mode === 'rest')
|
|
155
|
+
return false;
|
|
156
|
+
return /billService/i.test(ose.url ?? '');
|
|
157
|
+
}
|
|
158
|
+
soapHeaders(ose) {
|
|
159
|
+
return {
|
|
160
|
+
'Content-Type': 'text/xml;charset=UTF-8',
|
|
161
|
+
SOAPAction: '',
|
|
162
|
+
Authorization: `Basic ${this.buildSoapAuth(ose)}`,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
buildSoapAuth(ose) {
|
|
166
|
+
if (ose.ruc && ose.solUser && ose.solPass) {
|
|
167
|
+
return Buffer.from(`${ose.ruc}${ose.solUser}:${ose.solPass}`).toString('base64');
|
|
168
|
+
}
|
|
169
|
+
if (ose.username && ose.password) {
|
|
170
|
+
return Buffer.from(`${ose.username}:${ose.password}`).toString('base64');
|
|
171
|
+
}
|
|
172
|
+
return '';
|
|
173
|
+
}
|
|
174
|
+
buildRestAuth(ose) {
|
|
175
|
+
if (ose.token)
|
|
176
|
+
return `Bearer ${ose.token}`;
|
|
177
|
+
if (ose.username && ose.password) {
|
|
178
|
+
return `Basic ${Buffer.from(`${ose.username}:${ose.password}`).toString('base64')}`;
|
|
179
|
+
}
|
|
180
|
+
if (ose.ruc && ose.solUser && ose.solPass) {
|
|
181
|
+
return `Basic ${Buffer.from(`${ose.ruc}${ose.solUser}:${ose.solPass}`).toString('base64')}`;
|
|
182
|
+
}
|
|
183
|
+
return '';
|
|
184
|
+
}
|
|
185
|
+
buildSoapEnvelope(operation, fields, security) {
|
|
186
|
+
const body = fields
|
|
187
|
+
.map(([tag, value]) => ` <ser:${tag}>${this.escapeXml(value)}</ser:${tag}>`)
|
|
188
|
+
.join('\n');
|
|
189
|
+
const header = security
|
|
190
|
+
? ` <SOAP-ENV:Header>
|
|
191
|
+
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
|
|
192
|
+
<wsse:UsernameToken>
|
|
193
|
+
<wsse:Username>${this.escapeXml(security.user)}</wsse:Username>
|
|
194
|
+
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">${this.escapeXml(security.pass)}</wsse:Password>
|
|
195
|
+
</wsse:UsernameToken>
|
|
196
|
+
</wsse:Security>
|
|
197
|
+
</SOAP-ENV:Header>`
|
|
198
|
+
: ' <SOAP-ENV:Header/>';
|
|
199
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
200
|
+
<SOAP-ENV:Envelope
|
|
201
|
+
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
|
|
202
|
+
xmlns:ser="http://service.sunat.gob.pe"
|
|
203
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
204
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
205
|
+
${header}
|
|
206
|
+
<SOAP-ENV:Body>
|
|
207
|
+
<ser:${operation}>
|
|
208
|
+
${body}
|
|
209
|
+
</ser:${operation}>
|
|
210
|
+
</SOAP-ENV:Body>
|
|
211
|
+
</SOAP-ENV:Envelope>`;
|
|
212
|
+
}
|
|
213
|
+
soapSecurity(ose) {
|
|
214
|
+
if (ose.ruc && ose.solUser && ose.solPass) {
|
|
215
|
+
return { user: `${ose.ruc}${ose.solUser}`, pass: ose.solPass };
|
|
216
|
+
}
|
|
217
|
+
if (ose.username && ose.password) {
|
|
218
|
+
return { user: ose.username, pass: ose.password };
|
|
219
|
+
}
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
escapeXml(str) {
|
|
223
|
+
return String(str)
|
|
224
|
+
.replace(/&/g, '&')
|
|
225
|
+
.replace(/</g, '<')
|
|
226
|
+
.replace(/>/g, '>')
|
|
227
|
+
.replace(/"/g, '"')
|
|
228
|
+
.replace(/'/g, ''');
|
|
229
|
+
}
|
|
230
|
+
parseSoapResponse(soapXml, operation) {
|
|
231
|
+
if (!soapXml || !soapXml.includes('<')) {
|
|
232
|
+
return {
|
|
233
|
+
success: false,
|
|
234
|
+
error: {
|
|
235
|
+
code: 'EMPTY_RESPONSE',
|
|
236
|
+
message: 'El OSE no devolvió respuesta SOAP',
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
if (operation === 'sendBill') {
|
|
241
|
+
const cdrMatch = soapXml.match(/<applicationResponse[^>]*>([\s\S]*?)<\/applicationResponse>/i);
|
|
242
|
+
if (cdrMatch?.[1]) {
|
|
243
|
+
return { success: true, cdrZipBase64: cdrMatch[1].trim() };
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (operation === 'sendSummary') {
|
|
247
|
+
const ticketMatch = soapXml.match(/<ticket[^>]*>([\s\S]*?)<\/ticket>/i);
|
|
248
|
+
if (ticketMatch?.[1]) {
|
|
249
|
+
return { success: true, ticket: ticketMatch[1].trim() };
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (operation === 'getStatus') {
|
|
253
|
+
const statusCode = soapXml.match(/<statusCode[^>]*>([\s\S]*?)<\/statusCode>/i)?.[1]?.trim();
|
|
254
|
+
const content = soapXml.match(/<content[^>]*>([\s\S]*?)<\/content>/i)?.[1];
|
|
255
|
+
if (statusCode === '0' && content) {
|
|
256
|
+
return { success: true, cdrZipBase64: content.trim() };
|
|
257
|
+
}
|
|
258
|
+
if (statusCode === '98') {
|
|
259
|
+
return {
|
|
260
|
+
success: false,
|
|
261
|
+
error: { code: '98', message: 'Ticket en proceso, vuelva a intentar' },
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
if (statusCode) {
|
|
265
|
+
return {
|
|
266
|
+
success: false,
|
|
267
|
+
error: {
|
|
268
|
+
code: statusCode,
|
|
269
|
+
message: content?.trim() || `Estado ${statusCode} reportado por el OSE`,
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return this.parseSoapFault(soapXml);
|
|
275
|
+
}
|
|
276
|
+
parseSoapFault(soapXml) {
|
|
277
|
+
const faultString = soapXml.match(/<faultstring[^>]*>([\s\S]*?)<\/faultstring>/i)?.[1];
|
|
278
|
+
const faultCode = soapXml.match(/<faultcode[^>]*>([\s\S]*?)<\/faultcode>/i)?.[1];
|
|
279
|
+
const detail = soapXml.match(/<detail[^>]*>([\s\S]*?)<\/detail>/i)?.[1];
|
|
280
|
+
if (!faultString && !faultCode && /<!DOCTYPE html|<html[\s>]/i.test(soapXml)) {
|
|
281
|
+
return {
|
|
282
|
+
success: false,
|
|
283
|
+
error: {
|
|
284
|
+
code: 'OSE_HTTP_ERROR',
|
|
285
|
+
message: 'El OSE no devolvió SOAP (respuesta HTML/HTTP). Verifique que OSE_ENDPOINT esté disponible.',
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
const message = faultString?.trim() ||
|
|
290
|
+
detail?.replace(/<[^>]+>/g, ' ').trim() ||
|
|
291
|
+
'Error SOAP desconocido';
|
|
292
|
+
const mapped = mapOseError(faultCode?.trim(), message);
|
|
293
|
+
return {
|
|
294
|
+
success: false,
|
|
295
|
+
error: {
|
|
296
|
+
code: mapped.code ?? faultCode?.trim() ?? 'SOAP_FAULT',
|
|
297
|
+
message: mapped.message,
|
|
298
|
+
...(mapped.rawCode || mapped.rawMessage
|
|
299
|
+
? { rawCode: mapped.rawCode, rawMessage: mapped.rawMessage }
|
|
300
|
+
: {}),
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
parseJsonResponse(data) {
|
|
51
305
|
if (!data) {
|
|
52
|
-
return {
|
|
306
|
+
return {
|
|
307
|
+
success: false,
|
|
308
|
+
error: {
|
|
309
|
+
code: 'EMPTY_RESPONSE',
|
|
310
|
+
message: 'El OSE no devolvió respuesta',
|
|
311
|
+
},
|
|
312
|
+
};
|
|
53
313
|
}
|
|
54
314
|
const cdrZip = data.cdrZip || data.cdr || data.applicationResponse || data.contentFile || undefined;
|
|
55
315
|
const ticket = data.ticket ?? data.numTicket;
|
|
@@ -68,23 +328,52 @@ let OseClient = OseClient_1 = class OseClient {
|
|
|
68
328
|
}
|
|
69
329
|
return { success: true, cdrZipBase64: cdrZip, ticket };
|
|
70
330
|
}
|
|
71
|
-
buildAuth(ose) {
|
|
72
|
-
if (ose.token)
|
|
73
|
-
return `Bearer ${ose.token}`;
|
|
74
|
-
if (ose.username && ose.password) {
|
|
75
|
-
return `Basic ${Buffer.from(`${ose.username}:${ose.password}`).toString('base64')}`;
|
|
76
|
-
}
|
|
77
|
-
return '';
|
|
78
|
-
}
|
|
79
331
|
handleError(err) {
|
|
80
332
|
const data = err.response?.data;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
333
|
+
const status = err.response?.status;
|
|
334
|
+
if (typeof data === 'string' && data.includes('faultstring')) {
|
|
335
|
+
return this.parseSoapFault(data);
|
|
336
|
+
}
|
|
337
|
+
if (data && typeof data === 'object') {
|
|
338
|
+
const rawMsg = data.message ??
|
|
339
|
+
data.description ??
|
|
340
|
+
data.descripcion ??
|
|
341
|
+
JSON.stringify(data);
|
|
342
|
+
const rawCode = String(data.code ?? data.codigoRespuesta ?? status ?? 'OSE_ERROR');
|
|
343
|
+
const mapped = mapOseError(rawCode, rawMsg);
|
|
344
|
+
return {
|
|
345
|
+
success: false,
|
|
346
|
+
error: {
|
|
347
|
+
code: mapped.code ?? rawCode,
|
|
348
|
+
message: mapped.message,
|
|
349
|
+
...(mapped.rawCode || mapped.rawMessage
|
|
350
|
+
? { rawCode: mapped.rawCode, rawMessage: mapped.rawMessage }
|
|
351
|
+
: {}),
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
if (typeof data === 'string' && data.includes('<')) {
|
|
356
|
+
return this.parseSoapFault(data);
|
|
357
|
+
}
|
|
358
|
+
if (typeof data === 'string' && data.trim()) {
|
|
359
|
+
const snippet = data.replace(/\s+/g, ' ').slice(0, 160);
|
|
360
|
+
this.logger.error(`OSE HTTP ${status ?? '?'} no-SOAP: ${snippet}`);
|
|
361
|
+
return {
|
|
362
|
+
success: false,
|
|
363
|
+
error: {
|
|
364
|
+
code: status != null ? String(status) : 'OSE_HTTP_ERROR',
|
|
365
|
+
message: `El OSE no devolvió SOAP (HTTP ${status ?? '?'}). Verifique OSE_ENDPOINT. Respuesta: ${snippet}`,
|
|
366
|
+
},
|
|
367
|
+
};
|
|
85
368
|
}
|
|
86
369
|
this.logger.error(`Error OSE: ${err.message}`);
|
|
87
|
-
return {
|
|
370
|
+
return {
|
|
371
|
+
success: false,
|
|
372
|
+
error: {
|
|
373
|
+
code: String(status ?? 'NETWORK_ERROR'),
|
|
374
|
+
message: err.message,
|
|
375
|
+
},
|
|
376
|
+
};
|
|
88
377
|
}
|
|
89
378
|
async createZip(fileName, xmlContent) {
|
|
90
379
|
const zip = new JSZip();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ose.client.js","sourceRoot":"","sources":["../../src/ose/ose.client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ose.client.js","sourceRoot":"","sources":["../../src/ose/ose.client.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,7 +71,10 @@ let XmlSignerService = XmlSignerService_1 = class XmlSignerService {
|
|
|
71
71
|
action: 'append',
|
|
72
72
|
},
|
|
73
73
|
});
|
|
74
|
-
|
|
74
|
+
let signedXml = sig.getSignedXml();
|
|
75
|
+
if (!/<ds:Signature[^>]*\sId=/.test(signedXml)) {
|
|
76
|
+
signedXml = signedXml.replace('<ds:Signature', '<ds:Signature Id="SignatureSP"');
|
|
77
|
+
}
|
|
75
78
|
if (signedXml.includes('<ds:X509Certificate>') || signedXml.includes('<X509Certificate>')) {
|
|
76
79
|
return signedXml;
|
|
77
80
|
}
|