UNPKG

envio-comprobantes-sri

Version:

Envia comprobantes electronicos al SRI (Ecuador). Recibe un objeto JSON. Lo convierte a XML, lo firma, lo envía al servicio web del SRI y devuelve la respuesta.

439 lines (438 loc) 18.8 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DetallesComprobanteBase = exports.DetalleComprobanteBase = exports.Pago = exports.DetallesAdicionales = exports.ImpuestosDetalleComprobante = exports.Impuesto = exports.InfoTributaria = exports.InfoComprobanteBase = void 0; const class_validator_1 = require("class-validator"); const class_transformer_1 = require("class-transformer"); const TablasSRI_1 = require("./Utils/TablasSRI"); const ValidationHelpers_1 = require("./Utils/ValidationHelpers"); class InfoComprobanteBase { fechaEmision; dirEstablecimiento; contribuyenteEspecial; obligadoContabilidad; } __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsString)() /** dd/mm/yyyy format */ , (0, class_validator_1.Matches)(ValidationHelpers_1.REGEXP_ddMMyyyy, { message: "El formato de `fechaEmision` debe ser dd/mm/yyyy" }), __metadata("design:type", String) ], InfoComprobanteBase.prototype, "fechaEmision", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsString)(), __metadata("design:type", String) ], InfoComprobanteBase.prototype, "dirEstablecimiento", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsNumber)({ maxDecimalPlaces: 0, allowInfinity: false, allowNaN: false }), (0, class_validator_1.Min)(100), (0, class_validator_1.Max)(99999), __metadata("design:type", Number) ], InfoComprobanteBase.prototype, "contribuyenteEspecial", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsIn)(["SI", "NO"]), __metadata("design:type", String) ], InfoComprobanteBase.prototype, "obligadoContabilidad", void 0); exports.InfoComprobanteBase = InfoComprobanteBase; class InfoTributaria { ambiente; tipoEmision; razonSocial; nombreComercial; ruc; claveAcceso; codDoc; estab; ptoEmi; secuencial; dirMatriz; agenteRetencion; contribuyenteRimpe; } __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsEnum)(TablasSRI_1.TablaAmbiente), __metadata("design:type", Number) ], InfoTributaria.prototype, "ambiente", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsIn)([1]), __metadata("design:type", Number) ], InfoTributaria.prototype, "tipoEmision", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsString)(), (0, class_validator_1.IsNotEmpty)(), __metadata("design:type", String) ], InfoTributaria.prototype, "razonSocial", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsString)(), (0, class_validator_1.IsNotEmpty)(), __metadata("design:type", String) ], InfoTributaria.prototype, "nombreComercial", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsString)(), (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.MinLength)(13), (0, class_validator_1.MaxLength)(13), (0, class_validator_1.Matches)(/^\d{13}$/, { message: 'El RUC debe tener 13 dígitos' }), __metadata("design:type", String) ], InfoTributaria.prototype, "ruc", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsString)(), (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.Matches)(/^\d{49}$/, { message: 'La clave de acceso debe tener 39 digitos' }), __metadata("design:type", String) ], InfoTributaria.prototype, "claveAcceso", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsEnum)(TablasSRI_1.TablaCodigoDocumento), __metadata("design:type", String) ], InfoTributaria.prototype, "codDoc", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsString)(), (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.Matches)(/^\d{3}$/, { message: 'El establecimiento debe tener 3 digitos' }), __metadata("design:type", String) ], InfoTributaria.prototype, "estab", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsString)(), (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.Matches)(/^\d{3}$/, { message: 'El punto de emision debe tener 3 digitos' }), __metadata("design:type", String) ], InfoTributaria.prototype, "ptoEmi", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.Matches)(/^\d{9}$/, { message: 'El secuencial de factura debe tener 9 digitos' }), __metadata("design:type", String) ], InfoTributaria.prototype, "secuencial", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsString)(), (0, class_validator_1.MinLength)(1), (0, class_validator_1.MaxLength)(300), __metadata("design:type", String) ], InfoTributaria.prototype, "dirMatriz", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsString)(), (0, class_validator_1.Matches)(/^\d{1,8}$/, { message: 'El agenteRetencion debe tener entre 1 y 8 dígitos' }), __metadata("design:type", String) ], InfoTributaria.prototype, "agenteRetencion", void 0); __decorate([ (0, class_transformer_1.Expose)(), (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsIn)(["CONTRIBUYENTE RÉGIMEN RIMPE", "CONTRIBUYENTE NEGOCIO POPULAR - RÉGIMEN RIMPE"]), __metadata("design:type", String) ], InfoTributaria.prototype, "contribuyenteRimpe", void 0); exports.InfoTributaria = InfoTributaria; class Impuesto { codigo; codigoPorcentaje; baseImponible; valor; } __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsEnum)(TablasSRI_1.TablaImpuesto), __metadata("design:type", Number) ], Impuesto.prototype, "codigo", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsIn)([...Object.values(TablasSRI_1.TablaPorcentajeIVA), ...Object.values(TablasSRI_1.tablaPorcentajeICE)]), __metadata("design:type", Number) ], Impuesto.prototype, "codigoPorcentaje", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_transformer_1.Transform)(ValidationHelpers_1.Transform2Places), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), (0, class_validator_1.IsNumber)(ValidationHelpers_1.VALIDATION_CURRENCY_NUMBER), (0, class_validator_1.Min)(0.00), (0, class_validator_1.Max)(ValidationHelpers_1.MAX_CURRENCY_VALUE), __metadata("design:type", Number) ], Impuesto.prototype, "baseImponible", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_transformer_1.Transform)(ValidationHelpers_1.Transform2Places), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), (0, class_validator_1.IsNumber)(ValidationHelpers_1.VALIDATION_CURRENCY_NUMBER), (0, class_validator_1.Min)(0.00), (0, class_validator_1.Max)(ValidationHelpers_1.MAX_CURRENCY_VALUE), __metadata("design:type", Number) ], Impuesto.prototype, "valor", void 0); exports.Impuesto = Impuesto; class ImpuestoDetalleComprobante { codigo; codigoPorcentaje; tarifa; baseImponible; valor; } __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsEnum)(TablasSRI_1.TablaImpuesto), __metadata("design:type", Number) ], ImpuestoDetalleComprobante.prototype, "codigo", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsIn)([...Object.values(TablasSRI_1.TablaPorcentajeIVA), ...Object.values(TablasSRI_1.tablaPorcentajeICE)]), __metadata("design:type", Number) ], ImpuestoDetalleComprobante.prototype, "codigoPorcentaje", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsNumber)({ maxDecimalPlaces: 2, allowInfinity: false, allowNaN: false }), (0, class_validator_1.Max)(999.99), (0, class_transformer_1.Transform)(ValidationHelpers_1.Transform2Places), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), __metadata("design:type", Number) ], ImpuestoDetalleComprobante.prototype, "tarifa", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsNumber)(ValidationHelpers_1.VALIDATION_CURRENCY_NUMBER), (0, class_validator_1.Min)(0), (0, class_validator_1.Max)(ValidationHelpers_1.MAX_CURRENCY_VALUE), (0, class_transformer_1.Transform)(ValidationHelpers_1.Transform2Places), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), __metadata("design:type", Number) ], ImpuestoDetalleComprobante.prototype, "baseImponible", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsNumber)(ValidationHelpers_1.VALIDATION_CURRENCY_NUMBER), (0, class_validator_1.Min)(0.00), (0, class_validator_1.Max)(ValidationHelpers_1.MAX_CURRENCY_VALUE), (0, class_transformer_1.Transform)(ValidationHelpers_1.Transform2Places), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), __metadata("design:type", Number) ], ImpuestoDetalleComprobante.prototype, "valor", void 0); class ImpuestosDetalleComprobante { impuesto; } __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsArray)(), (0, class_validator_1.ArrayNotEmpty)(), (0, class_transformer_1.Type)(() => ImpuestoDetalleComprobante), (0, class_validator_1.ValidateNested)({ each: true }), __metadata("design:type", Array) ], ImpuestosDetalleComprobante.prototype, "impuesto", void 0); exports.ImpuestosDetalleComprobante = ImpuestosDetalleComprobante; class DetalleAdicional { _nombre; _valor; } __decorate([ (0, class_validator_1.IsString)(), (0, class_validator_1.MaxLength)(300), __metadata("design:type", String) ], DetalleAdicional.prototype, "_nombre", void 0); __decorate([ (0, class_validator_1.IsString)(), (0, class_validator_1.MaxLength)(300), __metadata("design:type", String) ], DetalleAdicional.prototype, "_valor", void 0); class DetallesAdicionales { detAdicional; } __decorate([ (0, class_validator_1.IsArray)(), (0, class_transformer_1.Type)(() => DetalleAdicional), (0, class_validator_1.ValidateNested)({ each: true }), __metadata("design:type", Array) ], DetallesAdicionales.prototype, "detAdicional", void 0); exports.DetallesAdicionales = DetallesAdicionales; class CampoAdicional { _nombre; __text; } __decorate([ (0, class_validator_1.IsString)(), (0, class_validator_1.MaxLength)(300), __metadata("design:type", String) ], CampoAdicional.prototype, "_nombre", void 0); __decorate([ (0, class_validator_1.IsString)(), (0, class_validator_1.MaxLength)(300), __metadata("design:type", String) ], CampoAdicional.prototype, "__text", void 0); class InfoAdicional { campoAdicional; } __decorate([ (0, class_validator_1.IsArray)(), (0, class_transformer_1.Type)(() => CampoAdicional), (0, class_validator_1.ValidateNested)({ each: true }), __metadata("design:type", Array) ], InfoAdicional.prototype, "campoAdicional", void 0); class Pago { formaPago; total; plazo; unidadTiempo; } __decorate([ (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.IsEnum)(TablasSRI_1.TablaFormasPago), __metadata("design:type", String) ], Pago.prototype, "formaPago", void 0); __decorate([ (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.Min)(0.001), (0, class_validator_1.Max)(ValidationHelpers_1.MAX_CURRENCY_VALUE), (0, class_validator_1.IsNumber)(ValidationHelpers_1.VALIDATION_CURRENCY_NUMBER), (0, class_transformer_1.Transform)(ValidationHelpers_1.Transform2Places), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), __metadata("design:type", Number) ], Pago.prototype, "total", void 0); __decorate([ (0, class_validator_1.IsOptional)(), (0, class_validator_1.Min)(1), (0, class_validator_1.Max)(99999999999999), (0, class_validator_1.IsNumber)({ maxDecimalPlaces: 0, allowInfinity: false, allowNaN: false }), (0, class_transformer_1.Transform)(params => typeof params.value === typeof 0 ? +params.value.toFixed(0) : params.value), __metadata("design:type", Number) ], Pago.prototype, "plazo", void 0); __decorate([ (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsString)(), (0, class_validator_1.MinLength)(1), (0, class_validator_1.MaxLength)(10), __metadata("design:type", String) ], Pago.prototype, "unidadTiempo", void 0); exports.Pago = Pago; class DetalleComprobanteBase { codigoPrincipal; codigoAuxiliar; descripcion; cantidad; precioUnitario; descuento; precioTotalSinImpuesto; detallesAdicionales; impuestos; } __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsString)(), (0, class_validator_1.MaxLength)(25), __metadata("design:type", String) ], DetalleComprobanteBase.prototype, "codigoPrincipal", void 0); __decorate([ (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsString)(), (0, class_validator_1.MaxLength)(25), __metadata("design:type", String) ], DetalleComprobanteBase.prototype, "codigoAuxiliar", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsString)(), (0, class_validator_1.MaxLength)(300), __metadata("design:type", String) ], DetalleComprobanteBase.prototype, "descripcion", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsNumber)({ maxDecimalPlaces: 6, allowInfinity: false, allowNaN: false }), (0, class_validator_1.Min)(0.000001), (0, class_validator_1.Max)(99999999999.999999), (0, class_transformer_1.Transform)(param => (typeof param.value === typeof 1) ? +param.value.toFixed(6) : param.value), __metadata("design:type", Number) ], DetalleComprobanteBase.prototype, "cantidad", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsNumber)({ maxDecimalPlaces: 6, allowInfinity: false, allowNaN: false }), (0, class_validator_1.Min)(0.00), (0, class_validator_1.Max)(99999999999.999999), (0, class_transformer_1.Transform)(param => (typeof param.value === typeof 1) ? +param.value.toFixed(6) : param.value), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), __metadata("design:type", Number) ], DetalleComprobanteBase.prototype, "precioUnitario", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsNumber)(ValidationHelpers_1.VALIDATION_CURRENCY_NUMBER), (0, class_validator_1.Min)(0.00), (0, class_validator_1.Max)(ValidationHelpers_1.MAX_CURRENCY_VALUE), (0, class_transformer_1.Transform)(ValidationHelpers_1.Transform2Places), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), __metadata("design:type", Number) ], DetalleComprobanteBase.prototype, "descuento", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.IsNumber)(ValidationHelpers_1.VALIDATION_CURRENCY_NUMBER), (0, class_validator_1.Min)(0.00), (0, class_validator_1.Max)(ValidationHelpers_1.MAX_CURRENCY_VALUE), (0, class_transformer_1.Transform)(ValidationHelpers_1.Transform2Places), (0, ValidationHelpers_1.XMLCompatibilityForDecimalPlaces)(), __metadata("design:type", Number) ], DetalleComprobanteBase.prototype, "precioTotalSinImpuesto", void 0); __decorate([ (0, class_validator_1.IsOptional)(), (0, class_validator_1.ValidateNested)(), (0, class_transformer_1.Type)(() => DetallesAdicionales), __metadata("design:type", DetallesAdicionales) ], DetalleComprobanteBase.prototype, "detallesAdicionales", void 0); __decorate([ (0, class_validator_1.IsDefined)(), (0, class_validator_1.ValidateNested)(), (0, class_transformer_1.Type)(() => ImpuestosDetalleComprobante), __metadata("design:type", ImpuestosDetalleComprobante) ], DetalleComprobanteBase.prototype, "impuestos", void 0); exports.DetalleComprobanteBase = DetalleComprobanteBase; class DetallesComprobanteBase { detalle; } __decorate([ (0, class_validator_1.IsArray)(), (0, class_validator_1.ArrayNotEmpty)(), (0, class_validator_1.ValidateNested)({ each: true }), (0, class_transformer_1.Type)(() => DetalleComprobanteBase), __metadata("design:type", Array) ], DetallesComprobanteBase.prototype, "detalle", void 0); exports.DetallesComprobanteBase = DetallesComprobanteBase; class ComprobanteBase { infoTributaria; detalles; infoAdicional; } __decorate([ (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.ValidateNested)(), (0, class_transformer_1.Type)(() => InfoTributaria), __metadata("design:type", InfoTributaria) ], ComprobanteBase.prototype, "infoTributaria", void 0); __decorate([ (0, class_validator_1.IsNotEmpty)(), (0, class_validator_1.ValidateNested)(), (0, class_transformer_1.Type)(() => DetallesComprobanteBase), __metadata("design:type", DetallesComprobanteBase) ], ComprobanteBase.prototype, "detalles", void 0); __decorate([ (0, class_validator_1.IsOptional)(), (0, class_validator_1.ValidateNested)(), (0, class_transformer_1.Type)(() => InfoAdicional), __metadata("design:type", InfoAdicional) ], ComprobanteBase.prototype, "infoAdicional", void 0); exports.default = ComprobanteBase;