facturacionelectronicapy-ts-xmlgen
Version:
Genera el contenido del archivo XML del Documento electrónico exigido por la SET
135 lines (134 loc) • 5.8 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TransporteSchema = void 0;
const zod_1 = require("zod");
const freightResponsibles_table_1 = require("../../data/freightResponsibles.table");
const tradingConditions_table_1 = require("../../data/tradingConditions.table");
const transportModalities_table_1 = require("../../data/transportModalities.table");
const transportTypes_table_1 = require("../../data/transportTypes.table");
const Path_1 = require("../../helpers/Path");
const CommonValidators_1 = __importDefault(require("../../helpers/validation/CommonValidators"));
const ZodValidator_1 = __importDefault(require("../../helpers/validation/ZodValidator"));
const db_service_1 = __importDefault(require("../../services/db.service"));
const salidaYEntrega_schema_1 = require("./salidaYEntrega.schema");
const transportista_schema_1 = require("./transportista.schema");
const vehiculo_schema_1 = require("./vehiculo.schema");
const SDParser_1 = __importDefault(require("../../helpers/SDParser"));
exports.TransporteSchema = zod_1.z
.object({
// E901
tipo: zod_1.z
.nativeEnum(transportTypes_table_1.TransportType)
.optional()
.describe(SDParser_1.default.stringify('E901', { e: 'TransportType' })),
// E903
modalidad: zod_1.z
.nativeEnum(transportModalities_table_1.TransportModality)
.describe(SDParser_1.default.stringify('E903', { e: 'TransportModality' })),
// E905
tipoResponsable: zod_1.z
.nativeEnum(freightResponsibles_table_1.FreightResponsible)
.describe(SDParser_1.default.stringify('E905', { e: 'FreightResponsible' })),
// E906
condicionNegociacion: zod_1.z
.nativeEnum(tradingConditions_table_1.TradingCondition)
.optional()
.describe(SDParser_1.default.stringify('E906', { e: 'TradingCondition' })),
// E907
numeroManifiesto: zod_1.z
.string()
.min(1)
.max(15)
.optional()
.describe(SDParser_1.default.stringify('E907')),
// E908
numeroDespachoImportacion: zod_1.z
.string()
.length(16)
.optional()
.describe(SDParser_1.default.stringify('E908')),
// E909
inicioEstimadoTranslado: CommonValidators_1.default.isoDate()
.optional()
.describe(SDParser_1.default.stringify('E909')),
// E910
finEstimadoTranslado: CommonValidators_1.default.isoDate()
.optional()
.describe(SDParser_1.default.stringify('E910')),
// E911
paisDestino: CommonValidators_1.default.country()
.optional()
.describe(SDParser_1.default.stringify('E911', {
e: 'Country',
})),
// (E920) E10.1. Campos que identifican el local de salida de las mercaderías (E920-E939)
salida: salidaYEntrega_schema_1.SalidaYEntregaSchema.optional().describe(SDParser_1.default.stringify('E10.1', {
d: 'Campos que identifican el local de salida de las mercaderías (E920-E939)',
})),
// (E940) E10.2. Campos que identifican el local de entrega de las mercaderías (E940-E959)
entrega: salidaYEntrega_schema_1.SalidaYEntregaSchema.optional().describe(SDParser_1.default.stringify('E10.2', {
d: 'Campos que identifican el local de entrega de las mercaderías (E940-E959)',
})),
// (E960) E10.3. Campos que identifican el vehículo de traslado de mercaderías (E960-E979)
vehiculo: vehiculo_schema_1.VehiculoSchema.optional().describe(SDParser_1.default.stringify('E10.3', {
d: 'Campos que identifican el vehículo de traslado de mercaderías (E960-E979)',
})),
// (E980) E10.4. Campos que identifican al transportista (persona física o jurídica) (E980-E999)
transportista: transportista_schema_1.TransportistaSchema.optional().describe(SDParser_1.default.stringify('E10.4', {
d: 'Campos que identifican al transportista (persona física o jurídica) (E980-E999)',
})),
})
.transform((data, ctx) => {
const validator = new ZodValidator_1.default(ctx, data);
const vehiclePath = new Path_1.Path('vehiculo');
// E910 - finEstimadoTranslado
{
/*
Obligatorio si existe el campo E909
*/
if (data.inicioEstimadoTranslado) {
validator.requiredField('finEstimadoTranslado');
}
}
// ⚠️ esto no esta en el manual
{
const startPath = new Path_1.Path('inicioEstimadoTranslado');
if (data.inicioEstimadoTranslado && data.finEstimadoTranslado) {
validator.validate('finEstimadoTranslado', data.finEstimadoTranslado < data.inicioEstimadoTranslado, `$path no puede ser anterior a '${startPath}'`);
}
}
// E912 - paisDestinoNombre
let paisDestinoNombre;
{
/*
Obligatorio si existe el campo E911
*/
if (data.paisDestino) {
const countryFound = db_service_1.default.countries._findById(data.paisDestino);
paisDestinoNombre = countryFound.description;
}
}
// E966 - vehiculo.numeroVuelo
{
/*
Obligatorio si E903 = 3
No informar si E903 ≠ 3
*/
if (data.modalidad == transportModalities_table_1.TransportModality.AEREO) {
validator.requiredField(vehiclePath.concat('numeroVuelo'));
}
}
return {
...data,
// E902
tipoDescripcion: db_service_1.default.transportTypes._findByIdIfExist(data.tipo)
?.description,
// E904
modalidadDescripcion: db_service_1.default.transportModalities._findById(data.modalidad).description,
// E912
paisDestinoNombre,
};
});