[SYNC] chore: Update carta-porte XML service

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Adrian Flores Cortes 2026-02-03 08:14:12 -06:00
parent 8f592af5cf
commit 49839476c4

View File

@ -93,8 +93,8 @@ export class CartaPorteXmlService {
attrs.push('MetodoPago="PUE"'); attrs.push('MetodoPago="PUE"');
} }
// Lugar de expedicion (CP del emisor) // Lugar de expedicion (CP del receptor o default)
attrs.push(`LugarExpedicion="${cp.emisorDomicilioFiscalCp || '00000'}"`); attrs.push(`LugarExpedicion="${cp.receptorDomicilioFiscalCp || '00000'}"`);
// Construir XML // Construir XML
let xml = `<cfdi:Comprobante ${attrs.join(' ')}>\n`; let xml = `<cfdi:Comprobante ${attrs.join(' ')}>\n`;
@ -228,7 +228,7 @@ export class CartaPorteXmlService {
let xml = ' <cartaporte31:Ubicaciones>\n'; let xml = ' <cartaporte31:Ubicaciones>\n';
// Ordenar por secuencia // Ordenar por secuencia
const sorted = [...ubicaciones].sort((a, b) => a.numeroSecuencia - b.numeroSecuencia); const sorted = [...ubicaciones].sort((a, b) => a.secuencia - b.secuencia);
for (const ub of sorted) { for (const ub of sorted) {
const tipoUbicacion = ub.tipoUbicacion === TipoUbicacionCartaPorte.ORIGEN ? 'Origen' : 'Destino'; const tipoUbicacion = ub.tipoUbicacion === TipoUbicacionCartaPorte.ORIGEN ? 'Origen' : 'Destino';
@ -244,7 +244,7 @@ export class CartaPorteXmlService {
attrs.push(`FechaHoraSalidaLlegada="${fechaStr}"`); attrs.push(`FechaHoraSalidaLlegada="${fechaStr}"`);
} }
if (ub.distanciaRecorrida !== undefined && ub.distanciaRecorrida > 0) { if (ub.distanciaRecorrida !== undefined && ub.distanciaRecorrida !== null && ub.distanciaRecorrida > 0) {
attrs.push(`DistanciaRecorrida="${ub.distanciaRecorrida.toFixed(2)}"`); attrs.push(`DistanciaRecorrida="${ub.distanciaRecorrida.toFixed(2)}"`);
} }
@ -268,14 +268,14 @@ export class CartaPorteXmlService {
const attrs: string[] = []; const attrs: string[] = [];
if (ub.calle) attrs.push(`Calle="${this.escapeXml(ub.calle)}"`); if (ub.calle) attrs.push(`Calle="${this.escapeXml(ub.calle)}"`);
if (ub.numExterior) attrs.push(`NumeroExterior="${this.escapeXml(ub.numExterior)}"`); if (ub.numeroExterior) attrs.push(`NumeroExterior="${this.escapeXml(ub.numeroExterior)}"`);
if (ub.numInterior) attrs.push(`NumeroInterior="${this.escapeXml(ub.numInterior)}"`); if (ub.numeroInterior) attrs.push(`NumeroInterior="${this.escapeXml(ub.numeroInterior)}"`);
if (ub.colonia) attrs.push(`Colonia="${ub.colonia}"`); if (ub.colonia) attrs.push(`Colonia="${ub.colonia}"`);
if (ub.localidad) attrs.push(`Localidad="${ub.localidad}"`); if (ub.localidad) attrs.push(`Localidad="${ub.localidad}"`);
if (ub.referencia) attrs.push(`Referencia="${this.escapeXml(ub.referencia)}"`); if (ub.referencia) attrs.push(`Referencia="${this.escapeXml(ub.referencia)}"`);
if (ub.municipio) attrs.push(`Municipio="${ub.municipio}"`); if (ub.municipio) attrs.push(`Municipio="${ub.municipio}"`);
if (ub.estado) attrs.push(`Estado="${ub.estado}"`); if (ub.estado) attrs.push(`Estado="${ub.estado}"`);
attrs.push('Pais="MEX"'); attrs.push(`Pais="${ub.pais}"`);
attrs.push(`CodigoPostal="${ub.codigoPostal}"`); attrs.push(`CodigoPostal="${ub.codigoPostal}"`);
return ` <cartaporte31:Domicilio ${attrs.join(' ')}/>\n`; return ` <cartaporte31:Domicilio ${attrs.join(' ')}/>\n`;
@ -324,16 +324,16 @@ export class CartaPorteXmlService {
attrs.push(`ClaveUnidad="${merc.claveUnidad}"`); attrs.push(`ClaveUnidad="${merc.claveUnidad}"`);
if (merc.unidad) attrs.push(`Unidad="${this.escapeXml(merc.unidad)}"`); if (merc.unidad) attrs.push(`Unidad="${this.escapeXml(merc.unidad)}"`);
if (merc.dimensionesLargo && merc.dimensionesAncho && merc.dimensionesAlto) { if (merc.largoCm && merc.anchoCm && merc.altoCm) {
const dims = `${merc.dimensionesLargo}/${merc.dimensionesAncho}/${merc.dimensionesAlto}cm`; const dims = `${merc.largoCm}/${merc.anchoCm}/${merc.altoCm}cm`;
attrs.push(`Dimensiones="${dims}"`); attrs.push(`Dimensiones="${dims}"`);
} }
if (merc.materialPeligroso) { if (merc.materialPeligroso) {
attrs.push('MaterialPeligroso="Sí"'); attrs.push('MaterialPeligroso="Sí"');
if (merc.cveMaterialPeligroso) attrs.push(`CveMaterialPeligroso="${merc.cveMaterialPeligroso}"`); if (merc.cveMaterialPeligroso) attrs.push(`CveMaterialPeligroso="${merc.cveMaterialPeligroso}"`);
if (merc.embalaje) attrs.push(`Embalaje="${merc.embalaje}"`); if (merc.tipoEmbalaje) attrs.push(`Embalaje="${merc.tipoEmbalaje}"`);
if (merc.descripEmbalaje) attrs.push(`DescripEmbalaje="${this.escapeXml(merc.descripEmbalaje)}"`); if (merc.descripcionEmbalaje) attrs.push(`DescripEmbalaje="${this.escapeXml(merc.descripcionEmbalaje)}"`);
} else { } else {
attrs.push('MaterialPeligroso="No"'); attrs.push('MaterialPeligroso="No"');
} }
@ -361,16 +361,16 @@ export class CartaPorteXmlService {
const auto = autos[0]; // Usualmente solo hay uno const auto = autos[0]; // Usualmente solo hay uno
const attrs: string[] = []; const attrs: string[] = [];
attrs.push(`PermSCT="${auto.permSCT}"`); attrs.push(`PermSCT="${auto.permSct}"`);
attrs.push(`NumPermisoSCT="${auto.numPermisoSCT}"`); attrs.push(`NumPermisoSCT="${auto.numPermisoSct}"`);
let xml = ` <cartaporte31:Autotransporte ${attrs.join(' ')}>\n`; let xml = ` <cartaporte31:Autotransporte ${attrs.join(' ')}>\n`;
// Identificacion vehicular // Identificacion vehicular
const idVehAttrs: string[] = []; const idVehAttrs: string[] = [];
idVehAttrs.push(`ConfigVehicular="${auto.configVehicular}"`); idVehAttrs.push(`ConfigVehicular="${auto.configVehicular}"`);
idVehAttrs.push(`PlacaVM="${auto.placaVM}"`); idVehAttrs.push(`PlacaVM="${auto.placaVm}"`);
if (auto.anioModeloVM) idVehAttrs.push(`AnioModeloVM="${auto.anioModeloVM}"`); if (auto.anioModeloVm) idVehAttrs.push(`AnioModeloVM="${auto.anioModeloVm}"`);
xml += ` <cartaporte31:IdentificacionVehicular ${idVehAttrs.join(' ')}/>\n`; xml += ` <cartaporte31:IdentificacionVehicular ${idVehAttrs.join(' ')}/>\n`;
@ -417,10 +417,8 @@ export class CartaPorteXmlService {
const attrs: string[] = []; const attrs: string[] = [];
attrs.push(`TipoFigura="${fig.tipoFigura}"`); attrs.push(`TipoFigura="${fig.tipoFigura}"`);
if (fig.rfcFigura) attrs.push(`RFCFigura="${fig.rfcFigura}"`); if (fig.rfcFigura) attrs.push(`RFCFigura="${fig.rfcFigura}"`);
attrs.push(`NombreFigura="${this.escapeXml(fig.nombreFigura)}"`); if (fig.nombreFigura) attrs.push(`NombreFigura="${this.escapeXml(fig.nombreFigura)}"`);
if (fig.numLicencia) attrs.push(`NumLicencia="${fig.numLicencia}"`); if (fig.numLicencia) attrs.push(`NumLicencia="${fig.numLicencia}"`);
if (fig.numRegIdTribFigura) attrs.push(`NumRegIdTribFigura="${fig.numRegIdTribFigura}"`);
if (fig.residenciaFiscalFigura) attrs.push(`ResidenciaFiscalFigura="${fig.residenciaFiscalFigura}"`);
xml += ` <cartaporte31:TiposFigura ${attrs.join(' ')}`; xml += ` <cartaporte31:TiposFigura ${attrs.join(' ')}`;