Árvore de páginas


ÍNDICE


01. VISIÓN GENERAL

Objetivo

Generar un CFDI con complemento Carta Porte en el cual se detallan operaciones de traslado de mercancías, ubicaciones de origen, puntos intermedios y destino, así como lo referente al medio a través del cual se transportan.

El complemento Carta Porte se incorpora al CFDI de tipo Traslado para acreditar la posesión de las mercancías, brindando información sobre la procedencia y los destinos de las mercancías que se trasladan a través de los distintos medios de transporte.

Los contribuyentes que brindan servicios de traslado de mercancías por los distintos medios de transporte, podrán emitir un CFDI de tipo Ingreso incorporando el complemento Carta Porte, con el que se podrá amparar la legal posesión de las mercancías.

En la Primera Resolución de Modificaciones la Miscelánea Fiscal para 2021 indica, en el artículo transitorio décimo primero, el modelo de entrada en vigor de este complemento.

Para los efectos de las reglas 2.7.1.8. y 2.7.1.9., y el artículo Trigésimo Sexto Transitorio de la RMF 2021, el complemento “Carta Porte” entrará en vigor a partir del 1 de junio de 2021. Durante los 120 días naturales, siguientes al inicio de la vigencia del complemento a que se refiere el párrafo anterior, los contribuyentes señalados en la regla 2.7.1.9. podrán optar por expedir el CFDI sin incorporar el complemento “Carta Porte”, al finalizar dicho periodo el uso del complemento “Carta Porte” será obligatorio para los citados contribuyentes

Información de consulta:

Miscelánea Fiscal para 2021

Primera Resolución de Modificaciones la Miscelánea Fiscal para 2021

Información técnica y Preguntas frecuentes

Instructivo de llenado del CFDI con Complemento Carta Porte

Fundamento Legal

Código Fiscal de la Federación, artículos 29 y 29-A.

Resolución Miscelánea Fiscal, regla 2.7.1.8, Trigésimo Sexto Transitorio.

Regla 2.7.1.9. de la SEGUNDA Resolución de Modificaciones a la Resolución Miscelánea Fiscal para 2021, tercera versión anticipada.

Décimo Primero Transitorio de la PRIMERA Resolución de Modificaciones a la Resolución Miscelánea Fiscal para 2021.


Página del SAT:

Complemento Carta Porte


Importante

  • El complemento de Carta Porte versión 3.0, se publicó en el portal del SAT el mes de septiembre del 2023.
  • El inicio de vigencia del complemento Carta Porte versión 3.0, será a partir del 25 de noviembre de 2023, sin embargo, de acuerdo con lo establecido en el Segundo Transitorio de la Octava Resolución de Modificaciones a la Resolución Miscelánea Fiscal para 2023 se cuenta con un periodo de convivencia con la versión 2.0 del complemento, hasta el 31 de diciembre de 2023.
  • El periodo comprendido del 1 al 31 de diciembre de 2023, se considera como de adaptación, por lo que se deberán emitir los respectivos comprobantes y se dará por cumplida dicha obligación aún y cuando contenga datos incorrectos en relación con los requisitos tanto del "Estándar del complemento Carta Porte" como del "Instructivo de llenado del CFDI al que se le incorpora el Complemento Carta Porte".
  • Para versión de Complemento de Carta Porte 3.0, Validar que se tengan los ajustes al Diccionario de Datos, véase las especificaciones para los siguientes campos:
    • País Ori/Des (A1X_PAIS)
    • Aseg Med Amb (A1X_ASEGMA)
    • Póliza Med A (A1X_POLMA)
    • Aseg. Carga (A1X_ASECGA)
    • Póliza Carga (A1X_POLCGA)
    • Prima Seguro (A1X_PRISEG)
    • Tipo Ubicación (A1Y_TIPEST)
    • Id Ubicación (A1Y_ORIGEN)
    • Parte Transp (AE0_PARTE)
    • Id Ub Origen (D2_CNATREC)
    • Id Ub Destin (D2_GRUPONC)
    • UUID (A1X_UUIDCP)
    • Reg. ISTMO (A1X_RISTMO)
    • Polo Origen (A1X_POLOOR)
    • Polo Destino (A1X_POLODE)
    • Rég. Aduana (A1X_REGADU)
    • Peso Bruto V (A1X_PESOBV)
    • Sec.COFEPRIS (B5_SECTOR)
    • Nom.Gen.Prod  (B5_NOMGER)
    • Marca Comer (B5_NOMCOME)
    • Fabricante (B5_FABRICA)
    • Lote (D2_LOTECTL)
    • Fecha caducidad (D2_DTVALID)
    • Forma Farma (B5_CODFORM)
    • Cond. Esp Tr (B5_CONDIC)
    • Reg. Sanitar (B5_REGSAN)
    • Permiso Imp (B5_PERIMP)
    • VUCEM (B5_VUCEM)
    • Ing. Activo (B5_INGREDI)
    • Sust. Activa (B5_SUSACT)
    • CAS (B5_CAS)
    • Emp. Importa (B5_EMPIMP)
    • Formulador (B5_DATFOR)
    • Maquilador (B5_DATMAQ)
    • Uso autorizado (B5_USOAUT)
    • Tipo de materia (B5_TPOMAT)
    • Desc. Mater (B5_DESMAT)
  • Las actualizaciones al diccionario de datos para la versión 1.0 del Complemento de Carta Porte se realizaron en el pacote 009606 - DMINA-13147 CFDI CON COMPLEMENTO CARTA PORTE MÉX.
  • Los ajustes a diccionario para Complemento de Carta Porte versión 2.0 fueron realizados en el pacote 009897 - DMINA-14383 FUNCIONALIDAD DE CARTA PORTE VERSION.
  • Los ajustes a diccionario para Complemento de Carta Porte versión 3.0 fueron realizados en el pacote 013132 - DMINA-21262 - COMPLEMENTO DE CARTA PORTE (CCP) v3.0.
  • En caso de contar con el archivo diferencial del diccionario (SDFMEX.TXT) para realizar la actualización, consulte el documento Actualizador de diccionario y base de datos - UPDDISTR el cual le guiará para aplicar las actualizaciones automáticamente desde el archivo diferencial.
  • Al actualizar el Diccionario de Datos a través del Actualizador de diccionario de datos - UPDDISTR, es necesario validar que se encuentren configurados los campos de acuerdo a lo definido en Diccionario de Datos Carta Porte México ya que existen las siguientes reglas para la actualización de campos Reglas para actualización de Diccionario SX3 - UPDDISTR en migrador de versión. por lo que si los campos no fueron actualizados por alguna de estas reglas, se deberá realizar de forma manual.
  • La funcionalidad de Complemento de Carta Porte 3.0 solo está disponible para su uso desde  el Módulo de Facturación (SIGAFAT). 
  • El archivo FATSMEX.INI debe tener actualizadas las URL'S que aplican para el esquema de Carta Porte versión 3.0 (Vea la sección FATSMEX.INI del apartado 03. CONFIGURACIONES) 

Rutinas utilizadas

Para tener activa la funcionalidad de Complemento de Carta Porte para versión 3.0, es necesario tener actualizadas con una fecha mayor o igual las siguientes rutinas:

RutinaNombre TécnicoFecha
LOCXNFCaptura de documentos fiscales14/12/2021
LOCXNF2Funciones de documentos fiscales14/12/2021
LOCXMEXFunciones de documentos fiscales localizadas para México20/12/2023
LOCXFUNAFunciones generales de documentos fiscales20/12/2023
MATA487Captura de Carta Porte15/12/2023
MATR475Informe de Notas Fiscales19/12/2023
FISA812Definición de catálogos27/08/2021
FISA813Mantenimiento de catálogos27/08/2021
FISA814Carga de catálogos desde archivos .CSV a la base de datos08/12/2023
FATEMEX.INIScript de generación de XML para Documentos de Entrada13/10/2021
FATSMEX.INIScript de generación de XML para Documentos de Salida08/12/2023


Esquema de generación del XML de Complemento de Carta Porte


De acuerdo al instructivo de llenado, el formato siguiente lista los diferentes nodos y atributos que integran el Complemento Carta Porte versión 3.0 de un CFDI.

La columna Dato en Protheus, especifica la fuente del dato que se informa en el atributo correspondiente.

Se han omitido algunos nodos referentes a transporte Marítimo, Aéreo y Ferroviario. Por el momento, el sistema no considera estos medios de transporte.

  1. Actualización de las direcciones URL de los esquemas XML y XSD para actualizarlos a Carta Porte 3.0:

CampoDescripciónNodoUsoDato en Protheus


cfdi:Comprobante

VersionVersión CFDI.cfdi:Comprobante
"4.0"
FormaPagoEn este campo se deberá registrar la clave de la forma de pago en que se liquida el valor pactado en la prestación del servicio.cfdi:Comprobante

CFDI de tipo ingreso: Metodo pago (AI0_MPAGO)

CFDI de tipo traslado: N/A

TipoDeComprobante

Tipo de comprobantecfdi:Comprobante

CFDI de tipo ingreso: "I"

CFDI de tipo traslado: "T"

MetodoPagoEste campo sirve para seleccionar la clave que informe si el pago por la prestación del servicio se liquidó en una sola exhibición o es un pago en parcialidades.cfdi:Comprobante

CFDI de tipo ingreso: Met Pago SAT (E4_MPAGSAT)

CFDI de tipo traslado: N/A

SubtotalSi el campo TipoDeComprobante contiene el valor “T” (Traslado), se debe registrar el valor igual a cero.cfdi:Comprobante

Si el campo de la factura Identificador de Documento (F2_TIPODOC) es "21"-Traslado, informa:

"0"

De lo contrario, informa:

Diferencia del campo Valor Mercancías (F2_VALMERC) - el campo Descuentos (F2_DESCONT) de la factura.

MonedaSi el campo TipoDeComprobante contiene el valor “T” (Traslado), en este campo se debe registrar el valor “XXX” (Los códigos asignados para las transacciones en que intervenga ninguna moneda). Si el campo TipoDeComprobante contiene el valor “I” (Ingreso), este campo debe contener un valor diferente de “XXX” (Los códigos asignados para las transacciones en que intervenga ninguna moneda).cfdi:Comprobante

Si el campo de la factura Identificador de Documento (F2_TIPODOC) es "21"-Traslado, informa :

"XXX"

De lo contrario, informa:

Campo Moneda SAT (CTO_MOESAT) relacionado con el campo Moneda de la Factura (F2_MOEDA).

TotalSi el campo TipoDeComprobante contiene el valor “T” (Traslado), se debe registrar el valor igual a cero.cfdi:Comprobante

Si el campo de la factura Identificador de Documento (F2_TIPODOC) es "21"-Traslado, informa:

"0"

De lo contrario, informa:

Campo Valor Bruto (F2_VALBRUT) de la factura.



cfdi:Comprobante:CfdiRelacionados

TipoRelacionDebe contener el valor “05” (Traslados de mercancías facturadas previamente), contenida en el catálogo del CFDI, c_TipoRelacion, publicado en el portal del SAT. Y el valor del campo Fecha debe contener al menos una diferencia de 6:00:00 horas respecto de la factura inicial, la cual se relaciona siempre que se cuente con dicha información.cfdi:Comprobante:CfdiRelacionados
"05"
UUID Se debe registrar el folio fiscal (UUID) de un comprobante fiscal relacionado con el presente comprobante.cfdi:Comprobante:CfdiRelacionados:CfdiRelacionado
Campo UUID Relacs (F2_UUIDREL) de la factura.


cfdi:Comprobante:Receptor

RFCSi el campo TipoDeComprobante contiene el valor “T” (Traslado), este campo debe
contener el valor “XAXX010101000”, en otro caso se podrá capturar el RFC del cliente, siempre y cuando se encuentre en la lista del RFC Inscritos no cancelados del SAT I_RFC.
Si el campo TipoDeComprobante contiene el valor “I” (Ingreso), y cuando no se utilice el RFC genérico, el RFC debe estar en la lista de RFC inscritos no cancelados en el SAT.
cfdi:Comprobante:Receptor

Si el campo de la factura Identificador de Documento (F2_TIPODOC) es "21"-Traslado, informa:

El RFC del Emisor.

De lo contrario, informa:

Campo RFC cliente (A1_CGC) correspondiente al Código del cliente (F2_CLIENTE+F2_LOJA) de la factura.

UsoCFDISi el campo TipoDeComprobante contiene el valor “T” (Traslado), este campo debe contener el valor “P01” (Por definir).

cfdi:Comprobante:Receptor

Si el campo de la factura Identificador de Documento (F2_TIPODOC) es "21"-Traslado, informa:

"P01" (por Definir)

De lo contrario, informa:

Campo Uso CFDI (F2_USOCFDI) de la factura.



cfdi:Comprobante:Conceptos

ClaveProdServ

CFDI de tipo Ingreso:

En este campo deberás registrar la clave que corresponda al tipo de servicio que estas prestando para el traslado de bienes y/o mercancías.

CFDI de tipo Traslado:

En este campo deberás registrar la clave que corresponda a los bienes y/o mercancías que se transporten.

cfdi:Comprobante:Conceptos
Prod/Serv SAT (B1_PRODSAT)
ClaveUnidad

CFDI de tipo Ingreso:

En este campo deberás registrar la clave de unidad E48 con descripción “Unidad de servicio”.

CFDI de tipo Traslado:

Este campo sirve para registra la clave de unidad de medida utilizada para los bienes y/o mercancías transportadas.

cfdi:Comprobante:Conceptos
Uni Med SAT (AH_UNIDSAT)
Descripcion

CFDI de tipo Ingreso:

Este campo sirve para detallar el tipo de servicio que se va a realizar.

CFDI de tipo Traslado:

Este campo sirve para detallar el bien o mercancía que se va a transportar.

cfdi:Comprobante:Conceptos
Descripción (B1_DESC)

Complemento Carta Portecfdi:Comprobante:Complemento:cartaporte30:CartaPorte
Complemento  para incorporar al Comprobante Fiscal Digital por Internet (CFDI),
la información relacionada a los bienes o mercancías, ubicaciones de
origen, puntos intermedios y destino, así como lo referente al medio por el
que se transportan; ya sea por vía terrestre (carretera federal o líneas
férreas), aérea, marítima o fluvial; además de incluir el traslado de
Hidrocarburos y Petrolíferos.
VersionAtributo requerido con valor prefijado que indica la versión del complemento Carta Porte.cartaporte30:CartaPorteRequerido"3.0"
TranspInternacEn este campo se deberá registrar el valor “Sí” o “No” para indicar cuando el traslado de bienes y/o mercancías sea de carácter internacional.cartaporte30:CartaPorteRequerido

Campo Transporte internacional (A1X_INTERN) de Carta Porte:

"Sí" o "No"

RegimenAduaneroEn este campo se deberá indicar el tipo de régimen que
se encuentra asociado con el traslado de los bienes y/o
mercancías de procedencia extranjera
cartaporte30:CartaPorteCondicional

Campo Rég. Aduana (A1X_REGADU) de Carta Porte.

  • Cuando el campo Transporte internacional (A1X_INTERN)  contenga el valor "Sí" y el campo Entrada o Salida (A1X_ENTSAL) contenga un valor, este atributo debe existir y contener un valor del catálogo c_RegimenAduanero.
  • Cuando el campo Entrada o Salida (A1X_ENTSAL) contenga "E - Entrada", debe contener un valor del catálogo c_RegimenAduanero donde la columna ImpoExpo contenga el valor "Entrada o Salida,Entrada".
  • Cuando el campo Entrada o Salida (A1X_ENTSAL) contenga "S -Salida”, debe contener un valor del catálogo c_RegimenAduanero donde la columna ImpoExpo contenga el valor "Salida o Salida,Entrada".
EntradaSalidaMerc

En este campo se deberá registrar el valor “Entrada” o “Salida” cuando los bienes y/o mercancías ingresen o salgan del territorio nacional.

Nota: Si el valor registrado en el campo TranspInternac es “No”, este campo se debe omitir.
cartaporte30:CartaPorteCondicional

Este atributo se informa si el campo Transporte internacional (A1X_INTERN) de Carta Porte es "Sí".

Si el campo Entrada o Salida (A1X_ENTSAL) de Carta Porte es "E", informa:

"Entrada"

De lo contrario, informa:

"Salida"

PaisOrigenDestino

En este campo se deberá registrar la clave del país de origen o destino de los bienes y/o mercancías transportadas.

Nota: Si el valor registrado en el campo TranspInternac es “No”, este campo se debe omitir.

cartaporte30:CartaPorteCondicional

Este atributo se informa si el campo de Carta Porte Transporte internacional (A1X_INTERN) es "Sí".

Campo de Carta Porte País Origen/destino (A1X_PAIS).

ViaEntradaSalida

En este campo se deberá registrar la clave del transporte a través del cual ingresan o salen los bienes y/o mercancías del territorio nacional.

Nota: Si el valor registrado en el campo TranspInternac es “No”, este campo se debe omitir.

cartaporte30:CartaPorteCondicional

Este atributo se informa si el campo de Carta Porte Transporte internacional (A1X_INTERN) es "Sí".

Campo de Carta Porte Clave de transporte (A1X_TRANSP).

TotalDistRecEn este campo se deberá registrar la suma de las distancias recorridas en kilómetros, registradas en los campos “Distancia Recorrida” de las secciones Ubicación.cartaporte30:CartaPorteCondicionalSuma de los valores Distancia recorrida (A1Y_DISREC) del nodo Ubicaciones.
IdCCPAtributo requerido para expresar los 36 caracteres del foliodel  complemento Carta Porte (IdCCP) de la transacción de timbrado conforme al estándar RFC 4122, para la identificación del CFDI con complemento Carta Portecartaporte30:CartaPorteRequeridoEl valor de este atributo se visualizará en el campo UUID (A1X_UUIDCP), ya que el sistema lo generará automáticamente, como identificador de la Carta Porte registrada.
RegistroISTMOEn este campo se deberá registrar si en las regiones, el traslado
de los bienes y/o mercancías se realiza al interior de los Polos de Desarrollo para el Bienestar del istmo de Tehuantepec. 
cartaporte30:CartaPorteCondicional

Este atributo se informa si el campo de Carta Porte Reg. ISTMO (A1X_RISTMO) es "Sí".


UbicacionPoloOrigenEn este campo se deberá registrar la región en donde inicia el traslado de los bienes y/o mercancias al interior de los Polos de Desarrollo para el Bienestar del istmo de Tehuantepec.cartaporte30:CartaPorteCondicional

Este atributo se informa si el campo de Carta Porte Reg. ISTMO (A1X_RISTMO) es "Sí".

Campo de Carta Porte Polo Origen (A1X_POLOOR).

UbicacionPoloDestinoEn este campo se deberá registrar la región en donde termina el traslado de los bienes y/o mercancias al interior de los Polos de Desarrollo para el Bienestar del istmo de Tehuantepeccartaporte30:CartaPorteCondicional

Este atributo se informa si el campo de Carta Porte Reg. ISTMO (A1X_RISTMO) es "Sí".

Campo de Carta Porte Polo Destino (A1X_POLODE).



cartaporte30:Ubicaciones:UbicacionRequeridoNodo requerido para registrar las distintas ubicaciones que sirven para reflejar el domicilio del origen y/o destino que tienen los bienes o mercancías que se trasladan por distintos medios de transporte.
TipoUbicacionEn este campo se deberá registrar el valor que corresponda al tipo de ubicación, ya sea "Origen" o "Destino".cartaporte30:Ubicaciones:UbicacionRequerido

Si el campo Tipo Ubicación (A1Y_TIPEST) es "D"

    "Origen"

De lo contrario:

   "Destino"

IDUbicacionCuando las mercancías tengan diferentes ubicaciones de tipo Origen y/o Destino, se les debe asignar un identificador el cual debe incluir el acrónimo “OR” para Origen y “DE” para Destino, seguido de 6 dígitos numéricos que podrás asignar.cartaporte30:Ubicaciones:UbicacionOpcionalCampo Id Ubicación (A1Y_ORIGEN)de Ubicaciones.
RFCRemitenteDestinatario

En este campo se deberá registrar la clave en el RFC del remitente cuando el valor registrado en el campo TipoUbicacion sea “Origen”.

Por otro lado, si el valor agregado en el campo TipoUbicacion es “Destino” se deberá registrar la clave en el RFC del destinatario de los bienes y/o mercancías que se trasladan.

cartaporte30:Ubicaciones:UbicacionRequeridoCampo RFC (A1Y_RFCORI) de Ubicaciones.
NombreRemitenteDestinatarioEn este campo se podrá registrar el nombre del remitente o destinatario de los bienes y/o mercancías que se trasladan.cartaporte30:Ubicaciones:UbicacionOpcionalCampo Nombre (A1Y_NOMORI) de Ubicaciones.
NumRegIdTribEn este campo se podrán registrar los datos de identificación fiscal del remitente o destinatario, siempre que en el campo “RFCRemitenteDestinatario” se haya registrado la clave en el RFC genérica de residentes en el extranjero “XEXX010101000”.cartaporte30:Ubicaciones:UbicacionOpcionalN/A
ResidenciaFiscalEn este campo podrás registrar la clave del país del remitente o destinatario, siempre que se haya registrado un valor en el campo “NumRegIdTrib”.cartaporte30:Ubicaciones:UbicacionOpcionalN/A
NumEstacionAtributo condicional para registrar la clave de la estación de origen o destino para el traslado de los bienes y/o mercancías que se realiza a través de los distintos medios de transporte, esto de acuerdo al valor de la columna “Clave identificación” del catálogo c_Estaciones del complemento Carta Porte que permita asociarla al tipo de transporte.cartaporte30:Ubicaciones:UbicacionOpcionalN/A
NombreEstacionAtributo condicional para registrar el nombre de la estación de origen o destino por la que se pasa para efectuar el traslado de los bienes y/o mercancías a través de los distintos medios de transporte, conforme al catálogo c_Estaciones del complemento Carta Porte.cartaporte30:Ubicaciones:UbicacionOpcionalN/A
NavegacionTraficoAtributo condicional para registrar el tipo de puerto de origen o destino en el cual se documentan los bienes y/o mercancías que se trasladan vía marítima.cartaporte30:Ubicaciones:UbicacionOpcionalN/A
FechaHoraSalidaLlegadaEn este campo se deberá registrar la fecha y hora estimada en la que salen o llegan los bienes y/o mercancías del origen o destino, respectivamente.cartaporte30:Ubicaciones:UbicacionRequerido

Campos Fecha de Salida y Hora de Salida de Ubicaciones:

DTOS(A1Y_FECSAL) + "T" + A1Y_HRASAL

TipoEstacion

Atributo condicional para registrar el tipo de estación por el que pasan los bienes y/o mercancías durante su traslado a través de los distintos medios de transporte.

cartaporte30:Ubicaciones:UbicacionCondicionalN/A
DistanciaRecorrida

En este campo se deberá registrar la distancia recorrida en kilómetros entre el origen y el destino.

Este campo solo se debe registrar cuando el campo TipoUbicacion contenga el valor “Destino”.

cartaporte30:Ubicaciones:UbicacionCondicional

Si el campo Tipo Ubicación (A1Y_TIPEST) es "D", coloca el campo Distancia recorrida (A1Y_DISREC), ambos de Ubicaciones.

De lo contrario se omite.



cartaporte30:Ubicaciones:Ubicacion:DomicilioCondicionalNodo condicional para registrar información del domicilio de origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte.
CalleEn este campo se podrá registrar el nombre de la calle en la que está ubicado el domicilio de origen o destino de los bienes y/o mercancías que se trasladan.cartaporte30:Ubicaciones:Ubicacion:DomicilioRequerido

Campo Calle (A1Y_CALORI) de Ubicaciones.

NumeroExteriorEn este campo se podrá registrar el número exterior en donde se ubica el domicilio del origen o destino de los bienes y/o mercancías que se trasladan.cartaporte30:Ubicaciones:Ubicacion:DomicilioOpcional

Campo Número exterior (A1Y_EXTORI) de Ubicaciones.

NumeroInteriorEn este campo se podrá registrar el número interior en caso de existir, en donde se ubica el domicilio del origen o destino de los bienes y/o mercancías que se trasladan.cartaporte30:Ubicaciones:Ubicacion:DomicilioOpcional

Campo Número interior (A1Y_INTORI) de Ubicaciones.

ColoniaEn este campo se podrá registrar la clave de la colonia en donde se ubica el domicilio del origen o destino de los bienes y/o mercancías que se trasladan vía autotransporte. El valor registrado en este campo debe coincidir con la clave del código postal registrado en el campo “CodigoPostal”.cartaporte30:Ubicaciones:Ubicacion:DomicilioOpcional

Campo Colonia (A1Y_COLORI) de Ubicaciones.

Localidad

En este campo se podrá registrar la clave que corresponda a la ciudad o población, en donde se encuentra ubicado el domicilio del origen o destino de los bienes y/o mercancías que se trasladan, si la clave del país es distinta a “MEX” se puede registrar texto libre.

La clave capturada en este campo debe coincidir con el estado capturado en el campo “Estado”.

cartaporte30:Ubicaciones:Ubicacion:DomicilioOpcional

Campo Localidad (A1Y_LOCORI) de Ubicaciones.

ReferenciaEste campo sirve para especificar una referencia geográfica adicional que permita una fácil o precisa ubicación del domicilio del origen y/o destino de las mercancías que se trasladan.cartaporte30:Ubicaciones:Ubicacion:DomicilioOpcionalN/A
Municipio

En este campo se podrá registrar el municipio, delegación, alcaldía o condado en donde se encuentra ubicado el domicilio del origen o destino de los bienes y/o mercancías que se trasladan, si la clave del país es distinta a “MEX” se puede registrar texto libre.

El dato capturado en este campo debe coincidir con el estado capturado en el campo “Estado”.

cartaporte30:Ubicaciones:Ubicacion:DomicilioOpcional

Campo Municipio (A1Y_MUNORI) de Ubicaciones.

Estado

En este campo se deberá registrar el estado, entidad, región, comunidad, en donde se encuentra ubicado el domicilio del origen o destino de los bienes y/o mercancías que se trasladan, si la clave del país es distinta a “MEX”, “USA” o "CAN” se puede registrar texto libre.

El dato capturado en este campo debe coincidir con el país capturado en el campo “País”.

cartaporte30:Ubicaciones:Ubicacion:DomicilioRequerido

Campo Estado (A1Y_EDOORI) de Ubicaciones.

País

En este campo se deberá registrar la clave del país en donde se encuentra ubicado el domicilio del origen o destino de los bienes y/o mercancías que se trasladan.

Este campo debe contener una clave del catálogo c_Pais, publicado en el portal del SAT.

cartaporte30:Ubicaciones:Ubicacion:DomicilioRequerido

Campo País (A1Y_PAIORI) de Ubicaciones.

CodigoPostal

En este campo se deberá registrar la clave del código postal en donde se encuentra el domicilio del origen o destino de los bienes y/o mercancías que se trasladan.

El dato capturado en este campo debe coincidir con:

- La columna c_Estado, debe ser la misma que la capturada en el campo Estado.

- La columna c_Municipio, debe ser la misma que la capturada en el campo Municipio.

- La columna c_Localidad, debe ser la misma que la capturada en el campo Localidad.

cartaporte30:Ubicaciones:Ubicacion:DomicilioRequerido

Campo Código postal (A1Y_CPORI) de Ubicaciones.



cartaporte30:MercanciasRequeridoNodo requerido para registrar la información de los bienes o mercancías que se trasladan en los distintos medios de transporte.
PesoBrutoTotalEn este campo se deberá registrar la suma del peso bruto de los bienes y/o mercancías que se trasladan.cartaporte30:MercanciasRequeridoSuma de PesoEnKg (D2_PESO).
UnidadPesoEn este campo se deberá registrar la clave de la unidad de peso que corresponda al valor registrado en el campo PesoBrutoTotal.cartaporte30:MercanciasRequerido"KGM"
PesoNetoTotalAtributo condicional para registrar la suma de los valores indicados en el atributo “PesoNeto” del nodo “DetalleMercancia”.cartaporte30:MercanciasCondicionalN/A
NumTotalMercancias

En este campo se deberá registrar el número total de los bienes y/o mercancías que se trasladan, identificándose por cada sección Mercancía registrada en el complemento.

El valor de este campo debe ser igual al número de secciones Mercancia que se registren en el complemento.

cartaporte30:MercanciasRequeridoNúmero de ítems de productos de la factura.
CargoPorTasacionEn este campo se deberá registrar el importe pagado por la tasación de los bienes y/o mercancías que se trasladan vía aérea.cartaporte30:MercanciasOpcionalN/A
LogisticaInversaRecoleccionDevolucionAtributo condicional para expresar si se hace uso de alguno
de los servicios de logística inversa, recolección o
devolución para el traslado de los bienes y/o mercancías.
cartaporte30:MercanciasOpcional

Campo  (A1X_LOGDEV) de Carta Porte:

"Sí" o "No"



cartaporte30:Mercancias:MercanciaRequeridoNodo requerido para registrar información de los bienes o mercancías que se trasladan en los distintos medios de transporte.
BienesTransp

En este campo se deberá registrar la clave de producto de los bienes y/o mercancías que se trasladan vía Autotransporte.

El valor de este campo deberá contener una clave del catálogo del complemento Carta Porte c_ClaveProdServCP, publicado en el portal del SAT.

Nota: no aplican los servicios de traslado de mercancías en este campo, ya que esta información se encuentra registrada a nivel Comprobante.

cartaporte30:Mercancias:MercanciaRequerido

Campo Producto o Servicio SAT (B1_PRODSAT) correspondiente al producto del ítem de la factura. 

ClaveSTCCEn este campo se podrá registrar la clave de producto de acuerdo al catálogo STCC, dicha clave debe estar compuesta de 6 o 7 caracteres numéricos.cartaporte30:Mercancias:MercanciaOpcionalN/A
DescripcionEn este campo se deberá registrar la descripción de los bienes y/o mercancías que se trasladan vía autotransporte.cartaporte30:Mercancias:MercanciaCondicional

Descripción del Catálogo productos/servicios (S002) de acuerdo al campo Producto o Servicio SAT (B1_PRODSAT) correspondiente al producto del ítem de la factura. 

CantidadEn este campo se deberá registrar la cantidad de bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:MercanciaCondicionalCampo Cantidad del producto (D2_QUANT), del ítem de la factura.
ClaveUnidad

En este campo se deberá registrar la clave de unidad de medida aplicable y que se encuentra en el catálogo de CFDI, c_ClaveUnidad, publicado en el portal del SAT.

La unidad debe corresponder con la descripción de los bienes y/o mercancías registrados.

cartaporte30:Mercancias:MercanciaCondicionalCampo Unidad medida SAT (AH_UNIDSAT) que corresponde al producto del ítem de la factura.
UnidadEn este campo se podrá registrar la descripción de la unidad de medida propia de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:MercanciaOpcionalN/A
DimensionesEn este campo se podrán registrar las medidas del empaque de los bienes y/o mercancías que se trasladan. Se debe registrar la longitud, la altura y la anchura en centímetros o en pulgadas separados por una diagonal.cartaporte30:Mercancias:MercanciaOpcionalN/A
MaterialPeligroso

En este campo se deberá indicar el valor “Sí” o “No” cuando los bienes y/o mercancías que se trasladan son considerados como material peligroso.

Nota: La forma de identificar si se trata de un material peligroso es considerando la columna Material peligroso del catálogo c_ClaveProdServCP del complemento Carta Porte, publicado en el portal del SAT, el cual tiene la siguiente clasificación:

. “0” significa que los bienes y/o mercancías no son peligrosos.

. “1” significa que los bienes y/o mercancías son peligrosos.

. “0,1” significa que, a consideración del contribuyente, puede que sea o no peligroso.

cartaporte30:Mercancias:MercanciaOpcional

Si el código registrado en la columna BienesTransp, corresponde al Catálogo Producto/Servicio CP (S019) y además la columna Material Peligroso, del mismo catálogo, es "0,1" o "1", se informa:
"Sí"
En caso contrario el nodo no se generará en el XML.

CveMaterialPeligrosoEn este campo se podrá registrar la clave del tipo de material peligroso que se transporta de acuerdo a la NOM-002-SCT/2011, de acuerdo al catálogo c_MaterialPeligroso publicado en la sección del complemento Carta Porte en la página del SAT.cartaporte30:Mercancias:MercanciaCondicionalCampo Clave material peligroso (D2_GRPCST) del ítem de la factura.
EmbalajeEn este campo se podrá registrar la clave del tipo de embalaje del catálogo del complemento Carta Porte, c_TipoEmbalaje, publicado en el portal del SAT.cartaporte30:Mercancias:MercanciaCondicionalCampo Clave de embalaje (D2_TNATREC) del ítem de la factura.
DescripEmbalajeEn este campo se podrá registrar la descripción del embalaje en el que se transportan los bienes y/o mercancías que se consideran material o residuo peligroso.cartaporte30:Mercancias:MercanciaCondicionalDescripción del Catálogo Tipos de Embalaje (S021) de acuerdo al campo Clave de embalaje (D2_TNATREC) del ítem de la factura.
SectorCOFEPRISEn este campo se podrá registrar la clasificación del producto que se traslada a través de los distintos medios de transporte y que debe contar con autorización por la autoridad correspondiente. cartaporte30:Mercancias:MercanciaCondicionalCampo Sec.COFEPRIS (B5_SECTOR) correspondiente al producto del ítem de la factura. 
NombreIngredienteActivoEn este campo se podrá registrar el nombre común del ingrediente activo de los precursores, químicos de uso dual, plaguicidas o fertilizantes que se trasladan a través de los distintos medios de transporte.cartaporte30:Mercancias:MercanciaCondicional

Campo Ing. Activo  (B5_INGREDI) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "02-Precursores y químicos de uso dual o 05-Plaguicidas y fertilizantes".

NomQuimicoEn este campo se podrá registrar el nombre de la sustancia activa de los precursores, químicos de uso dual o sustancias tóxicas que se traslada a través de los distintos medios de transporte.cartaporte30:Mercancias:MercanciaCondicional

Campo Sust. Activa (B5_SUSACT) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "02-Precursores y químicos de uso dual o 04-Sustancias toxicas".

DenominacionGenericaProdEn este campo se podrá registrar el fármaco o la sustancia activa del medicamento, psicotrópico o estupefaciente que se traslada a través de los distintos medios de transporte. cartaporte30:Mercancias:MercanciaCondicional

Campo Nom.Gen.Prod (B5_NOMGER) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "01-Medicamento o 03-Psicotropicos y estupefacientes".

DenominacionDistintivaProdEn este campo se podrá registrar la marca con la que se comercializa el producto o nombre que le asigna el laboratorio o fabricante a sus especialidades farmacéuticas con el fin de distinguirlas de otras similares del medicamento, psicotrópico o estupefaciente que se traslada a través de los distintos medios de transporte.cartaporte30:Mercancias:MercanciaCondicional

Campo Marca Comer (B5_NOMCOME) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "01-Medicamento o 03-Psicotropicos y estupefacientes".


FabricanteEn este campo se podrá registrar el nombre o razón social del establecimiento que realiza la fabricación o manufactura del medicamento, precursor, químico de uso dual, psicotrópico o estupefaciente que se traslada a través de los distintos medios de transporte.cartaporte30:Mercancias:MercanciaCondicional

Campo Fabricante (B5_FABRICA) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "01-Medicamento o 02-Precursores y químicos de uso dual o 03-Psicotropicos y estupefacientes".

FechaCaducidadEn este campo se podrá registrar la fecha de caducidad del medicamento, psicotrópico o estupefaciente; o para expresar la fecha de reanálisis del precursor o químico de uso dual que se traslada a través de los distintos medios de transporte. Se expresa en la forma AAAA-MM-DD.cartaporte30:Mercancias:MercanciaCondicional

Campo Fecha caducidad (D2_DTVALID) del ítem de la factura.

Debe existir si SectorCOFEPRIS es "01-Medicamento o 02-Precursores y químicos de uso dual o 03-Psicotropicos y estupefacientes".

LoteMedicamentoEn este campo se podrá registrar la denominación que identifica y confiere trazabilidad del medicamento, precursor, químico de uso dual, psicotrópico o estupefaciente elaborado en un ciclo de producción, bajo condiciones equivalentes de operación y durante un periodo. cartaporte30:Mercancias:MercanciaCondicional

Campo Lote (D2_LOTECTL) del ítem de la factura.

Debe existir si SectorCOFEPRIS es "01-Medicamento o 02-Precursores y químicos de uso dual o 03-Psicotropicos y estupefacientes".

FormaFarmaceuticaEn este campo se podrá registrar la forma farmacéutica o mezcla del medicamento, precursor, químico de uso dual, psicotrópico o estupefaciente que presenta ciertas características físicas para su adecuada dosificación, conservación y administración.cartaporte30:Mercancias:MercanciaCondicional

Campo Cód.For.Farm (B5_CODFORM) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "01-Medicamento o 02-Precursores y químicos de uso dual o 03-Psicotropicos y estupefacientes".

CondicionesEspTranspEn este campo se podrá registrar la condición en la cual es necesario mantener el medicamento, precursor, químico de uso dual, psicotrópicos o estupefacientes durante el traslado y almacenamiento.cartaporte30:Mercancias:MercanciaCondicional

Campo Reg. Sanitar (B5_REGSAN) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "01-Medicamento o 03-Psicotropicos y estupefacientes".

RegistroSanitarioFolioAutorizacionEn este campo se podrá registrar el registro sanitario o folio de autorización con el que cuenta la empresa para el traslado del medicamento, psicotrópico o estupefaciente.cartaporte30:Mercancias:MercanciaCondicional

Campo Cond. Esp Tr (B5_CONDIC) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "01-Medicamento o 03-Psicotropicos y estupefacientes".

PermisoImportacionEn este campo se podrá registrar el folio del permiso de importación con el que cuenta el medicamento, precursor,
químico de uso dual, psicotrópico o estupefaciente.
cartaporte30:Mercancias:MercanciaCondicional

Campo FolioPer.mp (B5_PERIMP) correspondiente al producto del ítem de la factura. 

Cuando el campo Transporte internacional (A1X_INTERN) se registre "Sí", el campo Entrada o Salida (A1X_ENTSAL) contenga el valor "E-Entrada" y el atributo SectorCOFEPRIS contenga el valor "01-Medicamento o 02-Precursores y químicos de uso dual o 03-Psicotropicos y estupefacientes" este atributo debe existir, en caso contrario se debe omitir.

FolioImpoVUCEMEn este campo se podrá registrar el número de folio de importación VUCEM para la identificación del documento, para el traslado de medicamentos, precursores o químicos de uso dual, sustancias tóxicas, plaguicidas o fertizantes.cartaporte30:Mercancias:MercanciaCondicional

Campo VUCEM (B5_VUCEM) correspondiente al producto del ítem de la factura. 

Cuando el campo Transporte internacional (A1X_INTERN) se registre "Sí", el campo Entrada o Salida (A1X_ENTSAL) contenga el valor "E-Entrada" y el atributo SectorCOFEPRIS contenga el valor "01-Medicamento o 02-Precursores y químicos de uso dual o 04-Sustancias toxicas o 05-Plaguicidas y fertilizantes" este atributo debe existir, en caso contrario se debe omitir.

NumCASEn este campo se podrá registrar el número Chemical Abstracts Service (CAS) con el que se identifica el compuesto químico de la sustancia tóxica.cartaporte30:Mercancias:MercanciaCondicional

Campo CAS (B5_CAS) correspondiente al producto del ítem de la factura. 

Cuando el campo Transporte internacional (A1X_INTERN) se registre "Sí", el campo Entrada o Salida (A1X_ENTSAL) contenga el valor "E-Entrada" y el atributo SectorCOFEPRIS contenga el valor "04-Sustancias toxicas" este atributo debe existir, en caso contrario se debe omitir.

RazonSocialEmpImpEn este campo se podrá registrar el nombre o razón social de la empresa importadora de las sustancias tóxicas.cartaporte30:Mercancias:MercanciaCondicional

Campo Emp. Importa (B5_EMPIMP) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es "04-Sustancias toxicas".

NumRegSanPlagCOFEPRISEn este campo se podrá registrar el número de registro sanitario para plaguicidas o fertilizantes cuya importación, comercialización y uso están permitidos en México, mismo que emite la Comisión Intersecretarial para el Control del Proceso y Uso de Plaguicidas, Fertilizantes y Sustancias Tóxicas (CICLOPLAFEST). cartaporte30:Mercancias:MercanciaCondicional

Campo Reg. Sanitar (B5_REGSAN) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es  "05-Plaguicidas y fertilizantes".

DatosFabricanteEn este campo se podrá registrar el país y nombre o razón social de quien produce o fabrica el ingrediente activo del plaguicida o fertilizante. cartaporte30:Mercancias:MercanciaCondicional

Campo Fabricante (B5_FABRICA) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es  "05-Plaguicidas y fertilizantes".

DatosFormuladorEn este campo se podrá registrar el país y nombre o razón social de quien formula el ingrediente activo del plaguicida o fertilizantecartaporte30:Mercancias:MercanciaCondicional

Campo Formulador (B5_DATFOR) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es  "05-Plaguicidas y fertilizantes".

DatosMaquiladorEn este campo se podrá registrar el país y nombre o razón social de quien maquila el ingrediente activo del plaguicida o fertilizante.cartaporte30:Mercancias:MercanciaCondicional

Campo Maquilador (B5_DATMAQ) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es  "05-Plaguicidas y fertilizantes".

UsoAutorizadoEn este campo se podrá registrar el uso autorizado del
plaguicida o fertilizante de acuerdo a la regulación del país
cartaporte30:Mercancias:MercanciaCondicional

Campo Uso autorizado (B5_USOAUT) correspondiente al producto del ítem de la factura. 

Debe existir si SectorCOFEPRIS es  "05-Plaguicidas y fertilizantes".

PesoEnKgEn este campo se deberá registrar el peso estimado en kilogramos de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:MercanciaRequeridoCampo Peso Producto Prorrateo (D2_PESO) del ítem de la factura.
ValorMercanciaEn este campo se podrá registrar el valor estimado de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:MercanciaCondicionalCampo Valor mercancía (D2_VLRFUE) del ítem de la factura.
MonedaEn este campo se deberá registrar si existe información en el campo “ValorMercancia” y sirve para registrar la clave de la moneda contenida en el catálogo c_Moneda de CFDI, publicado en el portal del SAT, cuando se use moneda nacional se registrará MXN.cartaporte30:Mercancias:MercanciaCondicionalCampo Moneda SAT (CTO_MOESAT) relacionado con el campo Moneda de la Factura (F2_MOEDA).
FraccionArancelariaEn este campo se deberá registrar la clave de la fracción arancelaria del catálogo catComExt:c_FraccionArancelaria, publicado en el portal del SAT, que corresponda con la descripción de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:MercanciaCondicionalCampo Fracción arancelaria (D2_FRACCA) del ítem de la factura.
UUIDComercioExtAtributo opcional para expresar el folio fiscal (UUID) del comprobante de comercio exterior que se relaciona.cartaporte30:Mercancias:MercanciaCondicionalCampo UUID comercio exterior (D2_FCICOD) del ítem de la factura.
TipoMateriaEn este campo se podrá registrar el estado de la materia o producto al realizar una operación de comercio exterior a través de los distintos medios de transporte.cartaporte30:Mercancias:MercanciaCondicional

Campo Tipo de materia (B5_TPOMAT) correspondiente al producto del ítem de la factura.

Cuando el campo Transporte internacional (A1X_INTERN) se registre "Sí", el campo Entrada o Salida (A1X_ENTSAL) contenga el valor "E-Entrada" y contener un valor del catálogo c_TipoMateria, en caso contrario se debe omitir este atributo debe existir, en caso contrario se debe omitir.

DescripcionMateriaEn este campo se podrá registrar la descripción del estado de la materia o producto al realizar una operación de comercio exterior a través de los distintos medios de transporte.cartaporte30:Mercancias:MercanciaCondicional

Campo Descripción de materia (B5_DESMAT) correspondiente al producto del ítem de la factura.

Cuando el campo Tipo de materia (B5_TPOMAT) contenga el valor "05 - Otra", este atributo debe existir, en caso contrario se debe omitir



cartaporte30:Mercancias:Mercancia:DocumentacionaduaneraOpcional

Nodo condicional para registrar la información del(los) documento(s)
aduanero(s) que se encuentra(n) asociado(s) al traslado de los bienes
y/o mercancías por los distintos medios de transporte de procedencia
extranjera para acreditar la legal estancia o tenencia durante su
traslado en territorio nacional.

TipoDocumentoEn este campo se podrá registrar el tipo de documento aduanero que se encuentra asociado al traslado de los bienes y/o mercancías de procedencia extranjera durante su traslado en territorio nacional.cartaporte30:Mercancias:Mercancia:DocumentacionaduaneraRequerido

Campo Tpo Doc Adu (D2_PAFMD5) del ítem de la factura.

Cuando el campo Entrada o Salida (A1X_ENTSAL) contenga el valor "S-Salida", este atributo debe contener una clave distinta de "01-Pedimento" del catálogo "c_DocumentoAduanero".

NumPedimentoEn este campo se podrá registrar el número de pedimento de importación que se encuentra asociado con el traslado de los bienes y/o mercancías de procedencia extranjera para acreditar la legal estancia y tenencia durante su traslado en territorio nacional, el cual se expresa en el siguiente formato: últimos 2 dígitos del año de validación seguidos por dos espacios, 2 dígitos de la aduana de despacho seguidos por dos espacios, 4 dígitos del número de la patente seguidos por dos espacios, 1 dígito que corresponde al último dígito del año en curso, salvo que se trate de un pedimento consolidado iniciado en el año inmediato anterior o del pedimento original de una rectificación, seguido de 6 dígitos de la numeración progresiva por aduana.cartaporte30:Mercancias:Mercancia:DocumentacionaduaneraCondicional

Campo Num. Ped. (D2_PEDISAT) del ítem de la factura.

Cuando el campo Entrada o Salida (A1X_ENTSAL) contenga el valor "S-Salida" y el atributo “TipoDocumento” contenga el valor  "01-Pedimento" del catálogo "c_DocumentoAduanero", este atributo debe existir, en caso contrario se debe omitir.


IdentDocAduaneroEn este campo se podrá registrar el identificador o folio del
documento aduanero que se encuentra asociado al
traslado de los bienes y/o mercancías de procedencia
extranjera para acreditar la legal estancia o tenencia
durante su traslado en territorio nacional.
cartaporte30:Mercancias:Mercancia:DocumentacionaduaneraCondicional

Campo Num. Ped. (D2_LIQGR) del ítem de la factura.

Cuando el campo Tpo Doc Adu (D2_PAFMD5) contenga una clave de "01-Pedimento" del catálogo "c_DocumentoAduanero", este atributo debe existir y contener un RFC que se encuentre en la lista de RFC inscritos no cancelados del SAT (l_RFC) o un RFC genérico, en caso contrario se debe omitir.

RFCImpoEn este campo se podrá registrar el RFC del importador
de los bienes y/o mercancías que fue registrado en la
documentación aduanera correspondiente y este se
encuentre en la lista de RFC inscritos no cancelados del
SAT (l_RFC)
cartaporte30:Mercancias:Mercancia:DocumentacionaduaneraOpcional

Campo RFC Imp (D2_NRECAGR) del ítem de la factura.

Cuando el campo Num. Ped. (D2_PEDISAT) contenga una valor, este atributo debe existir, en caso contrario se debe omitir.



cartaporte30:Mercancias:Mercancia:PedimentosOpcionalNodo condicional para registrar la información del(los) número(s) de pedimento(s) de importación que se encuentra(n) asociado(s) al traslado de los bienes y/o mercancías de procedencia extranjera para acreditar la legal estancia o tenencia durante su traslado en territorio nacional.
Pedimento

En este campo se deberá registrar el número de pedimento correspondiente a la importación del bien o mercancía, el cual se integra de izquierda a derecha de la siguiente manera:

Últimos 2 dígitos del año de validación seguidos por dos espacios, 2 dígitos de la aduana de despacho seguidos por dos espacios, 4 dígitos del número de la patente seguidos por dos espacios, 1 dígito que corresponde al último dígito del año en curso, salvo que se trate de un pedimento consolidado iniciado en el año inmediato anterior o del pedimento original de una rectificación, seguido de 6 dígitos de la numeración progresiva por aduana.

cartaporte30:Mercancias:Mercancia:PedimentosRequeridoCampo Num. Ped. (D2_PEDISAT) del ítem de la factura.


cartaporte30:Mercancias:Mercancia:GuiasIdentificacionOpcional

Nodo condicional para registrar la información del(los) número(s) de guía(s) que se encuentre(n) asociado(s) al(los) paquete(s) que se traslada(n) dentro del territorio nacional.

Aplica a Servicio de Paquetería y Mensajería

NumeroGuiaIdentificacionAtributo requerido para expresar el número de guía de cada paquete que se encuentra asociado con el traslado de los bienes y/o mercancías en territorio nacional.cartaporte30:Mercancias:Mercancia:GuiasIdentificacionRequeridoN/A
DescripGuiaIdentificacionAtributo requerido para expresar la descripción del contenido del paquete o carga registrada en la guía, o en el número de identificación, que se encuentra asociado con el traslado de los bienes y/o mercancías dentro del territorio nacional.cartaporte30:Mercancias:Mercancia:GuiasIdentificacionRequeridoN/A
PesoGuiaIdentificacionAtributo requerido para indicar en kilogramos, el peso del paquete o carga que se está trasladando en territorio nacional y que se encuentra registrado en la guía o el número de identificación correspondiente.cartaporte30:Mercancias:Mercancia:GuiasIdentificacionRequeridoN/A


cartaporte30:Mercancias:Mercancia:CantidadTransportaOpcional

Nodo opcional para registrar la cantidad de los bienes y/o mercancías que se trasladan a través de los distintos medios de transporte, que será captada o distribuida en distintos puntos, a fin de identificar el punto de origen y destino correspondiente.

CantidadEn este campo se podrá registrar el número de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:Mercancia:CantidadTransportaRequeridoCampo Cantidad del producto (D2_QUANT), del ítem de la factura.
IDOrigenEn este campo se deberá capturar un valor de los registrados en el campo “IDUbicacion”, con valor “Origen” en el campo “TipoUbicacion”.cartaporte30:Mercancias:Mercancia:CantidadTransportaRequerido

Campo Id Ub Origen (D2_CNATREC) del ítem de la factura.

Debe corresponder a algún Id Ubicación (A1Y_ORIGEN) con Tipo Ubicación (A1Y_TIPEST) = "Origen".

IDDestinoEn este campo se deberá capturar un valor de los registrados en el campo “IDUbicacion”, con valor “Destino” en el campo “TipoUbicacion”.cartaporte30:Mercancias:Mercancia:CantidadTransportaRequerido

Campo Id Ub Destino (D2_GRUPONC) del ítem de la factura.

Debe corresponder a algún Id Ubicación (A1Y_ORIGEN) con Tipo Ubicación (A1Y_TIPEST) = "Destino".

CvesTransporteEn este campo se deberá registrar la clave de del transporte conforme al catálogo c_CveTransporte del complemento Carta Porte, publicado en el portal del SAT.cartaporte30:Mercancias:Mercancia:CantidadTransportaOpcional"01"


cartaporte30:Mercancias:Mercancia:DetalleMercanciaCondicional

Nodo condicional para registrar especificaciones de los bienes y/o mercancías que se trasladan a través de los distintos medios de transporte.

Aplica para transporte maritimo.

UnidadPesoMercEn este campo se deberá registrar la clave de la unidad de peso de acuerdo al catálogo c_ClaveUnidadPeso del complemento Carta Porte, que se encuentra publicado en el Portal de Internet del SAT.cartaporte30:Mercancias:Mercancia:DetalleMercanciaRequeridoN/A
PesoBrutoEn este campo se deberá registrar el peso bruto total de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:Mercancia:DetalleMercanciaRequeridoN/A
PesoNetoEn este campo se deberá registrar el peso neto de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:Mercancia:DetalleMercanciaRequeridoN/A
PesoTaraEn este campo se deberá registrar el valor que corresponde a la diferencia del valor capturado en el campo PesoBruto, y el valor registrado en el campo PesoNeto de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:Mercancia:DetalleMercanciaRequeridoN/A
NumPiezasEn este campo se podrá registrar el número de piezas de los bienes y/o mercancías que se trasladan.cartaporte30:Mercancias:Mercancia:DetalleMercanciaOpcionalN/A


cartaporte30:Mercancias:AutotransporteCondicionalNodo condicional para registrar la información que permita la identificación del autotransporte de carga, por medio del cual se transportan los bienes y/o mercancías, que transitan a través de las carreteras del territorio nacional.
PermSCT

Este campo sirve para registrar la clave del tipo de permiso para realizar el servicio de traslado de bienes y/o mercancías.

cartaporte30:Mercancias:AutotransporteRequeridoCampo Tipo de permiso SCT (A1X_PERSCT) de Carta Porte.
NumPermisoSCTEste campo sirve para registrar el número de permiso otorgado a la unidad que realiza el traslado de bienes y/o mercancías en territorio nacional.cartaporte30:Mercancias:AutotransporteRequeridoCampo Número permiso SCT (A1X_PERMIS) de Carta Porte.


cartaporte30:Mercancias:Autotransporte:IdentificacionVehicularRequeridoNodo requerido para registrar los datos de identificación del autotransporte en el que se trasladan los bienes y/o mercancías.
ConfigVehicularEn este campo se debe registrar la clave asignada al tipo de transporte en el que se realiza el traslado de los bienes y/o mercancías, conforme al catálogo c_ConfigAutotransporte del complemento Carta Porte, publicado en el portal del SAT.cartaporte30:Mercancias:Autotransporte:IdentificacionVehicularRequeridoCampo Configuración vehicular (DA3_CONFIG) del Vehículo, relacionado con el campo Código de vehículo (A1X_VEHIC) de Carta Porte.
PesoBrutoVehicularEn este campo se debe registrar en toneladas el peso bruto
vehicular permitido del autotransporte de acuerdo a la
NOM-SCT-012-2017 que es utilizado para realizar el
traslado de los bienes y/o mercancías.
cartaporte30:Mercancias:Autotransporte:IdentificacionVehicularRequeridoCampo Peso Bruto V (A1X_PESOBV) de Carta Porte.
PlacaVMEn este campo se deberá registrar la placa del vehículo en el que se realiza el traslado de bienes y/o mercancías, se deben registrar solo los caracteres alfanuméricos, sin guiones y espacios.cartaporte30:Mercancias:Autotransporte:IdentificacionVehicularRequeridoCampo Placa (DA3_PLACA) del Vehículo, relacionado con el campo Código de vehículo (A1X_VEHIC) de Carta Porte.
AnioModeloVMEn este campo se deberá registrar el año del vehículo que se está utilizando para trasladar los bienes y/o mercancías.cartaporte30:Mercancias:Autotransporte:IdentificacionVehicularRequeridoCampo Número de placa (DA3_ANOMOD) del Vehículo, relacionado con el campo Código de vehículo (A1X_VEHIC) de Carta Porte.


cartaporte30:Mercancias:Autotransporte:SegurosRequerido

Nodo requerido para registrar los datos de las pólizas de seguro que cubren los riesgos en el traslado de los bienes y/o mercancías.

Obligatorio si MaterialPeligroso = "Sí" en alguna mercancía.

AseguraRespCivilEn este campo se deberá registrar el nombre de la aseguradora que cubre los riesgos de responsabilidad civil del autotransporte utilizado para el traslado de los bienes y/o mercancías.cartaporte30:Mercancias:Autotransporte:SegurosRequeridoCampo Nombre de la aseguradora (A1X_ASEGUR) de Carta Porte.
PolizaRespCivilEn este campo se deberá registrar el número de la póliza de seguro que emite la aseguradora que cubre los riesgos de responsabilidad civil del autotransporte utilizado para el traslado de los bienes y/o mercancías.cartaporte30:Mercancias:Autotransporte:SegurosRequeridoCampo Número de póliza (A1X_POLIZA) de Carta Porte.
AseguraMedAmbienteEn este campo se podrá registrar el nombre de la aseguradora que cubre los posibles daños al medio ambiente, que es aplicable para los transportistas que realicen el traslado de materiales o residuos peligrosos, es decir, cuando se capture información en el campo MaterialPeligroso.cartaporte30:Mercancias:Autotransporte:SegurosOpcionalCampo Aseg Med Amb (A1X_ASEGMA) de Carta Porte.
PolizaMedAmbienteEn este campo se podrá registrar el número de póliza asignado por la aseguradora, que cubre los posibles daños al medio ambiente aplicable para los transportistas que realicen el traslado de materiales o residuos peligrosos.cartaporte30:Mercancias:Autotransporte:SegurosOpcionalCampo Póliza Med A (A1X_POLMA) de Carta Porte.
AseguraCargaEn este campo se podrá registrar el nombre de la aseguradora que cubre los riesgos de la carga (bienes y/o mercancías) transportada.cartaporte30:Mercancias:Autotransporte:SegurosOpcionalCampo Aseg. Carga (A1X_ASECGA) de Carta Porte.
PolizaCargaEn este campo se podrá registrar el número de póliza que emite la aseguradora que cubre los riesgos de la carga (bienes y/o mercancías) transportada.cartaporte30:Mercancias:Autotransporte:SegurosOpcionalCampo Póliza Carga (A1X_POLCGA) de Carta Porte.
PrimaSeguroEn este campo se podrá registrar el valor del importe de la prima del seguro contratado, por el cargo adicional acordado entre el transportista y el cliente conforme a lo establecido en las disposiciones jurídicas que para tal efecto emita la SCT.cartaporte30:Mercancias:Autotransporte:SegurosOpcionalCampo Prima Seguro (A1X_PRISEG) de Carta Porte.


cartaporte30:Mercancias:Autotransporte:Remolques:RemolqueOpcional

Nodo condicional para registrar los datos del(los) remolque(s) o semirremolque(s) que se adaptan al autotransporte para realizar el traslado de los bienes y/o mercancías.

Solo se podrán registrar hasta 2 secciones de Remolque.

Obligatorio si ConfigVehicular en el catálogo c_ConfigAutotransporte, columna “Remolque” es “0,1” o “1”, en caso contrario se debe omitir.

SubTipoRemEn este campo se deberá registrar la clave del subtipo de remolque o semirremolque conforme al catálogo c_SubTipoRem del complemento Carta Porte, publicado en el portal del SAT.cartaporte30:Mercancias:Autotransporte:Remolques:RemolqueRequeridoCampo Subtipo remolque (DA3_SUBREM) del Vehículo, relacionado con el campo Código de remolque (A1X_REMOLQ | A1XREMOL2) de Carta Porte.
PlacaEn este campo se deberá registrar la placa del remolque o semirremolque en el que se realiza el traslado de bienes y/o mercancías, se deben registrar solo los caracteres alfanuméricos, sin guiones ni espacios.cartaporte30:Mercancias:Autotransporte:Remolques:RemolqueRequeridoCampo Placa (DA3_PLACA) del Vehículo, relacionado con el campo Código de remolque (A1X_REMOLQ | A1XREMOL2) de Carta Porte.


cartaporte30:FiguraTransporteOpcionalNodo opcional para indicar los datos de la figura del transporte que interviene en el traslado de los bienes o mercancías, cuando el dueño del medio de transporte es diferente del emisor del comprobante con el complemento carta porte.


cartaporte30:FiguraTransporte:TiposFigura

 TipoFiguraEn este campo se deberá registrar la clave de la figura de transporte conforme al catálogo c_FiguraTransporte del complemento Carta Porte que se encuentra publicado en el Portal de Internet del SAT.cartaporte30:FiguraTransporte:TiposFiguraRequerido

Indica tipo de registro que se informa:

"01" = Operador

"02" = Propietario

"03" = Arrendador

 RFCFigura

En este campo se deberá registrar la clave en el RFC de la figura de transporte que interviene en el traslado de bienes y/o mercancías.

Si la figura de transporte que interviene en el traslado de bienes y/o mercancías es un residente en el extranjero, este campo se debe omitir.

cartaporte30:FiguraTransporte:TiposFiguraCondicional

Si TipoFigura es "01":

Campo RFC del Conductor (DA4_CGC) del catálogo de conductores, relacionado con el campo Código de operador (A1Z_OPERAD) de Operadores.

Si TipoFigura es "02" o "03":

Campo RFC del Transportista (A4_CGC) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.

 NumLicenciaEn este campo se deberá registrar el número de la licencia de conducir o permiso otorgado al operador de la unidad en la que se está realizando el traslado de bienes y/o mercancías vía autotransporte.cartaporte30:FiguraTransporte:TiposFiguraCondicional

Si TipoFigura es "01":

Campo No. Licencia de conducir (DA4_NUMCNH) del catálogo de conductores, relacionado con el campo Código de operador (A1Z_OPERAD) de Operadores.

Si TipoFigura es "02" o "03":

N/A

 NombreFiguraEn este campo se deberá registrar el nombre de la figura de transporte que interviene en el traslado de bienes y/o mercancías.cartaporte30:FiguraTransporte:TiposFiguraOpcional

Si TipoFigura es "01":

Campo Nombre del conductor (DA4_NOME) del catálogo de conductores, relacionado con el campo Código de operador (A1Z_OPERAD) de Operadores.

Si TipoFigura es "02" o "03":

Campo Nombre de Transportadora (A4_NOME) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.

 NumRegIdTribFiguraEn este campo se podrá registrar el número de identificación fiscal que corresponde al tipo de la figura de transporte.cartaporte30:FiguraTransporte:TiposFiguraCondicionalN/A
 ResidenciaFiscalFiguraEn este campo podrás registrar la clave del país que corresponde al tipo de figura de transporte, siempre que se haya registrado un valor en el campo “NumRegIdTrib”.cartaporte30:FiguraTransporte:TiposFiguraCondicionalN/A


cartaporte30:FiguraTransporte:TiposFigura:PartesTransporteCondicional

Nodo condicional para indicar los datos de las partes del transporte de las cuales el emisor del comprobante es distinto al dueño de las mismas, por ejemplo: vehículos, máquinas, contenedores, plataformas, etc; mismos que son utilizados para el traslado de los bienes y/o mercancías.

Aplica si TipoFigura es 02-Propietario o 03-Arrendador.

ParteTransporteEn este campo se deberá registrar la clave que pertenece al transporte o la parte de transporte que no es propiedad del emisor del comprobante y que se encuentra en el catálogo c_ParteTransporte del complemento Carta Porte, publicado en el Portal del SAT.cartaporte30:FiguraTransporte:TiposFigura:PartesTransporteRequeridoCampo Parte Transporte (AE0_PARTE)  de Propietarios/Arrendatarios.


cartaporte30:FiguraTransporte:TiposFigura:DomicilioOpcionalNodo opcional para registrar información del domicilio del(los) tipo(s) de figura transporte que intervenga(n) en el traslado de los bienes y/o mercancías.
 CalleEn este campo se podrá registrar el nombre de la calle en la que está ubicado el domicilio de la Figura de transporte.cartaporte30:FiguraTransporte:TiposFigura:DomicilioRequeridoCampo Dirección de la Transportad. (A4_END) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.
 NumeroExteriorEn este campo se podrá registrar el número exterior en donde se ubica el domicilio de la Figura de transporte.cartaporte30:FiguraTransporte:TiposFigura:DomicilioOpcionalCampo Número exterior (A4_NUMEXT) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.
 NumeroInteriorEn este campo se podrá registrar el número interior en caso de existir, en donde se ubica el domicilio de la Figura de transporte.cartaporte30:FiguraTransporte:TiposFigura:DomicilioOpcionalCampo Número exterior (A4_NUMINT) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.
 ColoniaEn este campo se podrá registrar la clave de la colonia en donde se ubica el domicilio de la Figura de transporte. El valor registrado en este campo debe coincidir con la clave del código postal registrado en el campo “CodigoPostal”.cartaporte30:FiguraTransporte:TiposFigura:DomicilioOpcionalCampo Código de colonia (A4_CBAIRRO) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.
 Localidad

En este campo se podrá registrar la clave que corresponda a la ciudad o población en donde se encuentra ubicado el domicilio de la Figura de transporte, si la clave del país es distinta a “MEX” se puede registrar texto libre.

La clave capturada en este campo debe coincidir con el estado capturado en el campo “Estado”.

cartaporte30:FiguraTransporte:TiposFigura:DomicilioOpcionalCampo Código localidad (A4_CLOCALI) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.
 ReferenciaEste campo sirve para especificar una referencia geográfica adicional que permita una fácil o precisa ubicación del domicilio de la Figura de transporte.cartaporte30:FiguraTransporte:TiposFigura:DomicilioOpcionalN/A
 Municipio

En este campo se podrá registrar el municipio, delegación, alcaldía o condado en donde se encuentra ubicado el domicilio de la Figura de transporte, si la clave del país es distinta a “MEX” se puede registrar texto libre.

El dato capturado en este campo debe coincidir con el estado capturado en el campo “Estado”.

cartaporte30:FiguraTransporte:TiposFigura:DomicilioOpcionalCampo Código del municipio (A4_COD_MUN) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.
 Estado

En este campo se deberá registrar el estado, entidad, región, comunidad, en donde se encuentra ubicado el domicilio de la Figura de transporte, si la clave del país es distinta a “MEX”, “USA” o "CAN” se puede registrar texto libre.

El dato capturado en este campo debe coincidir con el país capturado en el campo “Pais”.

cartaporte30:FiguraTransporte:TiposFigura:DomicilioRequeridoCampo Estado del Transportista (A4_EST) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.
 Pais

En este campo se deberá registrar la clave del país en donde se encuentra ubicado el domicilio de la Figura de transporte.

Este campo debe contener una clave del catálogo c_Pais, publicado en el portal del SAT.

cartaporte30:FiguraTransporte:TiposFigura:DomicilioRequeridoCampo Código del país (A4_CODPAIS) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.
 CodigoPostal

En este campo se deberá registrar la clave del código postal en donde se encuentra el domicilio de la Figura de transporte.

El dato capturado en este campo debe coincidir con:

- La columna c_Estado, debe ser la misma que la capturada en el campo Estado.

- La columna c_Municipio, debe ser la misma que la capturada en el campo Municipio.

- La columna c_Localidad, debe ser la misma que la capturada en el campo Localidad.

cartaporte30:FiguraTransporte:TiposFigura:DomicilioRequeridoCampo Cod Dirección Postal (A4_CEP) del catálogo de transportes, relacionado con el campo Transportadora (AE0_TRANSP) de Propietarios/Arrendatarios.


02. EJEMPLO DE UTILIZACIÓN

  • Realice las actualizaciones y configuración de catálogos indicados en la sección 03. CONFIGURACIONES.


IMPORTANTE

Para el correcto funcionamiento de los casos que a continuación se mencionan es necesario tener actualizadas las rutinas con fecha igual o superior a las mencionadas en la sección 01. VISIÓN GENERAL en el apartado de Rutina utilizadas, y algunos rechazos o validaciones pueden ser validaciones propias del PAC ya que se encuentra en etapa de pruebas de la nueva funcionalidad de Carta Porte.

Sector COFEPRIS

En esta nueva versión del Complemento Carta Porte 3.0 los contribuyentes que prestan servicios de autotransporte a empresas de la industria farmacéutica y se encargan del transporte de sustancias controladas deberán dar nueva información mas detallada de sus operaciones al SAT a partir del 1 de Enero de 2024.

Para ello se agregó el  S032- Catálogo de Sector Cofepris (c_SectorCOFEPRIS.csv), está información es importante indicarla antes de generar una Factura con Complemento de Carta Porte dentro del Complementos del Producto (Tabla SB5), e indicarlo en el campo Sec.COFEPRIS (B5_SECTOR).

Al indicar algún dato en el campo Sec.COFEPRIS (B5_SECTOR), al realizar el timbrado podrá solicitar algún otra información requerida según el código de Sector seleccionado para conocer la información requerida en base al sector Cofepris véase Esquema de generación del XML de Complemento de Carta Porte


Factura de Ingresos (Normal) - Facturación del Servicio y los Productos se Trasladan (Los Productos solo se visualizan en nodo de Mercancías)

El presente caso aplica para cuando únicamente se Factura el Servicio y los Productos se trasladan, es decir, los productos ya fueron facturados previamente.

  1. En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación Facturaciones (MATA467N).
  2. Incluir una Factura de Venta de tipo Normal.
  3. Informar el campo ¿Carta Porte? (F2_TPCOMPL) con el valor S-Si.
  4. En el detalle informar:
    • El Producto que fue configurado como Servicio (el Campo Tipo (B1_TIPO) contienen el valor "SV").
    • Utilizar una Tipo de Salida con cálculo de impuestos y retenciones.
    • El o los productos a transportar, utilizando un Tipo de Salida que no afecte a stock ni a financiero.

      IMPORTANTE

      Se deben dejar los campos Valor Unit. (D2_PRCVEN) y Valor Total (D2_TOTAL) vacíos e informar el campo el campo Vl.Mercancía (D2_VLRFUE).

      Si el Producto es considerado como material peligroso según la columna Material peligroso del catálogo c_ClaveProdServCP del SAT se deben informar los campos Cve.Mat.Pel. (D2_GRPCST) y Embalaje (D2_TNATREC).

      Si en la configuración del Complementos del Producto el campo Sec COFEPRIS (B5_SECTOR) tiene el valor 01, 02 o 03, se deben informar los campos Lote (D2_LOTECTL) y Validez Lote (D2_DTVALID).

  5. Desde Otras acciones ejecutar la acción Carta Porte.
  6. Informar los datos para el Complemento de Carta Porte y presionar Confirmar.

    IMPORTANTE

    Es necesario informar los datos de la sección Ubicaciones, informando al menos un Origen y/o Destino, e indicando el campo RFC (A1Y_RFCORI).

  7. Presionar Grabar para confirmar el guardado de la Factura de Venta,
  8. Confirmar la generación del comprobante fiscal digital
  9. Confirmar el timbrado del comprobante fiscal digital.
  10. Validar que el timbrado haya sido exitoso, que en el XML se visualice el nodo Complemento:cartaporte30.

Factura de Ingresos (Normal) - Facturación del Servicio, y los Productos se Facturan/Trasladan (Los Productos se visualizan en el nodo de Conceptos y en el nodo de Mercancías)

El presente caso aplica para se Factura el  Servicio y donde también se Facturan los Productos a trasladar, es decir, los productos que NO  fueron facturados previamente (Para esta funcionalidad es importante tener en el repositorio la rutina LOCXFUNA con fecha igual o mayor al 17/12/2021).

  1. En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación Facturaciones (MATA467N).
  2. Incluir una Factura de Venta de tipo Normal.
  3. Informar el campo ¿Carta Porte? (F2_TPCOMPL) con el valor S-Si.
  4. En el detalle informar:
    • El Producto que fue configurado como Servicio (el Campo Tipo (B1_TIPO) contienen el valor "SV").
    • Utilizar una Tipo de Salida con cálculo de impuestos y retenciones.
    • El o los productos a transportar, utilizando un Tipo de Salida que afecte a financiero (F4_DUPLIC igual a 'S') y con cálculo de Impuesto.

      IMPORTANTE

      Se deben informar los campos Valor Unit. (D2_PRCVEN) y Valor Total (D2_TOTAL) con valor mayor a cero y dejar el campo Vl.Mercancía (D2_VLRFUE) vacío.

      Si el Producto es considerado como material peligroso según la columna Material peligroso del catálogo c_ClaveProdServCP del SAT se deben informar los campos Cve.Mat.Pel. (D2_GRPCST) y Embalaje (D2_TNATREC).

  5. Desde Otras acciones ejecutar la acción Carta Porte.
  6. Informar los datos para el Complemento de Carta Porte y presionar Confirmar.

    IMPORTANTE

    Es necesario informar los datos de la sección Ubicaciones, informando al menos un Origen y/o Destino, e indicando el campo RFC (A1Y_RFCORI).

  7. Presionar Grabar para confirmar el guardado de la Factura de Venta,
  8. Confirmar la generación del comprobante fiscal digital
  9. Confirmar el timbrado del comprobante fiscal digital.
  10. Validar que el timbrado haya sido exitoso, que en el XML se visualice el nodo cartaporte30:CartaPorte y que los Productos se visualicen en el nodo de cfdi:Conceptos y cartaporte30:Mercancias.

Factura de Traslado

El presente caso aplica para cuando exclusivamente se realizará el traslado de los Productos (es decir no habrá el cobro de un servicio porque se tiene transporte propio)

  1. En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación Facturaciones (MATA467N).
  2. Incluir una Factura de Venta de tipo Traslado.

    IMPORTANTE

    Para el proceso de Traslados con Complemento Carta Porte 3.0 es necesario que el RFC del Cliente (A1_CGC) sea el mismo que el RFC del Emisor (SM0_CGC).

  3. Informar el campo ¿Carta Porte? (F2_TPCOMPL) con el valor S-Si.
  4. En el detalle informar:
    • El o los productos a transportar, utilizando un Tipo de Salida que no afecte a stock ni a financiero (sin utilizar impuestos a calcular y configurando el campo Ctd. Cero (F4_QTDZERO) con opción 2-No).

      IMPORTANTE

      Se deben dejar los campos Valor Unit. (D2_PRCVEN) y Valor Total (D2_TOTAL) vacíos e informar el campo el campo Vl.Mercancía (D2_VLRFUE).

      Si el Producto es considerado como material peligroso según la columna Material peligroso del catálogo c_ClaveProdServCP del SAT se deben informar los campos Cve.Mat.Pel. (D2_GRPCST) y Embalaje (D2_TNATREC).

      Si en la configuración del Complementos del Producto el campo Sec COFEPRIS (B5_SECTOR) tiene el valor 01, 02 o 03, se deben informar los campos Lote (D2_LOTECTL) y Validez Lote (D2_DTVALID).

  5. Desde Otras acciones ejecutar la acción Carta Porte.
  6. Informar los datos para el Complemento de Carta Porte y presionar Confirmar.

    IMPORTANTE

    Es necesario informar los datos de la sección Ubicaciones, informando al menos un Origen y/o Destino, e indicando el campo RFC (A1Y_RFCORI).

  7. Presionar Grabar para confirmar el guardado de la Factura de Venta,
  8. Confirmar la generación del comprobante fiscal digital
  9. Confirmar el timbrado del comprobante fiscal digital.
  10. Validar que el timbrado haya sido exitoso, que en el XML se visualice el nodo Complemento:cartaporte30.


Importante

Para la generación de documentos con Complemento de Carta porte de Ingresos o Traslado, se deben seleccionar las opciones Normal o Traslado al entrar a la rutina de Facturaciones (MATA467N)


Para los productos a transportar, al momento de generar el detalle de la Factura de Venta es necesario informar los siguientes datos:

  • Peso (D2_PESO) - Requerido.
  • Código de Material Peligroso (D2_GRPCST) - Solo aplica si el producto está catalogado como material peligroso.
  • Embalaje (D2_TNATREC) - Solo aplica si el producto está catalogado como material peligroso.
  • UUID comercio exterior (D2_FCICOD) - Opcional.
  • Valor mercancía (D2_VLRFUE) - (Obligatorio para TransporteAereo, caso contrario se puede omitir).
  • Id Ub Origen (D2_CNATREC) - Debe coincidir con unos de los Identificadores de Ubicación de Origen que se registre en la sección Ubicaciones de la Carta Porte.
  • Id Ub Destin (D2_GRUPONC) - Debe coincidir con unos de los Identificadores de Ubicación de Destino que se registre en la sección Ubicaciones de la Carta Porte.
  • Si el Producto no está catalogado como Material Peligroso en el catálogo c_ClaveProdServCP del SAT el nodo MaterialPeligroso no es informado el  XML.

En la pantalla de Carta Porte:

  • Para los vehículos es necesario configurar el campo Config Vehíc (DA3_CONFIG).
  • Para los remolques es necesario configurar el campo Sub.Remolq(DA3_SUBREM).
  • Si el código de Vehículo (A1X_VEHIC) informado, tiene configurado en el campo Config Vehíc (DA3_CONFIG) un valor del Catálogo del SAT c_ConfigAutotransporte cuya columna Remolque contiene un valor "0,1" o "1", se deberá informar el campo Remolque (A1X_REMOLQ) o si utiliza más de un remolque el campo Remolque 2(A1XREMOL2).

  • Si dentro de los ítems de la Factura de Venta (NF) se encuentran Productos que tienen configurado el campo Prod/Serv SA (B1_PRODSAT) con un código que de acuerdo al catálogo del SAT c_ClaveProdServCP donde la columna de Material Peligroso es "0,1" o "1", se deberán informar los campos Aseg Med Amb (A1X_ASEGMA) y Póliza Med A (A1X_POLMA), en caso contrario estos deberán quedar vacíos.

  • En el grid de Ubicaciones se deberán de informar los Origenes y Destinos de la mercancía a transportar, donde la columna Id ubicación (A1Y_ORIGEN) solo se debe informar si los productos a transportar incluyen diferentes Destinos. Este ID debe seguir la nomenclatura definida por el SAT: Los caracteres "OR" más 6 dígitos númericos para el Origen y los caracteres "DE" más 6 dígitos númericos para el Destino, cuando el Id Ubicación es registrado, se deberán de informar de igual manera en el detalle de la Factura de Venta (NF) los campos Id Ub Origen (D2_CNATREC) y Id Ub Destino (D2_GRUPONC) para indicar el Origen/Destino de cada uno de los productos (Si los productos van a un mismo origen destino estos campos pueden quedar vacíos).

  • Se debe informar al menos un valor en el grid de Operadores o en el grid de Propietarios/Arrendatarios.

Información básica a registrar para el correcto timbrado del CFDI con Complemento Carta Porte.

  • Encabezado e ítems de la factura:


  • Carta Porte:

03. CONFIGURACIONES 

Catálogos

a) Configure el parámetro MV_PATH814, especificando la ruta de ubicación para los catálogos del SAT, archivos en formato CSV.

b) En la ruta especificada en el parámetro MV_PATH814, coloque los archivos de catálogos del SAT.

IMPORTANTE

  • Validar que los siguientes catálogos de Protheus se encuentren actualizados de acuerdo a los publicados por el SAT Complemento de Carta Porte SAT.
  • El catálogo de S028 - Partes de Transporte (c_ParteTransporte.csv), solo puede ser cargado si se tiene actualizada la rutina FISA814.PRW con una fecha mayor o igual a 25/11/2021.
  • Los siguientes catálogos, solo pueden ser cargados si se tiene actualizada la rutina FISA814.PRW con una fecha mayor o igual a XX/XX/2023
    • S032 - Catálogo de Sector COFEPRIS (c_SectorCOFEPRIS.csv)
    • S033 - Catálogo de Tipo Materia (c_TipoMateria.csv)
    • S034 - Catálogo de Forma Farmacéutica (c_FormaFarmaceutica.csv)
    • S035 - Catálogo de Registro ISTMO (c_RegistroISTMO.csv)
    • S036 - Catálogo de Cond.Esp de Transp (c_CondicionesEspeciales.csv)
    • S037 - Catálogo de Régimen Aduanero (c_RegimenAduanero.csv)
    • S038 - Catálogo de Docs Aduaneros (c_DocumentoAduanero.csv)


  • c_CveTransporte.csv
  • c_TipoEstacion.csv
  • c_ClaveProdServCP.csv
  • c_MaterialPeligroso.csv
  • c_TipoEmbalaje.csv
  • c_TipoPermiso.csv
  • c_Colonias.csv
  • c_Localidad.csv
  • c_Municipio.csv
  • c_Estado.csv
  • c_ConfigAutotransporte.csv
  • c_SubTipoRem.csv
  • c_CodigoPostal.csv
  • c_FraccionArancelaria.csv
  • c_ParteTransporte.csv
  • c_SectorCOFEPRIS.csv
  • c_TipoMateria.csv
  • c_FormaFarmaceutica.csv
  • c_RegistroISTMO.csv
  • c_CondicionesEspeciales.csv
  • c_RegimenAduanero.csv
  • c_DocumentoAduanero.csv

c) Acceda a la rutina de Mantenimiento de tablas; rutina SIGAFAT | Actualizaciones | Archivos | Mantenimiento de Catálogos. (FISA814). Los catálogos indicados en el punto anterior serán actualizados en el sistema.

Importante:

Si en su ambiente ya cuenta con el Catálogo de Códigos Postales, éste debe ser reemplazado por el publicado por el SAT el 10/09/2019, del Anexo 20 versión 3.3.
Para esto, es necesario que inicie sesión en el Smartclient con un usuario que pertenezca al grupo de administradores del sistema.
- Acceda a la rutina Definición de Catálogos; SIGAFAT | Actualizaciones | Archivos | Definición de Catálogos (FISA814).
- Seleccione el código S004 - Catálogo de Códigos Postales.
- Haga clic en Otras Acciones | Borrar.
- Confirme. A continuación, acepte el proceso de borrado de la Definición y del Catálogo mismo. Dependiendo de la cantidad de registros en el catálogo, este proceso podría demorar varios minutos.
- Salga de la rutina y entre nuevamente para recrear la Definición y cargar el Catálogo más reciente. Dependiendo del tamaño del catálogo, este proceso puede tardar varios minutos.

En caso de que requiera actualizar los catálogos con los más recientes del SAT, realice los siguientes pasos:
- En la configuración regional del Sistema Operativo de la computadora, establezca el carácter pipe ('|') como separador de campos.
- Acceda a los mini-sitios de Factura Electrónica y/o Carta Porte del SAT.
- Descargue los catálogos de datos, los cuales son distribuidos en planillas de cálculo.
- En el catálogo requerido, observe que la cantidad y distribución de las columnas coincida con el catálogo previo.
- Copie las celdas de datos, sin encabezados, del catálogo requerido a una nueva planilla.
- Grabe la planilla obtenida, es importante que el nombre sea de acuerdo a la lista de catálogos indicados anteriormente y que sea con el Tipo de archivo CSV (MS_DOS) .csv.
- Si es necesario, reestablezca el separador de campos en la configuración regional del Sistema Operativo de la computadora.
- Compruebe que el archivo .csv obtenido tenga codificación UTF-8 sin BOM, en caso contrario, deberá cambiarla a través de un editor de texto con la capacidad de manejo de codificación, por ejemplo con Notepad++:
    . Cargue el archivo .csv en el editor.
    . Las vocales con acento, eñes y otros caracteres especiales se deben visualizar correctamente. Además, en el menú Codificación debe indicar la opción UTF-8 sin BOM.
    . En caso de que no se cumplan esas condiciones, en el menú Codificación seleccione Juego de caracteres | Europeo Occidental | OEM 850.
    . A continuación, nuevamente abra el menú Codificación, seleccione Convertir a UTF-8 sin BOM.
    . En este punto, las vocales con acento, eñes y otros caracteres especiales deben visualizarse correctamente.
    . Grabe el archivo de texto.

d) En el catálogo de Productos; rutina SIGAFAT | Actualizaciones | Archivos | Productos. (MATA010), los productos para facturar el costo de servicio por transporte, deben tener Tipo = "SV". El código de Producto o Servicio  SAT (B1_PRODSAT) para estos casos es del rango de claves de "70101500" en adelante del catálogo S002 - Catálogo Productos/Servicios.

e) En el catálogo de Transportes; rutina SIGAFAT | Actualizaciones | Archivos | Transportadoras. (MATA050), informe las direcciones de los propietarios y arrendatarios de transportes utilizados para el traslado de mercancías. 

f) En el catálogo de Tipos de Vehículos; rutina SIGAFAT | Actualizaciones | Archivos | Vehículos. (TMSA530), registre los tipos de vehículos para transporte de Categoría (DUT_CATVEI) 1-Común y 3-Remolque.

g) En el catálogo de Vehículos; rutina SIGAFAT | Actualizaciones | Archivos | Vehículos. (OMSA060), registre los datos de los vehículos de transporte utilizados:

h) Tipo de vehículo común: Motocicleta, camioneta, camión, transportador de remolque.

i) Tipo de vehículo remolque: Acoplado, tráiler.

j) En el catálogo de Conductores; rutina SIGAFAT | Actualizaciones | Archivos | Conductores. (OMSA040), registre los datos de los operadores de vehículos.

k) Funcionalidad de las consultas estándar y de las validaciones de campos relacionados con domicilios en las rutinas:

  • Operadores
  • Transportadoras
  • Carta Porte

Por motivo de performance en la visualización de las consultas, se recomienda ampliamente, configurar los siguientes campos en el orden mostrado:

Estado - Se utiliza para filtrar y validar contra los catálogos de Códigos Postales, Localidades y Municipios. A partir de este campo se asigna el País.

Código Postal - En la consulta, sólo se visualizan los Códigos Postales correspondientes al Estado, si no está definido el Estado, visualizará todo el catálogo, con la consecuencia de tomar demasiado tiempo para la carga. Se utiliza para filtrar y validar contra el catálogo de Colonias. Por otra parte, a partir de este campo se asignan valores de Localidad, Municipio y Estado.

Colonia - En la consulta, muestra sólo las Colonias que correspondan al Código Postal, si no está definido el Código Postal, visualizará todo el catálogo, con la consecuencia de tomar demasiado tiempo para la carga. Además, este campo se valida considerando el Código Postal.

Localidad - En la consulta, muestra sólo las Localidades que correspondan al Estado, si no está definido el Estado, visualizará todo el catálogo, con la consecuencia de tomar demasiado tiempo para la carga. Además, este campo se valida considerando el Estado.

Municipio - En la consulta, muestra sólo los Municipios que correspondan al Estado, si no está definido el Estado, visualizará todo el catálogo, con la consecuencia de tomar demasiado tiempo para la carga. Además, este campo se valida considerando el Estado.

País - Es asignado al indicar estado.


FATSMEX.INI

Se recomienda editar el script actual de generación de CFDI (Archivo XML), actualizando las secciones de acuerdo al modelo siguiente, en donde las líneas resaltadas se agregaron o fueron modificadas para integrar el Complemento Carta Porte:

FATSMEX.INI

//FATSMEX.INI V3.3 --- Modelo 2017

[XXX POSICIONAMENTOS]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)

[XXX INICIALIZACION]
(PRE) SD2->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SC6->(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1))
(PRE) CTO->(DbSetOrder(1))
(PRE) SAH->(DbSetOrder(1))
(PRE) _aTotal[094] := ""
(PRE) _aTotal[095] := ""
(PRE) _aTotal[033] := ""
(PRE) _aTotal[034] := ""
(PRE) _aTotal[035] := ""
(PRE) _aTotal[036] := 0
(PRE) _aTotal[037] := 0
(PRE) _aTotal[038] := 0
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
(PRE) _aTotal[096] := DtoS(SF2->F2_EMISSAO)
(PRE) _aTotal[096] := Left(_aTotal[096],4) + "-" + Substr(_aTotal[096],5,2)+ "-" + Right(_aTotal[096],2)
(PRE) _aTotal[096] += "T" + SF2->F2_HORA
(PRE) _aTotal[097] := {"SD2",""}
(PRE) _aTotal[098] := "|"
(PRE) _aTotal[099] := "||"
(PRE) _aTotal[100] := ""
(PRE) _aTotal[101] := "OPERACION DE CONFORMIDAD CON EL ART. 29 FRACCION I DE LIVA Y LO ESTIPULADO EN LAS RGCE 5.2.6. FRACCION I, 5.2.7 Y 4.3.21"
(PRE) _aTotal[102] := "OPERACION DE CONFORMIDAD CON EL ART. 29 FRACCION I DE LIVA Y LO ESTIPULADO EN LAS RGCE 5.2.6. FRACCION II, 5.2.7 Y 4.3.21"
(PRE) _aTotal[103] := fSumBC(SF2->F2_DOC,SF2->F2_SERIE,SF2->F2_CLIENTE,SF2->F2_LOJA)
(PRE) _aTotal[104] := IIf(SF2->(ColumnPos("F2_TPCOMPL")) > 0 .And. AllTrim(SF2->F2_TPCOMPL)=="S",.T.,.F.)
(PRE) _aTotal[105] := ""
(PRE) _aTotal[106] := IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21",0,2)
(PRE) lCCCE := .F.
(PRE) cNodoCCE := ""

(PREREG) FsQuery(_aTotal[097],1,"D2_DOC='" + SF2->F2_DOC + "' AND D2_SERIE='" + SF2->F2_SERIE + "' AND D2_CLIENTE='" + SF2->F2_CLIENTE + "' AND D2_LOJA='" + SF2->F2_LOJA + "'","SD2->D2_DOC=SF2->F2_DOC .AND. SD2->D2_SERIE=SF2->F2_SERIE .AND. SD2->D2_CLIENTE=SF2->F2_CLIENTE .AND. SD2->D2_LOJA=SF2->F2_LOJA","D2_ITEM") .And. .T.

(PRE) fImptosD(SF2->F2_DOC,SF2->F2_SERIE,SF2->F2_CLIENTE,SF2->F2_LOJA,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),"SD2", SF2->F2_GLOBAL == "1",@(_aTotal[036]),_aTotal[104],@_aTotal[037], @_aTotal[038] )

[SD2 CADENAORIGINAL_SELLO]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
//////////////////////////////////////////////CADENA ORIGINAL//////////////////////////////////////////////
(PRE) cCadOrig := _aTotal[099]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.)
(PRE) cCadOriCCE := ""

//Cadena Original | Complemento de Comercio Exterior (Mercancias)
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_ITEM + SD2->D2_COD), (cCadOriCCE += Alltrim(SD2->D2_ITEM + SD2->D2_COD) + _aTotal[098],.T.),("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), (cCadOriCCE += Alltrim(SD2->D2_FRACCA) + Alltrim(SD2->D2_NICO) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_CANADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_CANADU)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), (cCadOriCCE += AllTrim(ObtColSAT("S014",AllTrim(SD2->D2_FRACCA),1,8,9,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_VALADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_VALADU,14,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_USDADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_USDADU,14,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. SA1->A1_CONTRBE=="1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", (cCadOriCCE += '1.0' +_aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. SA1->A1_CONTRBE=="1" .And. SF2->F2_CONUNI=="1", (cCadOriCCE += 'IMMEX:' + ALLTRIM(SA1->A1_PFISICA) + ' ' + _aTotal[101] + _aTotal[098],.T.), IIf (lCCCE .And. SA1->A1_CONTRBE=="1" .And. SF2->F2_CONUNI=="2", (cCadOriCCE += 'IMMEX:' + ALLTRIM(SA1->A1_PFISICA) + ' ' + _aTotal[102] + _aTotal[098],.T.), ("",,.T.)))

///////////DATOS DE LA FACTURA/////////////////
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
//Version
(PRE) cCadOrig += "3.3" + _aTotal[098]
//Serie
(PRE) cCadOrig += Alltrim(SF2->F2_SERIE) + _aTotal[098]
//Folio
(PRE) cCadOrig += Alltrim(SF2->F2_DOC) + _aTotal[098]
//Fecha
(PRE) cCadOrig += Alltrim(_aTotal[096]) + _aTotal[098]
//FormaPago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", IIf(SF2->F2_GLOBAL == '1',FormPagGlo(SF2->F2_DOC,SF2->F2_SERIE),IIf(Empty(AI0->AI0_MPAGO),"99",Alltrim(AI0->AI0_MPAGO))) + _aTotal[098] )
//NoCertificado
(PRE) cCadOrig += Alltrim(SF2->F2_CERTFOL) + _aTotal[098]
//CondicionesDePago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", CFDCarEsp(Alltrim(SE4->E4_DESCRI)) + _aTotal[098] )
//Subtotal
(PRE) cCadOrig += Alltrim(STR(IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, (SF2->F2_VALMERC + _aTotal[103] + SF2->F2_DESCONT) - _aTotal[036] - _aTotal[037]),14,_aTotal[106])) + _aTotal[098]
//Descuento
(PRE) cCadOrig += IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", "", IIf( SF2->F2_DESCONT == 0, "", Alltrim(STR(SF2->F2_DESCONT,14,2)) + _aTotal[098]) )
//Moneda
(PRE) cCadOrig += IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","XXX",Alltrim(CTO->CTO_MOESAT)) + _aTotal[098]
//TipoCambio
(PRE) cCadOrig += IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","",IIf(Alltrim(CTO->CTO_MOESAT) <> "MXN", Alltrim(STR(SF2->F2_TXMOEDA,14,2)), "1") + _aTotal[098])
//Total
(PRE) cCadOrig += Alltrim(Str(IIf(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, iif(GetSx3Cache("F2_VALBRUT","X3_DECIMAL")<= 2,SF2->F2_VALBRUT + _aTotal[103]- _aTotal[037],Round(SF2->F2_VALBRUT,2) + _aTotal[103] - _aTotal[037])),14,_aTotal[106])) + _aTotal[098]
//TipoDeComprobante
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_ESPECIE) == "NF",IIf(ALLTRIM(SF2->F2_TIPODOC) == "21", "T", "I" ), "E") + _aTotal[098]
//MetodoPago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", Alltrim(SE4->E4_MPAGSAT) + _aTotal[098] )
//LugarExpedicion
(PRE) cCadOrig += CFDCarEsp(AllTrim(SM0->M0_CEPENT)) + _aTotal[098]

//////////////////////CFDI Relacionados//////////////////////////
(PREREG) AllTrim(SF2->F2_RELSAT) <> ""
(PRE) IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","",(fGetFolRel("S"),.T.))

///////////DATOS DEL EMISOR///////////////////////
//Rfc
(PRE) cCadOrig += CFDCarEsp(AllTrim(SM0->M0_CGC),.F.) + _aTotal[098]
//Nombre
(PRE) cCadOrig += CFDCarEsp(_aTotal[075],.F.) + _aTotal[098]
//RegimenFiscal
(PRE) cCadOrig += CFDCarEsp(Alltrim(SM0->M0_DSCCNA)) + _aTotal[098]

//////////////////////DATOS DEL RECEPTOR//////////////////////////
(PRE) AllTrim(SF2->F2_ESPECIE) <> "NDI"
(PRE) SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA))
(PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
//Rfc
(PRE) (cCadOrig += IIf(!_aTotal[104] .And. (ALLTRIM(SF2->F2_TIPODOC) == "21" .Or. SF2->F2_GLOBAL == "1"), "XAXX010101000", CFDCarEsp(AllTrim(SA1->A1_CGC), .F.)) + _aTotal[098])
//Nombre
(PRE) (cCadOrig += IIf(SF2->F2_GLOBAL <> "1",CFDCarEsp(Alltrim(SA1->A1_NOME),.F.) + _aTotal[098],""), .T.)
//ResidenciaFiscal
(PRE) IIf(lCCCE .And. !Empty(CFDCarEsp(Alltrim(SF2->F2_RESIDE))), cCadOrig += AllTrim(Posicione("SYA",1,xFilial("SYA")+SF2->F2_RESIDE,"YA_CCESAT")) + _aTotal[098], "")
//NumRegIdTrib
(PRE) IIf(lCCCE .And. !Empty(CFDCarEsp(Alltrim(SF2->F2_IDTRIB))), cCadOrig += CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB))) + _aTotal[098], "")
//UsoCFDI
(PRE) (cCadOrig += Alltrim(SF2->F2_USOCFDI) + _aTotal[098], .T.)

(PRE) (cCadOrig += fXMLFUN("CO",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),.T.)
(PRE) (cCadOrig += fXMLFUN("TI",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)
(PRE) (cCadOrig += fXMLFUN("IL",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)

//Carta Porte
(PRE) (cCadOrig += LxFunaCaPo(SF2->F2_FILIAL,SF2->F2_DOC,SF2->F2_SERIE,.T.),.T.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.))

(POS) IIf(lCCCE, cCadOrig += "1.1" + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_TRASLA), cCadOrig += Alltrim(SF2->F2_TRASLA) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_TIPOPE), cCadOrig += Alltrim(SF2->F2_TIPOPE) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_CVEPED), cCadOrig += Alltrim(SF2->F2_CVEPED) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_CERORI), cCadOrig += Alltrim(SF2->F2_CERORI) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_NUMCER), cCadOrig += Alltrim(SF2->F2_NUMCER) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_EXPCONF), cCadOrig += Alltrim(SF2->F2_EXPCONF) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_INCOTER), cCadOrig += Alltrim(SF2->F2_INCOTER) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_SUBDIV), cCadOrig += Alltrim(SF2->F2_SUBDIV) + _aTotal[098], "")
(POS) IIf(lCCCE .And. SF2->(ColumnPos("F2_OBSCE")) > 0 .And. !Empty(SF2->F2_OBSCE), cCadOrig += CFDCarEsp(AllTrim(SF2->F2_OBSCE), .F.) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(Str(SF2->F2_TCUSD)), cCadOrig += Alltrim(Str(SF2->F2_TCUSD)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(Str(SF2->F2_TOTUSD)), cCadOrig += Alltrim(Str(SF2->F2_TOTUSD,14,2)) + _aTotal[098], "")

//Emisor
(POS) IIf(lCCCE , cCadOrig += CFDCarEsp(AllTrim(SM0->M0_ENDCOB)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SM0->M0_CEPENT), cCadOrig += CFDCarEsp(AllTrim(ObtColSAT("S015",AllTrim(SM0->M0_CODZOSE)+ALLTRIM(SM0->M0_CEPENT),1,9,1,4))) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SM0->M0_CODMUN), cCadOrig += AllTrim(SM0->M0_CODMUN) + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += CFDCarEsp(Alltrim(ObtColSAT("S004",AllTrim(SM0->M0_CEPENT),1,5,6,3))) + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += "MEX" + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += AllTrim(SM0->M0_CEPENT) + _aTotal[098], "")

//Receptor Domicilio
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(AllTrim(SA1->A1_END)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NR_END)), cCadOrig += AllTrim(SA1->A1_NR_END) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NROINT)), cCadOrig += AllTrim(SA1->A1_NROINT) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))), cCadOrig += CFDCarEsp(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))) + _aTotal[098],"")
(POS) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_MUN))), cCadOrig += CFDCarEsp(AllTrim(SA1->A1_MUN),.F.) + _aTotal[098],"")
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI"))) + _aTotal[098],"")
(POS) IIf(lCCCE, cCadOrig += AllTrim(Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCESAT")) + _aTotal[098], "")
(POS) IIf(lCCCE, cCadOrig += AllTrim(SA1->A1_CEP) + _aTotal[098], "")

(POS) cCadOrig += IIf(!Empty(cCadOriCCE), cCadOriCCE, "")

(POS) cCadOrig += _aTotal[098]
(POS) _aTotal[033] := cCadOrig

//SELLO
(POS) _aTotal[100] := EVPDigest(cCadOrig,5)
(POS) _aTotal[100] := PrivSignRSA(&(SuperGetMv("MV_CFDDIRS",,""))+SuperGetMv("MV_CFDARQS",,""),_aTotal[100],6,"assinatura")
(POS) _aTotal[100] := ENCODE64(_aTotal[100])
[XXX CABECERA]
Linha1 C 041 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8"?>'
[XXX FACTURA]
//Certificado del SAT incluido para pruebas
(PRE) cCert := "MIIF+TCCA+GgAwIBAgIUMzAwMDEwMDAwMDAzMDAwMjM3MDgwDQYJKoZIhvcNAQEL"
(PRE) cCert += "BQAwggFmMSAwHgYDVQQDDBdBLkMuIDIgZGUgcHJ1ZWJhcyg0MDk2KTEvMC0GA1UE"
(PRE) cCert += "CgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNV"
(PRE) cCert += "BAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNp"
(PRE) cCert += "w7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEm"
(PRE) cCert += "MCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEM"
(PRE) cCert += "BTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDES"
(PRE) cCert += "MBAGA1UEBwwJQ295b2Fjw6FuMRUwEwYDVQQtEwxTQVQ5NzA3MDFOTjMxITAfBgkq"
(PRE) cCert += "hkiG9w0BCQIMElJlc3BvbnNhYmxlOiBBQ0RNQTAeFw0xNzA1MTgwMzU0NTZaFw0y"
(PRE) cCert += "MTA1MTgwMzU0NTZaMIHlMSkwJwYDVQQDEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVT"
(PRE) cCert += "QVJJQUxFUyBTQzEpMCcGA1UEKRMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFM"
(PRE) cCert += "RVMgU0MxKTAnBgNVBAoTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFND"
(PRE) cCert += "MSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBIRUdUNzYxMDAzNFMyMR4wHAYDVQQF"
(PRE) cCert += "ExUgLyBIRUdUNzYxMDAzTURGUk5OMDkxGzAZBgNVBAsUEkNTRDAxX0FBQTAxMDEw"
(PRE) cCert += "MUFBQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJdUcsHIEIgwivvA"
(PRE) cCert += "antGnYVIO3+7yTdD1tkKopbL+tKSjRFo1ErPdGJxP3gxT5O+ACIDQXN+HS9uMWDY"
(PRE) cCert += "naURalSIF9COFCdh/OH2Pn+UmkN4culr2DanKztVIO8idXM6c9aHn5hOo7hDxXMC"
(PRE) cCert += "3uOuGV3FS4ObkxTV+9NsvOAV2lMe27SHrSB0DhuLurUbZwXm+/r4dtz3b2uLgBc+"
(PRE) cCert += "Diy95PG+MIu7oNKM89aBNGcjTJw+9k+WzJiPd3ZpQgIedYBD+8QWxlYCgxhnta3k"
(PRE) cCert += "9ylgXKYXCYk0k0qauvBJ1jSRVf5BjjIUbOstaQp59nkgHh45c9gnwJRV618NW0fM"
(PRE) cCert += "eDzuKR0CAwEAAaMdMBswDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCBsAwDQYJKoZI"
(PRE) cCert += "hvcNAQELBQADggIBABKj0DCNL1lh44y+OcWFrT2icnKF7WySOVihx0oR+HPrWKBM"
(PRE) cCert += "Xxo9KtrodnB1tgIx8f+Xjqyphhbw+juDSeDrb99PhC4+E6JeXOkdQcJt50Kyodl9"
(PRE) cCert += "URpCVWNWjUb3F/ypa8oTcff/eMftQZT7MQ1Lqht+xm3QhVoxTIASce0jjsnBTGD2"
(PRE) cCert += "JQ4uT3oCem8bmoMXV/fk9aJ3v0+ZIL42MpY4POGUa/iTaawklKRAL1Xj9IdIR06R"
(PRE) cCert += "K68RS6xrGk6jwbDTEKxJpmZ3SPLtlsmPUTO1kraTPIo9FCmU/zZkWGpd8ZEAAFw+"
(PRE) cCert += "ZfI+bdXBfvdDwaM2iMGTQZTTEgU5KKTIvkAnHo9O45SqSJwqV9NLfPAxCo5eRR2O"
(PRE) cCert += "Gibd9jhHe81zUsp5GdE1mZiSqJU82H3cu6BiE+D3YbZeZnjrNSxBgKTIf8w+KNYP"
(PRE) cCert += "M4aWnuUMl0mLgtOxTUXi9MKnUccq3GZLA7bx7Zn211yPRqEjSAqybUMVIOho6aqz"
(PRE) cCert += "kfc3WLZ6LnGU+hyHuZUfPwbnClb7oFFz1PlvGOpNDsUb0qP42QCGBiTUseGugAzq"
(PRE) cCert += "OP6EYpVPC73gFourmdBQgfayaEvi3xjNanFkPlW1XEYNrYJB4yNjphFrvWwTY86v"
(PRE) cCert += "L2o8gZN0Utmc5fnoBTfM9r2zVKmEi6FUeJ1iaDaVNv47te9iS1ai4V4vBY8r"

(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""

(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) _aTotal[001] := '<cfdi:Comprobante'
(PRE) _aTotal[001] += ' xmlns:cfdi="http://www.sat.gob.mx/cfd/3"'
(PRE) _aTotal[001] += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
(PRE) _aTotal[001] += ' xmlns:cartaporte30="http://www.sat.gob.mx/CartaPorte30"'
(PRE) _aTotal[001] += ' xmlns:implocal="http://www.sat.gob.mx/implocal"'
(PRE) _aTotal[001] += IIf(lCCCE .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", ' xmlns:leyendasFisc="http://www.sat.gob.mx/leyendasFiscales"' , "")
(PRE) _aTotal[001] += ' xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/CartaPorte30 http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte30.xsd  http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd'
(PRE) _aTotal[001] += IIF(lCCCE,'http://www.sat.gob.mx/ComercioExterior11 http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior11/ComercioExterior11.xsd ','')
(PRE) _aTotal[001] += IIf(lCCCE .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", ' http://www.sat.gob.mx/leyendasFiscales http://www.sat.gob.mx/sitio_internet/cfd/leyendasFiscales/leyendasFisc.xsd"' , '"')
(PRE) _aTotal[001] += IIf(lCCCE, ' xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11"' , "")
(PRE) _aTotal[001] += ' Version="3.3"'
(PRE) _aTotal[001] += ' Serie="' + Alltrim(SF2->F2_SERIE) + '"'
(PRE) _aTotal[001] += ' Folio="' + Alltrim(SF2->F2_DOC) + '"'
(PRE) _aTotal[001] += ' Fecha="' + Alltrim(_aTotal[096]) + '"'
(PRE) _aTotal[001] += ' Sello="' + Alltrim(_aTotal[100]) + '"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' FormaPago="' + IIf(SF2->F2_GLOBAL == '1',FormPagGlo(SF2->F2_DOC,SF2->F2_SERIE),IIf(Empty(AI0->AI0_MPAGO),"99",Alltrim(AI0->AI0_MPAGO))) + '"' )
(PRE) _aTotal[001] += ' NoCertificado="' + Alltrim(SF2->F2_CERTFOL) + '"'
(PRE) _aTotal[001] += ' Certificado="' + cCert + '"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' CondicionesDePago="' + CFDCarEsp(Alltrim(SE4->E4_DESCRI)) + '"' )
(PRE) _aTotal[001] += ' SubTotal="' + Alltrim(STR(IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, (SF2->F2_VALMERC + _aTotal[103] + SF2->F2_DESCONT) - _aTotal[036] - _aTotal[037] ),14,_aTotal[106])) + '"'
(PRE) _aTotal[001] += IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", "", IIf( SF2->F2_DESCONT == 0, "", ' Descuento="' + Alltrim(STR(SF2->F2_DESCONT,14,2)) + '"' ))
(PRE) _aTotal[001] += ' Moneda="' + IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","XXX",Alltrim(CTO->CTO_MOESAT)) + '"'
(PRE) _aTotal[001] += IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21", "", ' TipoCambio="' + IIf(Alltrim(CTO->CTO_MOESAT) <> "MXN", Alltrim(STR(SF2->F2_TXMOEDA,14,2)), "1") + '"')
(PRE) _aTotal[001] += ' Total="' + Alltrim(Str(IIf(Alltrim(SF2->F2_TIPODOC) == "21", 0, IIf(GetSx3Cache("F2_VALBRUT","X3_DECIMAL") <= 2,SF2->F2_VALBRUT + _aTotal[103] - _aTotal[037] - _aTotal[038] ,Round(SF2->F2_VALBRUT,2) + _aTotal[103] - _aTotal[037] - _aTotal[038])),14,_aTotal[106])) + '"'
(PRE) _aTotal[001] += ' TipoDeComprobante="' + IIf(Alltrim(SF2->F2_ESPECIE) == "NF",IIf(Alltrim(SF2->F2_TIPODOC) == "21", "T", "I"), "E") + '"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' MetodoPago="' + Alltrim(SE4->E4_MPAGSAT) + '"' )
(PRE) _aTotal[001] += ' LugarExpedicion="' + CFDCarEsp(AllTrim(SM0->M0_CEPENT)) + '"'
(PRE) _aTotal[001] += '>'
(PREREG) _aTotal[001]


(POS) cNodoCCE := IIf(lCCCE, ' <cce11:ComercioExterior' , "")
(POS) cNodoCCE += IIf(lCCCE, ' xmlns:cfdi="http://www.sat.gob.mx/cfd/3"' , "")
(POS) cNodoCCE += IIf(lCCCE, ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' , "")
(POS) cNodoCCE += IIf(lCCCE, ' xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11"' , "")
(POS) cNodoCCE += IIf(lCCCE, ' xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd"' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Version="1.1"' , "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_TRASLA), ' MotivoTraslado="' + Alltrim(SF2->F2_TRASLA) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_TIPOPE), ' TipoOperacion="' + Alltrim(SF2->F2_TIPOPE) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_CVEPED), ' ClaveDePedimento="' + Alltrim(SF2->F2_CVEPED) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_CERORI), ' CertificadoOrigen="' + Alltrim(SF2->F2_CERORI) +'"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_NUMCER), ' NumCertificadoOrigen="' + Alltrim(SF2->F2_NUMCER) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_EXPCONF), ' NumeroExportadorConfiable="' + Alltrim(SF2->F2_EXPCONF) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_INCOTER), ' Incoterm="' + Alltrim(SF2->F2_INCOTER) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_SUBDIV), ' Subdivision="' + Alltrim(SF2->F2_SUBDIV) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. SF2->(ColumnPos("F2_OBSCE")) > 0 .And. !Empty(SF2->F2_OBSCE), ' Observaciones="' + CFDCarEsp(AllTrim(SF2->F2_OBSCE), .T.) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(Str(SF2->F2_TCUSD)), ' TipoCambioUSD="' + Alltrim(Str(SF2->F2_TCUSD)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(Str(SF2->F2_TOTUSD)), ' TotalUSD="' + Alltrim(Str(SF2->F2_TOTUSD,14,2)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")
(POS) _aTotal[094] := cNodoCCE

[XXX CFDIREL]
(PREREG) AllTrim(SF2->F2_RELSAT) <> ""
(PREREG) (_aTotal[001] := IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","",(fGetFolRel("S"),.T.)))

(PREREG) _aTotal[001]

[XXX EMISOR]
(PRE) (_aTotal[001] := ' <cfdi:Emisor' , .T.)
(PRE) (_aTotal[001] += ' Rfc="' + CFDCarEsp(AllTrim(SM0->M0_CGC))+ '"' , .T.)
(PRE) (_aTotal[001] += ' Nombre="' + CFDCarEsp(_aTotal[075],.T.) + '"' , .T.)
(PRE) (_aTotal[001] += ' RegimenFiscal="' + CFDCarEsp(Alltrim(SM0->M0_DSCCNA)) + '"' , .T.)
(PRE) (_aTotal[001] += '/>' , .T.)
(PRE) (_aTotal[001] := _aTotal[001] , .T.)
(PREREG) _aTotal[001]

[XXX RECEPTOR_CLIENTE]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""

(PREREG) AllTrim(SF2->F2_ESPECIE) <> "NDI"
(PREREG) (SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PREREG) (SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PREREG) (_aTotal[001] := ' <cfdi:Receptor' , .T.)
(PREREG) (_aTotal[001] += ' Rfc="' + CFDCarEsp(IIf(!_aTotal[104] .And.(Alltrim(SF2->F2_TIPODOC) == "21" .Or. SF2->F2_GLOBAL == "1"), "XAXX010101000", Alltrim(SA1->A1_CGC))) + '"' , .T.)
(PREREG) (_aTotal[001] += IIf(SF2->F2_GLOBAL <> "1",' Nombre="' + CFDCarEsp(Alltrim(SA1->A1_NOME),.T.) + '"',"") , .T.)
(PREREG) (_aTotal[001] += ' UsoCFDI="' + Alltrim(SF2->F2_USOCFDI) + '"' , .T.)
(PREREG) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB)))), (_aTotal[001] += ' NumRegIdTrib="' + CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB))) + '"' , .T.), "")
(PREREG) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(AllTrim(SF2->F2_RESIDE)))), (_aTotal[001] += ' ResidenciaFiscal="' + AllTrim(Posicione("SYA",1,xFilial("SYA")+SF2->F2_RESIDE,"YA_CCESAT")) + '"' , .T.), "")
(PREREG) (_aTotal[001] += '/>' ,.T.)
(PREREG) (_aTotal[001] := _aTotal[001] , .T.)
(PREREG) _aTotal[001]

(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Emisor' , "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Domicilio' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Calle="' + CFDCarEsp(AllTrim(SM0->M0_ENDCOB)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(CFDCarEsp(AllTrim(SM0->M0_CEPENT)))), ' Colonia="' + CFDCarEsp(AllTrim(ObtColSAT("S015",AllTrim(SM0->M0_CODZOSE)+ALLTRIM(SM0->M0_CEPENT),1,9,1,4))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SM0->M0_CEPENT))), ' Municipio="' + CFDCarEsp(AllTrim(SM0->M0_CODMUN)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Estado="' + CFDCarEsp(Alltrim(ObtColSAT("S004",AllTrim(SM0->M0_CEPENT),1,5,6,3))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Pais="' + AllTrim("MEX") + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' CodigoPostal="' + AllTrim(SM0->M0_CEPENT) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '/>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' </cce11:Emisor>' + ( chr(13)+chr(10) ), "")

(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Receptor' , "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")

(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Domicilio' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Calle="' + CFDCarEsp(AllTrim(SA1->A1_END)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NR_END)), ' NumeroExterior="' + AllTrim(SA1->A1_NR_END) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NROINT)), ' NumeroInterior="' + AllTrim(SA1->A1_NROINT) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))), ' Colonia="' + CFDCarEsp(AllTrim(SA1->A1_BAIRRO)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_MUN)), ' Municipio="' + CFDCarEsp(AllTrim(SA1->A1_MUN),.T.) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Estado="' + CFDCarEsp(Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI"))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Pais="' + AllTrim(Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCESAT")) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' CodigoPostal="' + AllTrim(SA1->A1_CEP) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '/>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' </cce11:Receptor>' + ( chr(13)+chr(10) ), "")

(POS) (cNodoCCE += IIf(lCCCE, ' <cce11:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) _aTotal[094] += cNodoCCE

[SD2 CONCEPTO]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""

(PRE) DbGoTop()

(PREREG) (cNodoCCE += IIf(lCCCE, ' <cce11:Mercancia' , ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE , ' NoIdentificacion="' + Alltrim(SD2->D2_ITEM + SD2->D2_COD) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), ' FraccionArancelaria="' + Alltrim(SD2->D2_FRACCA) + Alltrim(SD2->D2_NICO) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD2->D2_CANADU)), ' CantidadAduana="' + Alltrim(Str(SD2->D2_CANADU)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), ' UnidadAduana="' + AllTrim(ObtColSAT("S014",AllTrim(SD2->D2_FRACCA),1,8,9,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD2->D2_VALADU)), ' ValorUnitarioAduana="' + Alltrim(Str(SD2->D2_VALADU,14,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, ' ValorDolares="' + Alltrim(Str(SD2->D2_USDADU,14,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ) , ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, ' </cce11:Mercancia>' + ( chr(13)+chr(10) ), ""),.T.)

(POS) (cNodoCCE += IIf(lCCCE, ' </cce11:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) (cNodoCCE += IIf(lCCCE, ' </cce11:ComercioExterior>' , ""),.T.)
(POS) _aTotal[094] += cNodoCCE

(POS) (_aTotal[034] := fXMLFUN("CO",.F., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),.T.)

[XXX CONCEPTOS]
(POS) FsQuery(_aTotal[097],2)

(PREREG) (_aTotal[001] := _aTotal[034] ,.T.)
(PREREG) _aTotal[001]

[XXX IMPUESTOS]
(PREREG) (_aTotal[002] := fXMLFUN("TI",.F.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)
(PREREG) _aTotal[002]

//IMPUESTOS LOCALES//
(PRE) (_aTotal[095] := fXMLFUN("IL",.F.),.T.)

[XXX COMPLEMENT]
(PREREG) _aTotal[105] := LxFunaCaPo(SF2->F2_FILIAL,SF2->F2_DOC,SF2->F2_SERIE,.F.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.))
(PREREG) (_aTotal[001] := IIF(!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095] ) .Or. !Empty(_aTotal[105]), ' <cfdi:Complemento', ""), .T.)
(PREREG) (_aTotal[001] += IIF(!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095] ) .Or. !Empty(_aTotal[105]),'>',""),.T.)
(PREREG) _aTotal[001]
COMPLEMENT C 021 0 ENCODEUTF8(XMLConv("",,,"cfdi:Complemento",.T.,.F.,4))


[XXX COMERCIOEX]
(PREREG) (_aTotal[001] := _aTotal[094],.T.)
(PREREG) _aTotal[001]

[XXX CARTAPORTE]
(PREREG) (_aTotal[001] := _aTotal[105],.T.)
(PREREG) _aTotal[001]

[XXX IMPUESTOLOC]
(PREREG) (_aTotal[001] := _aTotal[095],.T.)
(PREREG) _aTotal[001]

[XXX LEYENDASFIS]
(PREREG) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.) .And. SF2->(FieldPos("F2_CONUNI")) > 0
(PREREG) lCCCE
(PREREG) (_aTotal[001] := IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF" , ' <leyendasFisc:LeyendasFiscales version="1.0" >'+ ( chr(13)+chr(10) ), ""), .T.)
(PREREG) (_aTotal[001] += IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF" , ' <leyendasFisc:Leyenda textoLeyenda=', ""), .T.)
(PREREG) (_aTotal[001] += IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. SF2->F2_CONUNI=="1" .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", '"IMMEX:'+ AllTrim(SA1->A1_PFISICA) +' ' + _aTotal[101] +'" />', IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. SF2->F2_CONUNI=="2" .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF",'"IMMEX:'+ AllTrim(SA1->A1_PFISICA) + ' ' + _aTotal[102] +'" />',"")), .T.)
(PREREG) _aTotal[001]
(PREREG) (_aTotal[001] := IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF",' </leyendasFisc:LeyendasFiscales>', ""), .T.)
(PREREG) _aTotal[001]


[XXX COMPLEMENT]
(PREREG) (_aTotal[001] := IIF(!EMPTY(_aTotal[094]) .or. !EMPTY(_aTotal[095]) .or. !EMPTY(_aTotal[105]),' </cfdi:Complemento>',""), .T.)
(PREREG) _aTotal[001]
COMPLEMENT C 021 0 ENCODEUTF8(XMLConv("",,,"cfdi:Complemento",.F.,.T.,4))

//[XXX CAD_ORIG]
//(PREREG) _aTotal[033]

[XXX FACTURA]
(PRE) _aTotal[095] := &(GetNewPar("MV_CFDNAF2","Lower(AllTrim(SF2->F2_ESPECIE)) + '_' + Lower(AllTrim(SF2->F2_SERIE)) + '_' + Lower(AllTrim(SF2->F2_DOC)) + '.xml'"))
(ARQ) _aTotal[095]
FACTURA C 019 0 ENCODEUTF8(XMLConv("",,,"cfdi:Comprobante",.F.,.T.,0))

FATEMEX.INI

Se recomienda editar el script actual de generación de CFDI (Archivo XML), actualizando las secciones de acuerdo al modelo siguiente, en donde las líneas resaltadas se agregaron o fueron modificadas para que no afecte la implementación del Complemento Carta Porte en las Notas de Crédito.

FATEMEX.INI

//FATEMEX.INI V3.3 --- Modelo 2017
[XXX POSICIONAMENTOS]
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)

[XXX INICIALIZACION]
(PRE) SD1->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SC6->(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1))
(PRE) CTO->(DbSetOrder(1))
(PRE) SAH->(DbSetOrder(1))
(PRE) _aTotal[094] := ""
(PRE) _aTotal[095] := ""
(PRE) _aTotal[033] := ""
(PRE) _aTotal[034] := ""
(PRE) _aTotal[035] := ""
(PRE) _aTotal[036] := 0
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
(PRE) _aTotal[096] := DtoS(SF1->F1_EMISSAO)
(PRE) _aTotal[096] := Left(_aTotal[096],4) + "-" + Substr(_aTotal[096],5,2)+ "-" + Right(_aTotal[096],2)
(PRE) _aTotal[096] += "T" + SF1->F1_HORA
(PRE) _aTotal[097] := {"SD1",""}
(PRE) _aTotal[098] := "|"
(PRE) _aTotal[099] := "||"
(PRE) _aTotal[100] := ""
(PRE) _aTotal[101] := IIF(SuperGetMv("MV_DESCSAI",.T.,"2") == "1", .T., .F.)
(PRE) lCCCE := .F.
(PRE) cNodoCCE := ""

(PREREG) FsQuery(_aTotal[097],1,"D1_DOC='" + SF1->F1_DOC + "' AND D1_SERIE='" + SF1->F1_SERIE + "' AND D1_FORNECE='" + SF1->F1_FORNECE + "' AND D1_LOJA='" + SF1->F1_LOJA + "'","SD1->D1_DOC=SF1->F1_DOC .AND. SD1->D1_SERIE=SF1->F1_SERIE .AND. SD1->D1_FORNECE=SF1->F1_FORNECE .AND. SD1->D1_LOJA=SF1->F1_LOJA","D1_ITEM") .And. .T.

(PRE) fImptosD(SF1->F1_DOC,SF1->F1_SERIE,SF1->F1_FORNECE,SF1->F1_LOJA, .F. , "SD1", .F., @(_aTotal[036]))

[SD1 CADENAORIGINAL_SELLO]
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2))) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2))) , .T.)
//////////////////////////////////////////////CADENA ORIGINAL//////////////////////////////////////////////
(PRE) cCadOrig := _aTotal[099]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF1->F1_TIPOPE), .T., .F.)
(PRE) cCadOriCCE := ""

//Cadena Original | Complemento de Comercio Exterior
(PREREG) IIf(lCCCE .And. !Empty(SD1->D1_ITEM + SD1->D1_COD), (cCadOriCCE += Alltrim(SD1->D1_ITEM + SD1->D1_COD) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(SD1->D1_FRACCA), (cCadOriCCE += Alltrim(SD1->D1_FRACCA) + Alltrim(SD1->D1_NICO) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD1->D1_CANADU)), (cCadOriCCE += Alltrim(Str(SD1->D1_CANADU)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(SD1->D1_FRACCA), (cCadOriCCE += AllTrim(ObtColSAT("S014",AllTrim(SD1->D1_FRACCA),1,8,9,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD1->D1_VALADU)), (cCadOriCCE += Alltrim(Str(SD1->D1_VALADU,14,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD1->D1_USDADU)), (cCadOriCCE += Alltrim(Str(SD1->D1_USDADU,14,2)) + _aTotal[098],.T.), ("",,.T.))

//Cadena Original | Complemento de Comercio Exterior
(POS) IIf(lCCCE, cCadOrig += "1.1" + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF1->F1_TRASLA), cCadOrig += Alltrim(SF1->F1_TRASLA) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF1->F1_TIPOPE), cCadOrig += Alltrim(SF1->F1_TIPOPE) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF1->F1_CVEPED), cCadOrig += Alltrim(SF1->F1_CVEPED) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF1->F1_CERORI), cCadOrig += Alltrim(SF1->F1_CERORI) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF1->F1_NUMCER), cCadOrig += Alltrim(SF1->F1_NUMCER) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF1->F1_EXPCONF), cCadOrig += Alltrim(SF1->F1_EXPCONF) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF1->F1_INCOTER), cCadOrig += Alltrim(SF1->F1_INCOTER) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF1->F1_SUBDIV), cCadOrig += Alltrim(SF1->F1_SUBDIV) + _aTotal[098], "")
(POS) IIf(lCCCE .And. SF1->(ColumnPos("F1_OBSCE")) > 0 .And. !Empty(SF1->F1_OBSCE), cCadOrig += CFDCarEsp(Alltrim(SF1->F1_OBSCE),.F.) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(Str(SF1->F1_TCUSD)), cCadOrig += Alltrim(Str(SF1->F1_TCUSD)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(Str(SF1->F1_TOTUSD)), cCadOrig += Alltrim(Str(SF1->F1_TOTUSD,14,2)) + _aTotal[098], "")

///////////DATOS DE LA FACTURA/////////////////
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
//Version
(PRE) cCadOrig += "3.3" + _aTotal[098]
//Serie
(PRE) cCadOrig += Alltrim(SF1->F1_SERIE) + _aTotal[098]
//Folio
(PRE) cCadOrig += Alltrim(SF1->F1_DOC) + _aTotal[098]
//Fecha
(PRE) cCadOrig += Alltrim(_aTotal[096]) + _aTotal[098]
//FormaPago
(PRE) cCadOrig += Iif(Empty(AI0->AI0_MPAGO),"99",Alltrim(AI0->AI0_MPAGO)) + _aTotal[098]
//NoCertificado
(PRE) cCadOrig += Alltrim(SF1->F1_CERTFOL) + _aTotal[098]
//CondicionesDePago
(PRE) cCadOrig += CFDCarEsp(Alltrim(SE4->E4_DESCRI)) + _aTotal[098]
//Subtotal
(PRE) cCadOrig += Alltrim(STR((SF1->F1_VALMERC + IIF(_aTotal[101], SF1->F1_DESCONT, 0 )) - _aTotal[036],14,2)) + _aTotal[098]
//Descuento
(PRE) cCadOrig += IIf(SF1->F1_DESCONT==0, "", Alltrim(STR(SF1->F1_DESCONT,14,2)) + _aTotal[098])
//Moneda
(PRE) cCadOrig += Alltrim(CTO->CTO_MOESAT) + _aTotal[098]
//TipoCambio
(PRE) cCadOrig += IIf(Alltrim(CTO->CTO_MOESAT) <> "MXN", Alltrim(STR(SF1->F1_TXMOEDA,14,2)), "1") + _aTotal[098]
//Total
(PRE) cCadOrig += Alltrim(STR(iif(GetSx3Cache("F1_VALBRUT","X3_DECIMAL")<= 2,SF1->F1_VALBRUT,Round(SF1->F1_VALBRUT,2)),14,2)) + _aTotal[098]
//TipoDeComprobante
(PRE) cCadOrig += IIf(Alltrim(SF1->F1_ESPECIE) == "NF", "I", "E") + _aTotal[098]
//MetodoPago
(PRE) cCadOrig += "PUE" + _aTotal[098]
//LugarExpedicion
(PRE) cCadOrig += CFDCarEsp(AllTrim(SM0->M0_CEPENT)) + _aTotal[098]
//Confirmacion
//(PRE) cCadOrig += "ClavePAC" + _aTotal[098]

//////////////////////CFDI Relacionados//////////////////////////
(PREREG) AllTrim(SF1->F1_RELSAT) <> ""
(PRE) fGetFolRel("E",.T.)

///////////DATOS DEL EMISOR///////////////////////
//Rfc
(PRE) cCadOrig += CFDCarEsp(AllTrim(SM0->M0_CGC),.F.) + _aTotal[098]
//Nombre
(PRE) cCadOrig += CFDCarEsp(_aTotal[075],.F.) + _aTotal[098]
//RegimenFiscal
(PRE) cCadOrig += CFDCarEsp(Alltrim(SM0->M0_DSCCNA)) + _aTotal[098]

//////////////////////DATOS DEL RECEPTOR//////////////////////////
(PRE) AllTrim(SF1->F1_ESPECIE) == "NCC"
(PRE) SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA))
(PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
//Rfc
(PRE) (cCadOrig += CFDCarEsp(AllTrim(SA1->A1_CGC), .F.) + _aTotal[098], .T.)
//Nombre
(PRE) (cCadOrig += CFDCarEsp(Alltrim(SA1->A1_NOME),.F.) + _aTotal[098], .T.)
//ResidenciaFiscal
(PRE) IIf(lCCCE,(cCadOrig += Alltrim(SYA->YA_CCESAT) + _aTotal[098], .T.),"")
//NumRegIdTrib
(PRE) IIf(lCCCE,(cCadOrig += Alltrim(AI0->AI0_IDFIS) + _aTotal[098], .T.),"")
//UsoCFDI
(PRE) (cCadOrig += Alltrim(SF1->F1_USOCFDI) + _aTotal[098], .T.)

(PRE) (cCadOrig += fXMLFUN("CO",.T., .F. ,.F.))
(PRE) (cCadOrig += fXMLFUN("TI",.T., .F. ,.T.))
(PRE) (cCadOrig += fXMLFUN("IL",.T., .F. ,.T.))

//Cadena Original | Complemento de Comercio Exterior

//Emisor
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(AllTrim(SM0->M0_ENDCOB)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SM0->M0_BAIRENT), cCadOrig += ObtColSAT("S015",AllTrim(SM0->M0_CEPENT),5,5,1,4) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SM0->M0_CODMUN), cCadOrig += AllTrim(SM0->M0_CODMUN) + _aTotal[098], "")
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(Alltrim(ObtColSAT("S004",AllTrim(SM0->M0_CEPENT),1,5,6,3))) + _aTotal[098], "")
(POS) IIf(lCCCE, cCadOrig += "MEX" + _aTotal[098], "")
(POS) IIf(lCCCE, cCadOrig += AllTrim(SM0->M0_CEPENT) + _aTotal[098], "")

//Receptor Domicilio
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(AllTrim(SA1->A1_END)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NR_END)), cCadOrig += AllTrim(SA1->A1_NR_END) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NROINT)), cCadOrig += AllTrim(SA1->A1_NROINT) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))), cCadOrig += CFDCarEsp(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))) + _aTotal[098],"")
(POS) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_MUN))), cCadOrig += CFDCarEsp(AllTrim(SA1->A1_MUN),.F.) + _aTotal[098],"")
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI"))) + _aTotal[098],"")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_PAIS)), cCadOrig += AllTrim(Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCESAT")) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_CEP)), cCadOrig += AllTrim(SA1->A1_CEP) + _aTotal[098], "")

(POS) cCadOrig += IIf(!Empty(cCadOriCCE), cCadOriCCE, "")

(POS) cCadOrig += _aTotal[098]
(POS) _aTotal[033] := cCadOrig

//SELLO
(POS) _aTotal[100] := EVPDigest(cCadOrig,5)
(POS) _aTotal[100] := PrivSignRSA(&(SuperGetMv("MV_CFDDIRS",,""))+SuperGetMv("MV_CFDARQS",,""),_aTotal[100],6,"assinatura")
(POS) _aTotal[100] := ENCODE64(_aTotal[100])

[XXX CABECERA]
Linha1 C 041 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8"?>'

[XXX FACTURA]
//Certificado del SAT incluido para pruebas
(PRE) cCert := "MIIFyDCCA7CgAwIBAgIUMzAwMDEwMDAwMDA0MDAwMDI0NDMwDQYJKoZIhvcNAQEL"
(PRE) cCert += "BQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFE"
(PRE) cCert += "TUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9y"
(PRE) cCert += "aXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0w"
(PRE) cCert += "GwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWRpejEOMAwGA1UEEQwFMDYzNzAxCzAJ"
(PRE) cCert += "BgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhD"
(PRE) cCert += "T1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3Bv"
(PRE) cCert += "bnNhYmxlOiBBQ0RNQS1TQVQwHhcNMTkwNjE3MjA0MDUxWhcNMjMwNjE3MjA0MDUx"
(PRE) cCert += "WjCB7zEqMCgGA1UEAxMhWEVOT04gSU5EVVNUUklBTCBBUlRJQ0xFUyBTIERFIENW"
(PRE) cCert += "MSowKAYDVQQpEyFYRU5PTiBJTkRVU1RSSUFMIEFSVElDTEVTIFMgREUgQ1YxKjAo"
(PRE) cCert += "BgNVBAoTIVhFTk9OIElORFVTVFJJQUwgQVJUSUNMRVMgUyBERSBDVjElMCMGA1UE"
(PRE) cCert += "LRMcWElBMTkwMTI4SjYxIC8gS0FITzY0MTEwMUIzOTEeMBwGA1UEBRMVIC8gS0FI"
(PRE) cCert += "TzY0MTEwMUhOVExLUzA2MSIwIAYDVQQLExlYZW5vbiBJbmR1c3RyaWFsIEFydGlj"
(PRE) cCert += "bGVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiJQ5YcSgjwsGf29+"
(PRE) cCert += "3go7VGdtMZCcH9wUpn46ZMAlFwUojnCPTvwJ3+cSwjqJnw8ahr3DuRwekvGR4BJA"
(PRE) cCert += "b5b9Xi8kyoiWtwcGOSWxO38Bp9J1e/BO9HMbQBPAtLDuG47oqnH8zWLOeaoYRJDp"
(PRE) cCert += "ARw4RX1ko2+9tbj0ntBtM7Vk1E8EWiA/h2Meq0LIv1+ySGTUrEW46FM01J5pzELv"
(PRE) cCert += "5XupBghuJxR5DG9fiOW7u3dR5s3tZoVLwA1KdjJtY0mmnfCwxg6i5AqhvY+FAI5D"
(PRE) cCert += "6CF6/lHA8PWg63WasvrhuIv70xCLjgPT/j00ZcPrLvBf1DefGVic980Ch/SDvC+M"
(PRE) cCert += "dJ1F5wIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG"
(PRE) cCert += "9w0BAQsFAAOCAgEACjfTPoKY2N5MxjmAMltd5XZCV1vgAwEtrIRYTodhE8R0Tp1Q"
(PRE) cCert += "anAXb0luPyBv5hIXWK4VqAI4fcTtP+n7kkrwfha6ErkPWFNJWJm8ZsMmby/3WgVo"
(PRE) cCert += "JkOFyRYQqr5Il3N6wMa5kiDBtDRbqB3iEXmvtrvjWSHyxAER+zo3jWGFlhBZ0nQN"
(PRE) cCert += "Rtjx8sPFihVc5TUH682HJiU4oWvT63Dnra8ncqiW/uCuY86crnUq0fW7Lw/3+PY5"
(PRE) cCert += "xXjNxR/Hh3sUPITfJrGaLWurD1J9npr9yGAJ6t9zrhhZnepIC0DUMc5+j4pg1DrO"
(PRE) cCert += "32jzwUOLQqErDizh84NoJCWwbg+US8wi3zD0ZKiDv7XsTNWAW2Ap2JkzykKHjFTZ"
(PRE) cCert += "iEm3uZOkJNfcu3o+kefr5HfXFT+iN9K5FUEhaQwgUeZBRJ8V5F6gmhz3d6ixVbiZ"
(PRE) cCert += "oFNhYR8e2k8gF9gGrVMrEbJGQrl+6+ZYQLFiauXeG7fu1svk19PuyredRJGnseJq"
(PRE) cCert += "yV4RzcRGhJA+cLnmpdDOTEhignnvnhEuY6HVRYYXhOTyeeluET7KRCxbJGqO7TdW"
(PRE) cCert += "gjrHL3HRbNE4NY5GAdOZuLaWxElG5ZVCHqtG0Nh7UQAhcz+EKyZBAewv5XuH0Oom"
(PRE) cCert += "ZXw6mM2mY2soL6z1224NusM8/BbJcYTQUlAEKblEChhGK1XlxiVOU2nc9KE="

(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF1->F1_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""

(PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) _aTotal[001] := '<cfdi:Comprobante'
(PRE) _aTotal[001] += ' xmlns:cfdi="http://www.sat.gob.mx/cfd/3"'
(PRE) _aTotal[001] += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
(PRE) _aTotal[001] += ' xmlns:implocal="http://www.sat.gob.mx/implocal"'
(PRE) _aTotal[001] += ' xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/CartaPorte30 http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte30.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd"'
(PRE) _aTotal[001] += ' Version="3.3"'
(PRE) _aTotal[001] += ' Serie="' + Alltrim(SF1->F1_SERIE) + '"'
(PRE) _aTotal[001] += ' Folio="' + Alltrim(SF1->F1_DOC) + '"'
(PRE) _aTotal[001] += ' Fecha="' + Alltrim(_aTotal[096]) + '"'
(PRE) _aTotal[001] += ' Sello="' + Alltrim(_aTotal[100]) + '"'
(PRE) _aTotal[001] += ' FormaPago="' + Iif(Empty(AI0->AI0_MPAGO),"99",Alltrim(AI0->AI0_MPAGO)) + '"'
(PRE) _aTotal[001] += ' NoCertificado="' + Alltrim(SF1->F1_CERTFOL) + '"'
(PRE) _aTotal[001] += ' Certificado="' + cCert + '"'
(PRE) _aTotal[001] += ' CondicionesDePago="' + CFDCarEsp(Alltrim(SE4->E4_DESCRI)) + '"'
(PRE) _aTotal[001] += ' SubTotal="' + Alltrim(STR((SF1->F1_VALMERC + IIF(_aTotal[101], SF1->F1_DESCONT, 0 )) - _aTotal[036],14,2)) + '"'
(PRE) _aTotal[001] += IIf(SF1->F1_DESCONT==0, "", ' Descuento="' + Alltrim(STR(SF1->F1_DESCONT,14,2)) + '"')
(PRE) _aTotal[001] += ' Moneda="' + Alltrim(CTO->CTO_MOESAT) + '"'
(PRE) _aTotal[001] += ' TipoCambio="' + IIf(Alltrim(CTO->CTO_MOESAT) <> "MXN", Alltrim(STR(SF1->F1_TXMOEDA,14,2)), "1") + '"'
(PRE) _aTotal[001] += ' Total="' + Alltrim(STR(iif(GetSx3Cache("F1_VALBRUT","X3_DECIMAL")<= 2,SF1->F1_VALBRUT,Round(SF1->F1_VALBRUT,2)),14,2)) + '"'
(PRE) _aTotal[001] += ' TipoDeComprobante="' + IIf(Alltrim(SF1->F1_ESPECIE) == "NF", "I", "E") + '"'
(PRE) _aTotal[001] += ' MetodoPago="PUE"'
(PRE) _aTotal[001] += ' LugarExpedicion="' + CFDCarEsp(AllTrim(SM0->M0_CEPENT)) + '"'
(PRE) _aTotal[001] += '>'
(PREREG) _aTotal[001]

(POS) cNodoCCE := IIf(lCCCE, ' <cce11:ComercioExterior' , "")
(POS) cNodoCCE += IIf(lCCCE, ' xmlns:cfdi="http://www.sat.gob.mx/cfd/3"' , "")
(POS) cNodoCCE += IIf(lCCCE, ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' , "")
(POS) cNodoCCE += IIf(lCCCE, ' xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11"' , "")
(POS) cNodoCCE += IIf(lCCCE, ' xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/ComercioExterior11 http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior11/ComercioExterior11.xsd"' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Version="1.1"' , "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF1->F1_TRASLA), ' MotivoTraslado="' + Alltrim(SF1->F1_TRASLA) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF1->F1_TIPOPE), ' TipoOperacion="' + Alltrim(SF1->F1_TIPOPE) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF1->F1_CVEPED), ' ClaveDePedimento="' + Alltrim(SF1->F1_CVEPED) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF1->F1_CERORI), ' CertificadoOrigen="' + Alltrim(SF1->F1_CERORI) +'"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF1->F1_NUMCER), ' NumCertificadoOrigen="' + Alltrim(SF1->F1_NUMCER) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF1->F1_EXPCONF), ' NumeroExportadorConfiable="' + Alltrim(SF1->F1_EXPCONF) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF1->F1_INCOTER), ' Incoterm="' + Alltrim(SF1->F1_INCOTER) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF1->F1_SUBDIV), ' Subdivision="' + Alltrim(SF1->F1_SUBDIV) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. SF1->(ColumnPos("F1_OBSCE")) > 0 .And. !Empty(SF1->F1_OBSCE), ' Observaciones="' + CFDCarEsp(Alltrim(SF1->F1_OBSCE), .F.) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(Str(SF1->F1_TCUSD)), ' TipoCambioUSD="' + Alltrim(Str(SF1->F1_TCUSD)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(Str(SF1->F1_TOTUSD)), ' TotalUSD="' + Alltrim(Str(SF1->F1_TOTUSD,14,2)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")
(POS) _aTotal[094] := cNodoCCE

[XXX CFDIREL]
(PREREG) AllTrim(SF1->F1_RELSAT) <> ""
(PREREG) (_aTotal[001] := fGetFolRel("E"),.T.)
(PREREG) _aTotal[001]

[XXX EMISOR]
(PRE) _aTotal[001] := ' <cfdi:Emisor'
(PRE) _aTotal[001] += ' Rfc="' + CFDCarEsp(AllTrim(SM0->M0_CGC)) + '"'
(PRE) _aTotal[001] += ' Nombre="' + CFDCarEsp(_aTotal[075],.T.) + '"'
(PRE) _aTotal[001] += ' RegimenFiscal="' + CFDCarEsp(Alltrim(SM0->M0_DSCCNA)) + '"'
(PRE) _aTotal[001] += '/>'
(PREREG) _aTotal[001]

[XXX RECEPTOR_CLIENTE]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF1->F1_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""

(PREREG) AllTrim(SF1->F1_ESPECIE) == "NCC"
(PREREG) (SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PREREG) (SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PREREG) (_aTotal[001] := ' <cfdi:Receptor' , .T.)
(PREREG) (_aTotal[001] += ' Rfc="' + CFDCarEsp(AllTrim(SA1->A1_CGC)) + '"' , .T.)
(PREREG) (_aTotal[001] += ' Nombre="' + CFDCarEsp(Alltrim(SA1->A1_NOME),.T.) + '"' , .T.)
(PREREG) IIf(lCCCE,(_aTotal[001] += ' ResidenciaFiscal="' + Alltrim(SYA->YA_CCESAT) + '"' , .T.),"")
(PREREG) IIf(lCCCE,(_aTotal[001] += ' NumRegIdTrib="' + Alltrim(AI0->AI0_IDFIS) + '"' , .T.),"")
(PREREG) (_aTotal[001] += ' UsoCFDI="' + Alltrim(SF1->F1_USOCFDI) + '"' , .T.)
(PREREG) (_aTotal[001] += '/>' ,.T.)
(PREREG) _aTotal[001]


//Emisor
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Emisor' , "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Domicilio' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Calle="' + CFDCarEsp(AllTrim(SM0->M0_ENDCOB)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(CFDCarEsp(AllTrim(SM0->M0_CEPENT)))), ' Colonia="' + CFDCarEsp(AllTrim(ObtColSAT("S015",AllTrim(SM0->M0_CEPENT),5,5,1,4))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SM0->M0_CEPENT))), ' Municipio="' + CFDCarEsp(AllTrim(SM0->M0_CODMUN)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Estado="' + CFDCarEsp(Alltrim(ObtColSAT("S004",AllTrim(SM0->M0_CEPENT),1,5,6,3))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Pais="' + AllTrim("MEX") + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' CodigoPostal="' + AllTrim(SM0->M0_CEPENT) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '/>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' </cce11:Emisor>' + ( chr(13)+chr(10) ), "")

//Receptor
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Receptor' , "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")

//Domicilio Receptor
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Domicilio' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Calle="' + CFDCarEsp(AllTrim(SA1->A1_END)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NR_END)), ' NumeroExterior="' + AllTrim(SA1->A1_NR_END) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NROINT)), ' NumeroInterior="' + AllTrim(SA1->A1_NROINT) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))), ' Colonia="' + CFDCarEsp(AllTrim(SA1->A1_BAIRRO)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_MUN)), ' Municipio="' + CFDCarEsp(AllTrim(SA1->A1_MUN),.T.) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Estado="' + CFDCarEsp(Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI"))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Pais="' + AllTrim(Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCESAT")) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' CodigoPostal="' + AllTrim(SA1->A1_CEP) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '/>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' </cce11:Receptor>' + ( chr(13)+chr(10) ), "")

(POS) (cNodoCCE += IIf(lCCCE, ' <cce11:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) _aTotal[094] += cNodoCCE

[SD1 CONCEPTO]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF1->F1_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""

(PRE) DbGoTop()

(PREREG) (cNodoCCE += IIf(lCCCE, ' <cce11:Mercancia' , ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD1->D1_ITEM + SD1->D1_COD), ' NoIdentificacion="' + Alltrim(SD1->D1_ITEM + SD1->D1_COD) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD1->D1_FRACCA), ' FraccionArancelaria="' + Alltrim(SD1->D1_FRACCA) + Alltrim(SD1->D1_NICO) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD1->D1_CANADU)), ' CantidadAduana="' + Alltrim(Str(SD1->D1_CANADU)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD1->D1_FRACCA), ' UnidadAduana="' + AllTrim(ObtColSAT("S014",AllTrim(SD1->D1_FRACCA),1,8,9,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD1->D1_VALADU)), ' ValorUnitarioAduana="' + Alltrim(Str(SD1->D1_VALADU,14,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD1->D1_USDADU)), ' ValorDolares="' + Alltrim(Str(SD1->D1_USDADU,14,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ) , ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, ' </cce11:Mercancia>' + ( chr(13)+chr(10) ), ""),.T.)

(POS) (cNodoCCE += IIf(lCCCE, ' </cce11:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) (cNodoCCE += IIf(lCCCE, ' </cce11:ComercioExterior>' , ""),.T.)
(POS) _aTotal[094] += cNodoCCE

(POS) (_aTotal[034] := fXMLFUN("CO",.F., .F. ,.F.))

[XXX CONCEPTOS]
(POS) FsQuery(_aTotal[097],2)
(PREREG) (_aTotal[001] := _aTotal[034],.T.)
(PREREG) _aTotal[001]

[XXX IMPUESTOS]
(PREREG) (_aTotal[002] := fXMLFUN("TI",.F., .F. ,.T.))
(PREREG) _aTotal[002]

//IMPUESTOS LOCALES//
(PRE) (_aTotal[095] := fXMLFUN("IL",.F.),.T.)

[XXX COMPLEMENT]
(PREREG) (_aTotal[001] := IIF(!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095]), ' <cfdi:Complemento', ""), .T.)
(PREREG) (_aTotal[001] += IIF(!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095]),'>',""),.T.)
(PREREG) _aTotal[001]
COMPLEMENT C 021 0 ENCODEUTF8(XMLConv("",,,"cfdi:Complemento",.T.,.F.,4))

[XXX COMERCIOEX]
(PREREG) (_aTotal[001] := _aTotal[094],.T.)
(PREREG) _aTotal[001]

[XXX IMPUESTOLOC]
(PREREG) (_aTotal[001] := _aTotal[095],.T.)
(PREREG) _aTotal[001]

[XXX COMPLEMENT]
(PREREG) (_aTotal[001] := IIF(!EMPTY(_aTotal[094]) .or. !EMPTY(_aTotal[095]) ,' </cfdi:Complemento>',""), .T.)
(PREREG) _aTotal[001]
COMPLEMENT C 021 0 ENCODEUTF8(XMLConv("",,,"cfdi:Complemento",.F.,.T.,4))

//[XXX CAD_ORIG]
//(PREREG) _aTotal[033]

[XXX FACTURA]
(PRE) _aTotal[095] := &(GetNewPar("MV_CFDNAF1","Lower(AllTrim(SF1->F1_ESPECIE)) + '_' + Lower(AllTrim(SF1->F1_SERIE)) + '_' + Lower(AllTrim(SF1->F1_DOC)) + '.xml'"))
(ARQ) _aTotal[095]
FACTURA C 019 0 ENCODEUTF8(XMLConv("",,,"cfdi:Comprobante",.F.,.T.,0))

04. DICCIONARIO DE DATOS

En caso de contar con el archivo diferencial del diccionario (SDFMEX.TXT) para realizar la actualización, consulte el documento Actualizador de diccionario y base de datos - UPDDISTR el cual le guiará para aplicar las actualizaciones automáticamente desde el archivo diferencial.

Se realizan las siguientes actualizaciones al diccionario de datos:

Tablas y Campos


Importante

En la implementación de la versión 3.0 de Carta Porte, se realizaron cambios en las estructuras a continuación.

  • En sombreado verde se indican campos/disparadores nuevos.
  • En sombreado amarillo se indican campos con configuración modificada.


Nueva tabla A1X - CFDI Complemento Carta Porte.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
A1X_FILIAL01C80
RealAlterarSucursal    Sucursal del sistema     Código de identificación de la sucursal de la empresa usuaria del sistema.


      
NoNo
A1X_DOC   02C200@!RealAlterarDocumento   Número de docto/factura  Número de la factura.


      
No
A1X_SERIE 03C30!!!RealAlterarSerie       Serie                    Serie de la factura.


      
No
A1X_INTERN04C10@!RealAlterarTransp InterTransporte internacional Si los bienes o mercancías que son transportadas, ingresan o salen del territorio nacional. Solo se pueden registrar los valores “Sí” o “No”.S=Si;N=No

      Pertence("SN")
A1X_ENTSAL05C10@!RealAlterarTipo        Entrada o Salida         Si los bienes o mercancías ingresan o salen del territorio nacional.E=Entrada;S=Salida

      Pertence("ES")
A1X_PAIS06C30@!RealAlterarPaís Ori/DesPaís origen/Destino

Clave del país de origen o destino de los bienes y/o mercancías transportadas. Este campo debe contener una clave del catálogo c_Pais, publicado en el portal del SAT. Ejemplo: Pais= MEX

Nota: Si el valor registrado en el campo Transporte internacional es “No”, este campo se debe omitir.




MEX009IIF(M->A1X_INTERN=="S",ValidF3I("S009", M->A1X_PAIS,1,3),Vazio())No
A1X_TRANSP07C20@!RealAlterarTransporte  Clave de transporte      Clave del catálogo del complemento Carta Porte, *Los campos marcados con asterisco son obligatorios. c_CveTransporte, publicado en el portal del SAT, que identifica el medio por el cual se transportan los bienes o mercancías.


MEX017Vazio() .or. ValidF3I("S017", M->A1X_TRANSP,1,2)
A1X_PERSCT08C60@!RealAlterarPermiso SCT Tipo de permiso SCT      Clave del tipo de permiso proporcionado por la SCT, el cual debe corresponder de acuerdo al tipo de autotransporte utilizado para el traslado de los bienes o mercancías del catálogo del complemento Carta Porte, c_TipoPermiso, publicado en el portal del SAT.


MEX022Vazio() .or. ValidF3I("S022", M->A1X_PERSCT,1,6)
A1X_PERMIS09C200@!RealAlterarNum.Perm.SCTNúmero permiso SCT       Número del permiso otorgado por la SCT, el cual se debe registrar de acuerdo al tipo de autotransporte utilizado para el traslado de los bienes o mercancías. Ejemplo: NumPermisoSCT= 0X2XTXZ0X5X0X3X2X1X0


      
A1X_ASEGUR10C300@!RealAlterarAseguradora Nombre de la aseguradora Nombre de la aseguradora que cubre los riesgos del autotransporte utilizado para el traslado de los bienes o mercancías.


      
A1X_POLIZA11C60@!RealAlterarNúm. Póliza Número de póliza         Número de póliza asignado por la aseguradora, que cubre los riesgos del autotransporte utilizado para el traslado de los bienes o mercancías.


      
A1X_ASEGMA12C300@!RealAlterarAseg Med AmbAsegurador medio ambienteEn este campo se podrá registrar el nombre de la aseguradora que cubre los posibles daños al medio ambiente, que es aplicable para los transportistas que realicen el traslado de materiales o residuos peligrosos, es decir, cuando se capture información en el campo MaterialPeligroso.




No
A1X_POLMA13C100@!RealAlterarPóliza Med ANo. Póliza medio ambienteEn este campo se podrá registrar el número de póliza asignado por la aseguradora, que cubre los posibles daños al medio ambiente aplicable para los transportistas que realicen el traslado de materiales o residuos peligrosos.




No
A1X_ASECGA14C300@!RealAlterarAseg. CargaAseguradora de cargaEn este campo se podrá registrar el nombre de la aseguradora que cubre los riesgos de la carga (bienes y/o mercancías) transportada.




No
A1X_POLCGA15C100@!RealAlterarPóliza CargaNo. Póliza de cargaEn este campo se podrá registrar el número de póliza que emite la aseguradora que cubre los riesgos de la carga (bienes y/o mercancías) transportada.




No
A1X_PRISEG16N142@ 999,999,999.99RealAlterarPrima SeguroValor prima del seguroEn este campo se podrá registrar el valor del importe de la prima del seguro contratado, por el cargo adicional acordado entre el transportista y el cliente conforme a lo establecido en las disposiciones jurídicas que para tal efecto emita la SCT.



Positivo()No
A1X_VEHIC 17C80@!RealAlterarVehículo    Codigo de vehículo       Código de vehículo relacionada con la tabla de vehículos DA3. La categoría registrada en la tabla Tipos de Vehículo (DUT), relacionada con el vehículo correspondiente, debe ser diferente a 3-Remolque.


DA3   ExistCPO("DA3") 
A1X_PLACA 18C80@!VirtualVisualizarPlaca       Número de placa          Placa vehicular del autotransporte que es utilizado para transportar los bienes o mercancías, se deben registrar solo los caracteres alfanuméricos, sin guiones y espacios.


      
No
A1X_MODELO19C40@!VirtualVisualizarModeloAño modeloAño del autotransporte que es utilizado para transportar los bienes o mercancías.


      
No
A1X_CONFIG20C70@!VirtualVisualizarConfig.VehicConfiguración vehicular  Clave de nomenclatura del autotransporte, del catálogo del complemento Carta Porte, c_ConfigAutotransporte, publicado en el portal del SAT, que es utilizado para transportar los bienes o mercancías.


      
No
A1X_REMOLQ21C80@!RealAlterarRemolque    Código de remolque       Código de vehículo relacionada con la tabla de vehículos DA3. La categoría registrada en la tabla Tipos de Vehículo (DUT), relacionada con el vehículo correspondiente, debe ser igual a 3-Remolque.


DA3   ExistCPO("DA3") No
A1X_SUBREM22C60@!VirtualVisualizarSub remolqueSubtipo remolque         Clave del subtipo de remolque o semirremolques del catálogo del complemento Carta Porte, c_SubTipoRem, publicado en el portal del SAT, que se emplean con el autotransporte para el traslado de los bienes o mercancías.


      
No
A1X_PLAREM23C80@!VirtualVisualizarPlaca RemolqNúmero de placa remolque Placa vehicular del remolque o semirremolque que es utilizado para transportar los bienes o mercancías, se deben registrar solo los caracteres alfanuméricos, sin guiones y espacios.


      
No
A1X_UUIDCP24C360@!RealRealUUIDUUID de Carta PorteFolio del complemento Carta Porte (IdCCP) de la transacción de timbrado conforme al estándar RFC 4122, para la identificación del CFDI con complemento Carta Porte.




A1X_RISTMO25C10@!RealAlterarReg. ISTMO Registro ISTMO Permite registrar las regiones, sí el traslado de los bienes y/o mercancías se realiza al interior de los Polos de Desarrollo para el Bienestar del istmo de Tehuantepec.S=Si;N=No


Pertence("SN")No
A1X_POLOOR26C20@!RealAlterarPolo Origen Polo de Origen ITSMO

Registrar la región en donde inicia el traslado de los bienes y/o mercancías al interior de los Polos de Desarrollo para el Bienestar del istmo de Tehuantepec.




MEX035Vazio() .or. ValidF3I("S035", M->A1X_POLOOR,1,2)No
A1X_DESPOO27C250@!VirtualVisualizarDesc. Polo ODesc. Polo Origen

Visualización de la descripción del Polo Origen del ISTMO, al informar el campo Polo Origen (A1X_POLOOR) de acuerdo al catálogo S035 - Catálogo de Registro ISTMO.






No
A1X_POLODE28C20@!RealAlterarPolo DestinoPolo Destino ITSMO

Registrar la región en donde termina el traslado de los bienes y/o mercancías al interior de los Polos de Desarrollo para el Bienestar del istmo de Tehuantepec.




MEX035Vazio() .or. ValidF3I("S035", M->A1X_POLODE,1,2)No
A1X_DESPOD29C250@!VirtualVisualizarDesc. Polo DDesc. Polo Destino

Visualización de la descripción del Polo Destino del ISTMO, se llena al informar el campo Polo Destino (A1X_POLODE) de acuerdo al catálogo S035 - Catálogo de Registro ISTMO.






No
A1X_REGADU30C30@!RealAlterarRég. AduanaRég. Aduanero

Expresa el tipo de régimen que se encuentra asociado con el traslado de los bienes y/o mercancías de procedencia extranjera, cuando el atributo “TranspInternac” contenga el valor “Sí” y el campo “EntradaSalidaMerc” contenga un valor, este atributo debe existir y contener un valor del catálogo catCartaPorte:c_RegimenAduanero.




MEX037Vazio() .or. ValidF3I("S037", M->A1X_REGADU,1,3)No
A1X_DESREG31C1000@!VirtualVisualizarDesc. Rég.Desc. Régimen Aduanero

Visualización de la descripción del Régimen Aduanero, se llena al informar el campo Rég. Aduana (A1X_REGADU) de acuerdo al catálogo S037 - Catálogo de Régimen Aduanero.






No
A1X_LOGDEV32C10@!RealAlterarLog. InversaLog.Inv.Rec.Dev.

Expresa si se hace uso de alguno de los servicios de logística inversa, recolección o devolución para el traslado de los bienes y/o mercancías.

S=Si;N=No


Pertence("SN")No
A1X_PESOBV33N50@E 99999RealAlterarPeso Bruto VPeso Bruto Vehícular

Peso bruto vehicular: Suma del peso vehicular y el peso de la carga, en el caso de vehículos de carga; o suma del peso vehicular y el peso de los pasajeros, equipaje y paquetería, en el caso de los vehículos destinados al servicio de pasajeros.






No
A1X_REMOL234C80@!RealAlterarRemolque 2    Código de remolque no 2        Código de vehículo relacionada con la tabla de vehículos DA3. La categoría registrada en la tabla Tipos de Vehículo (DUT), relacionada con el vehículo correspondiente, debe ser igual a 3-Remolque.


DA3   Vazio() .Or. ExistCPO("DA3")No
A1X_SUBRE235C60@!VirtualVisualizarSub Remol. 2SubTipo remolque 2             Clave del subtipo de remolque o semirremolques del catálogo del complemento Carta Porte, c_SubTipoRem, publicado en el portal del SAT, que se emplean con el autotransporte para el traslado de los bienes o mercancías.


      
No
A1X_PLARE236C80@!VirtualVisualizarPlaca Remo 2Número de placa remolq 2 Placa vehicular del remolque o semirremolque que es utilizado para transportar los bienes o mercancías, se deben registrar solo los caracteres alfanuméricos, sin guiones y espacios.


      
No


Indice.

OrdenClaveDescripciónMuestra Busq.
1A1X_FILIAL+A1X_DOC+A1X_SERIEDocumento + Serie


Nueva tabla A1Y - Carta Porte - Ubicaciones.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
A1Y_FILIAL01C80
RealAlterarSucursal    Sucursal del sistema     Código de identificación de la sucursal de la empresa usuaria del sistema.


      
NoNo
A1Y_DOC   02C200@!RealAlterarDocumento   Número de docto/factura  Número de la factura.


      
No
A1Y_SERIE 03C30!!!RealAlterarSerie       Serie                    Serie de la factura.


      
No
A1Y_ITEM  04C20@!RealAlterarNum. Item   Número de ítem           Consecutivo en el registro de ubicaciones. (Asignar automáticamente, relleno de ceros a la izquierda.)


      
No
A1Y_TIPEST05C10@!RealAlterarT. UbicaciónTipo Ubicación         

En este campo se deberá registrar si la ubicación es de Origen o Destino:

O-Origen

D-Destino

O=Origen;D=Destino


Pertence("OD")Si
A1Y_DISREC06N122@E 999,999,999.99RealAlterarDistancia   Distancia recorrida      Distacia recorrida en kms de la ubicación Origen al Destino parcial o final.


      M487VLDDIS()No
A1Y_ORIGEN07C80@!RealAlterarId UbicaciónId UbicaciónCuando las mercancías tengan diferentes ubicaciones de tipo Origen y/o Destino, se les debe asignar un identificador el cual debe incluir el acrónimo “OR” para Origen y “DE” para Destino, seguido de 6 dígitos numéricos.



M487VLDUBI()


No
A1Y_RFCORI08C140@!RealAlterarRFCRFC        RFC del remitente de los bienes o mercancías que se trasladan.


      
A1Y_NOMORI09C500@!RealAlterarNombreNombre       En este campo se podrá registrar el nombre del remitente o destinatario de los bienes y/o mercancías que se trasladan.


      
No
A1Y_FECSAL10D80
RealAlterarFecha Sal/LlFecha de salida/llegadaFecha prevista de salida.


      
A1Y_HRASAL11C8099:99:99RealAlterarHora Sal/LleHora de salida/llegadaHora estimada de salida.
"00:00:00"
      
A1Y_CALORI12C400@!RealAlterarCalleCalleCalle en la que está ubicado  el domicilio de origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte.


      
A1Y_EXTORI13C50
RealAlterarNum. ExteriorNúmero exteriorNúmero exterior en donde se ubica el domicilio del origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte.


      
No
A1Y_INTORI14C50
RealAlterarNum. InteriorNúmero interiorNúmero interior en caso de existir, en donde se ubica el domicilio del origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte.


      
No
A1Y_EDOORI15C30@!RealAlterarEstadoEstadoEstado, entidad, región, comunidad, u otra figura análoga en donde se encuentra ubicado el domicilio del origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte. Si la clave del país es distinta a "MEX", “USA” o “CAN”, se debe registrar texto libre; en caso contrario el campo Estado debe contener una clave del catálogo, c_Estado, publicado en el portal del SAT, donde la columna c_Pais tenga el valor "MEX", “ USA” o “CAN”. Ejemplo: Estado= AGU


MEX025Vazio() .or. ValidF3I("S025", M->A1Y_EDOORI,1,3)
A1Y_CPORI 16C50
RealAlterarC.P.Código postalCódigo postal (PO, BOX) en donde se encuentra el domicilio del *Los campos marcados con asterisco son obligatorios. origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte. Si la clave del país es distinta a "MEX", se debe registrar texto libre; en caso contrario el campo CodigoPostal debe contener una clave del catálogo, c_CodigoPostal, publicado en el portal del SAT, donde la clave de la columna c_Estado, debe ser igual a la clave registrada en el campo Estado, la columna c_Municipio, debe ser igual a la clave registrada en el campo Municipio, y si existe el campo de Localidad, la columna de clave c_Localidad, debe ser igual a la clave registrada en el campo Localidad. Ejemplo: CodigoPostal= 20115


MEX004

Vazio() .or. VldF3ICP("S004", M->A1Y_CPORI,1,8) 

A1Y_COLORI17C40@!RealAlterarColoniaColoniaDonde se ubica el domicilio del origen o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte. Si la clave del país es distinta a "MEX", se debe registrar texto libre, en caso contrario este campo debe contener una clave del catálogo, c_Colonia, publicado en el portal del SAT, donde la columna c_CodigoPostal debe ser igual a la clave registrada en el campo CodigoPostal. Ejemplo: Colonia= 0069


MEX015Vazio() .or. VldF3ICP("S015", M->A1Y_COLORI,1,9)No
A1Y_LOCORI18C20@!RealAlterarLocalidadLocalidadRegistrar la ciudad, población, distrito u otro análogo en donde se encuentra ubicado el domicilio del origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte. Si la clave del país es distinta a "MEX" se debe registrar texto libre. Si la clave del país es “MEX” este campo debe contener una clave del catálogo, c_Localidad, publicado en el portal del SAT, donde la columna c_Estado, tiene el valor seleccionado en el campo Estado. Ejemplo: Localidad= 01


MEX023Vazio() .or. VldF3ICP("S023", M->A1Y_LOCORI,1,5)No
A1Y_MUNORI19C30@!RealAlterarMunicipioMunicipioMunicipio, delegación o alcaldía, condado u otro análogo en donde se encuentra ubicado el domicilio origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte. Si la clave del país es distinta a "MEX", se debe registrar texto libre; en caso contrario el campo Municipio debe contener una clave del catálogo, c_Municipio, publicado en el portal del SAT, donde la columna c_Estado, debe ser igual a la clave registrada en el campo Estado. Ejemplo: Municipio= 001


MEX024Vazio() .or. VldF3ICP("S024", M->A1Y_MUNORI,1,6)No
A1Y_PAIORI20C30@!RealAlterarPaísPaísClave del país en donde se encuentra ubicado el domicilio del origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte. Este campo debe contener una clave del catálogo c_Pais, publicado en el portal del SAT. Ejemplo: Pais= MEX


MEX009Vazio() .or. ValidF3I("S009", M->A1Y_PAIORI,1,3)

(°) Nota:

En caso de aplicar pacote diferencial de actualizaciones al diccionario, debe revisar y modificar manualmente los campos A1Y_TIPEST y A1Y_RFCORI.

Si está migrando de la versión 1.0 a la 3.0 de Carta Porte, debe eliminar los campos adicionales de la tabla; A1Y_RFCDES, A1Y_NOMDES, A1Y_FECLLE, A1Y_HRALLE, A1Y_CALDES, A1Y_EXTDES, A1Y_INTDES, A1Y_EDODES, A1Y_CPDES, A1Y_COLDES, A1Y_LOCDES, A1Y_MUNDES y A1Y_PAIDES.


Indice.

OrdenClaveDescripciónMuestra Busq.
1A1Y_FILIAL+A1Y_DOC+A1Y_SERIE+A1Y_ITEMDocumento + Serie + Num. Item


Nueva tabla A1Z - Carta Porte - Operadores.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
A1Z_FILIAL01C80
RealAlterarSucursal    Sucursal del sistemaCódigo de identificación de la sucursal de la empresa usuaria del sistema.


      
NoNo
A1Z_DOC   02C200@!RealAlterarDocumento   Número de docto/facturaNúmero de la factura.


      
No
A1Z_SERIE 03C30!!!RealAlterarSerie       SerieSerie de la factura.


      
No
A1Z_ITEM  04C20@!RealAlterarItem        Número de ítemConsecutivo en el registro de operadores. (Asignar automáticamente, relleno de ceros a la izquierda)


      
No
A1Z_OPERAD05C60@!RealAlterarOperador    Código de  operadorCódigo del operador relacionado con la tabla de conductores DA4.


DA4   ExistCPO("DA4") 
A1Z_RFC   06C140@!VirtualVisualizarRFC         RFC operadorRFC del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.


      
A1Z_LICENC07C110@!VirtualVisualizarLicencia    Número de licenciaNúmero de folio de la licencia o el permiso otorgado al operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.


      
A1Z_NOMBRE08C400@!VirtualVisualizarNombre      Nombre operadorNombre del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.


      
A1Z_CALLE 09C400@!VirtualVisualizarCalle       Calle operadorCalle en que está ubicado el domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías. Ejemplo: Calle= Álvaro Obregón


      
A1Z_NUMEXT10C50
VirtualVisualizarNum.ExteriorNúmero exteriorNúmero exterior en donde se ubica el domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías. Ejemplo: NumeroExterior = 22


      
No
A1Z_NUMINT11C50
VirtualVisualizarNum.InteriorNúmero interiorNúmero interior, en caso de existir, en donde se ubica el *Los campos marcados con asterisco son obligatorios. domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.


      
No
A1Z_ESTADO12C30@!VirtualVisualizarEstadoEstadoClave del catálogo, c_Estado, publicado en el portal del SAT, del estado, entidad, región, comunidad, u otra figura análoga en donde se encuentra ubicado el domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías. *Los campos marcados con asterisco son obligatorios. Si la clave del país es distinta a "MEX", “USA” o “CAN”, se debe registrar texto libre; en caso contrario el campo Estado debe contener una clave del catálogo c_Estado, donde la columna c_Pais tenga el valor "MEX”, “USA” o “CAN ". Ejemplo: Estado= AGU




A1Z_CP    13C50
VirtualVisualizarC.P.        Código postalClave del código postal (PO, BOX) del catálogo, c_CodigoPostal, publicado en el portal del SAT, el en donde se encuentra ubicado el domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías. Si la clave del país es distinta a "MEX", se debe registrar texto libre; en caso contrario este campo debe contener una clave del catálogo c_CodigoPostal, donde la clave de la columna c_Estado, debe ser igual a la clave registrada en el campo Estado, la columna c_Municipio, debe ser igual a la clave registrada en el campo Municipio, y si existe el campo Localidad, la columna de clave c_Localidad, debe ser igual a la clave registrada en el campo Localidad. *Los campos marcados con asterisco son obligatorios. Ejemplo: CodigoPostal= 20115




A1Z_COLON 14C40@!VirtualVisualizarColonia     Colonia                  Clave del catálogo c_Colonia, publicado en el portal del SAT, de la colonia o dato análogo en donde se ubica el domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías. Si la clave del país es distinta a "MEX", se debe registrar texto libre, en caso contrario el campo “Colonia” debe contener una clave del catálogo c_Colonia, donde la columna c_CodigoPostal, debe ser igual a la clave registrada en el campo CodigoPostal.




No
A1Z_LOCAL 15C20@!VirtualVisualizarLocalidad   Localidad                Clave del catálogo c_Localidad, publicado en el portal del SAT, de la ciudad, población, distrito u análogo en donde se encuentra ubicado el domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías. Si la clave del país es distinta a "MEX", se debe registrar texto libre. Si la clave del país es “MEX” este campo debe contener una clave del catálogo c_Localidad, donde la columna c_Estado, tiene el valor seleccionado en el campo Estado. Ejemplo: Localidad= 01




No
A1Z_MUNIC 16C30@!VirtualVisualizarMunicipio   Municipio                Clave del catálogo c_Municipio, publicado en el portal del SAT, el municipio, delegación o alcaldía, condado u otro análogo en donde se encuentra ubicado el domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías. Si la clave del país es distinta a "MEX", se debe registrar texto libre; en caso contrario el campo Municipio debe contener una clave del catálogo c_Municipio, donde la columna c_Estado, debe ser igual a la clave registrada en el campo Estado. Ejemplo: Municipio= 001




No
A1Z_PAIS  17C30@!VirtualVisualizarPaís        Pais                     Clave del catálogo, c_Pais, publicado en el portal del SAT que está basado en la especificación ISO 3166-1, del país en donde se encuentra ubicado el domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías. Este campo debe contener una clave del catálogo c_Pais. Ejemplo: Pais= MEX





Indice.

OrdenClaveDescripciónMuestra Busq.
1A1Z_FILIAL+A1Z_DOC+A1Z_SERIE+A1Z_ITEMDocumento + Serie + Item


Nueva tabla AE0 - Carta Porte-Propietarios/Arrendatarios.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
AE0_FILIAL01C80
RealAlterarSucursal    Sucursal del sistemaCódigo de identificación de la sucursal de la empresa usuaria del sistema.


      
NoNo
AE0_DOC   02C200@!RealAlterarDocumento   Número docto/facturaNúmero de la factura.


      
No
AE0_SERIE 03C30!!!RealAlterarSerie       Serie de la facturaSerie de la factura.


      
No
AE0_ITEM  04C20@!RealAlterarItem        Número de ítemConsecutivo en el registro de propietarios/arrendatarios. (Asignar automáticamente, relleno de ceros a la izquierda)


      
No
AE0_TIPO  05C10@!RealAlterarTipo        Propietario/ArrendatarioIndica si el registro es de tipo Propietario o Arrendatario del vehículo de transporte.P=Propietario;A=Arrendatario

      Pertence("PA")
AE0_PARTE06C40@!RealAlterarParte TranspParte de transporteEn este campo se deberá registrar la clave que pertenece al transporte o la parte de transporte que no es propiedad del emisor del comprobante y que se encuentra en el catálogo c_ParteTransporte del complemento Carta Porte, publicado en el Portal del SAT.


MEX028Vazio() .or. ValidF3I("S028", M->AE0_PARTE,1,4)
AE0_TRANSP07C60@!RealAlterarTransportad.TransportadoraCódigo del transporte relacionado con la tabla de transportadoras, SA4.


SA4   ExistCPO("SA4") 
AE0_NOMBRE08C400@!VirtualVisualizarNombre      Nombre transportadoraNombre del propietario/arrendatario del medio de transporte.


      
No
AE0_RFC   09C140@!VirtualVisualizarRFC         RFC transportadoraRFC del propietario/arrendatario del medio de transporte.


      
No
AE0_CALLE 10C400@!VirtualVisualizarCalle       CalleCalle en que está ubicado el domicilio del propietario/arrendatario del medio de transporte. Ejemplo: Calle= Álvaro Obregón


      
No
AE0_NUMEXT11C50
VirtualVisualizarNum ExteriorNúmero exteriorNúmero exterior en donde se ubica el domicilio del propietario/arrendatario del transporte. Ejemplo: NumeroExterior = 22


      
No
AE0_NUMINT12C50
VirtualVisualizarNum InteriorNúmero interiorNúmero interior, en caso de existir, en donde se ubica el domicilio del propietario/arrendatario del autotransporte. Ejemplo: NumeroInterior = 33


      
No
AE0_ESTADO13C30@!VirtualVisualizarEstadoEstadoClave del catálogo, c_Estado, publicado en el portal del SAT, del estado, entidad, región, comunidad, u otra figura análoga en donde se encuentra ubicado el domicilio del propietario/arrendatario del transporte. Si la clave del país es distinta a "MEX", “USA” o “CAN”, se debe registrar texto libre; en caso contrario el campo de Estado debe contener una clave del catálogo c_Estado, donde la columna c_Pais tenga el valor "MEX", “USA” o “CAN”. Ejemplo: Estado= AGU




No
AE0_CP14C50
VirtualVisualizarC.P.Código postalClave del código postal (PO, BOX) del catálogo, c_CodigoPostal, publicado en el portal del SAT, el en donde se encuentra ubicado el domicilio del propietario/arrendatario del transporte. Si la clave del país es distinta a "MEX", se debe registrar texto libre; en caso contrario el campo CodigoPostal debe contener una clave del catálogo c_CodigoPostal, donde la clave de la columna c_Estado, debe ser igual a la clave registrada en el campo Estado, la columna c_Municipio, debe ser igual a la clave registrada en el campo Municipio, y si existe el campo Localidad, la columna de clave c_Localidad, debe ser igual a la clave registrada en el campo Localidad. Ejemplo: CodigoPostal= 20115




No
AE0_COLON 15C40@!VirtualVisualizarColonia     ColoniaClave del catálogo c_Colonia, publicado en el portal del SAT, de la colonia o dato análogo en donde se ubica el domicilio del propietario/arrendatario del transporte. Si la clave del país es distinta a "MEX", se debe registrar texto libre; en caso contrario el campo Colonia debe contener una clave del catálogo c_Colonia, donde la columna c_CodigoPostal, debe ser igual a la clave registrada en el campo CodigoPostal. Ejemplo: Colonia= 0069


      
No
AE0_LOCAL 16C20@!VirtualVisualizarLocalidad   LocalidadClave del catálogo c_Localidad, publicado en el portal del SAT, de la ciudad, población, distrito o análogo en donde se encuentra ubicado el domicilio del propietario/arrendatario del transporte. Si la clave del país es diferente de "MEX", se debe registrar texto libremente. El campo de Localidad debe contener una clave del catálogo c_Localidad, donde la columna c_Estado, tiene el valor seleccionado en el campo Estado. Ejemplo: Localidad= 01


      
No
AE0_MUNIC 17C30@!VirtualVisualizarMunicipio   MunicipioMunicipio, delegación o alcaldía, condado u otro análogo en donde se encuentra ubicado el domicilio del propietario/arrendatario del transporte. Si la clave del país es distinta a "MEX", se debe registrar texto libre; en caso contrario el campo Municipio debe contener una clave del catálogo c_Municipio, donde la columna c_Estado, debe ser igual a la clave registrada en el campo Estado. Ejemplo: Municipio= 001


      
No
AE0_PAIS  18C30@!VirtualVisualizarPaís        PaísClave del catálogo, c_Pais, publicado en el portal del SAT que está basado en la especificación ISO 3166-1, del país en donde se encuentra ubicado el domicilio del propietario/arrendatario del transporte. Este campo debe contener una clave del catálogo c_Pais. Ejemplo: Pais= MEX


      
No


Indice.

OrdenClaveDescripciónMuestra Busq.
1AE0_FILIAL+AE0_DOC+AE0_SERIE+AE0_ITEMDocumento + Serie + Item


Modificaciones a la tabla DA3 - Conductores.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
DA3_CONFIG
C70@!RealAlterarConfig VehicConfiguración vehicular  Clave de nomenclatura del autotransporte, del catálogo del complemento Carta Porte, c_ConfigAutotransporte, publicado en el portal del SAT, que es utilizado para transportar los bienes o mercancías.


MEX026Vazio() .or. ValidF3I("S026", M->DA3_CONFIG,1,7)No
DA3_SUBREM
C60@!RealAlterarSubt.Remolq.Subtipo remolque         Clave del subtipo de remolque o semirremolques del catálogo del complemento Carta Porte, c_SubTipoRem, publicado en el portal del SAT, que se emplean con el autotransporte para el traslado de los bienes o mercancías.


MEX027Vazio() .or. ValidF3I("S027", M->DA3_SUBREM,1,6)No


Modificaciones a la tabla DA4 - Vehículos.D2_LIQGR

Campos nuevos.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
DA4_NUMEXT
C50
RealAlterarNum.ExteriorNúmero exterior          Número exterior del domicilio.


      
No
DA4_NUMINT
C50
RealAlterarNum.InteriorNúmero interior          Número interior del domicilio.


      
No
DA4_CODBAI
C40@!RealAlterarCod. ColoniaCódigo de colonia        Código de la colonia correspondiente al catálogo c_Colonia del SAT.


MEX015Vazio() .or. ValidF3I("S015", M->DA4_CODBAI+M->DA4_CEP,1,9)No
DA4_LOCAL 
C20@!RealAlterarLocalidad   Localidad                Código de la localidad correspondiente al catálogo c_Localidad del SAT.


MEX023Vazio() .or. ValidF3I("S023", M->DA4_LOCAL+M->DA4_EST,1,5) No



Modificación de campos. (°)

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
DA4_CODMUN
C30@9RealAlterarCd.MunicipioCodigo del MunicipioCódigo del municipio correspondiente al catálogo c_Municipio del SAT.


MEX024Vazio() .Or. ValidF3I("S024", Substr(M->DA4_CODMUN,1,3)+M->DA4_EST,1,6)No
DA4_EST   
C30@!RealAlterarEstado      Estado                   Código del estado correspondiente al catálogo c_Estado del SAT.


MEX025Vazio() .or. ValidF3I("S025", M->DA4_EST,1,3) No
DA4_PAIS  
C30@!RealAlterarPaís        Código del país          Código del país correspondiente al catálogo c_Pais del SAT.


MEX009Vazio() .or. ValidF3I("S009", M->DA4_PAIS,1,3)No
DA4_CEP   
C50@9RealAlterarCP          Codigo Postal            Código postal correspondiente al catálogo c_CodigoPostal del SAT.


MEX004Vazio() .or. ValidF3I("S004", Substr(M->DA4_CEP,1,5)+M->DA4_EST,1,8) No
DA4_ESTCNH
C30@!RealAlterarEstado Lic.Estado licencia               Código del estado correspondiente al catálogo c_Estado del SAT.


MEX025Vazio() .Or. ValidF3I("S025", M->DA4_ESTCNH,1,3)No
DA4_RGEST 
C30@!RealAlterarEstado ID  Estado IDCódigo del estado correspondiente al catálogo c_Estado del SAT.


MEX025Vazio() .or. ValidF3I("S025", M->DA4_RGEST,1,3) No
DA4_CGC

14
@!











(°) Nota:

En caso de aplicar pacote diferencial de actualizaciones al diccionario, debe revisar y modificar manualmente los campos DA4_CODMUN, DA4_EST, DA4_ESTCNH, DA4_RGEST, DA4_CEP y DA4_CGC.


Modificaciones a la tabla SA4 - Transportadoras. (°)

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
A4_NUMEXT 
C50
RealAlterarNum ExteriorNúmero exterior          Número exterior del domicilio.


      
No
A4_NUMINT 
C50
RealAlterarNum InteriorNúmero interior          Número interior del domicilio.


      
No
A4_CBAIRRO
C40@!RealAlterarCod. ColoniaCodigo de colonia        Código de la colonia correspondiente al catálogo c_Colonia del SAT.


MEX015Vazio() .or. ValidF3I("S015", M->A4_CBAIRRO+M->A4_CEP,1,9)No
A4_CLOCALI
C20@!RealAlterarCod.Localid.Código localidad         Código de la localidad correspondiente al catálogo c_Localidad del SAT.


MEX023Vazio() .or. ValidF3I("S023", M->A4_CLOCALI+M->A4_EST,1,5)No
A4_COD_MUN
C30@!RealAlterarCod. mun.   Codigo del municipio     Código del municipio correspondiente al catálogo c_Municipio del SAT.


MEX024Vazio() .or. ValidF3I("S024", Substr(M->A4_COD_MUN,1,3)+M->A4_EST,1,6)No
A4_EST    
C30@!RealAlterarEstado      Estado del Transportista Código del estado correspondiente al catálogo c_Estado del SAT.


MEX025Vazio() .or. ValidF3I("S025", M->A4_EST,1,3)No
A4_CODPAIS
C30@!RealAlterarCod. pais   Codigo del pais          Código del país correspondiente al catálogo c_Pais del SAT.


MEX009Vazio() .or. ValidF3I("S009", M->A4_CODPAIS,1,3)No
A4_CEP    
C50@R 99999RealAlterarCP          Cod Direccion Postal     Código postal correspondiente al catálogo c_CodigoPostal del SAT.


MEX004Vazio() .or. ValidF3I("S004", Substr(M->A4_CEP,1,5)+M->A4_EST,1,8)No

(°) Nota:

En caso de aplicar pacote diferencial de actualizaciones al diccionario, debe revisar y modificar manualmente los campos A4_COD_MUN, A4_EST y A4_CEP.


Modificaciones a la tabla SD2 - Ítems de facturas de salida.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
D2_CFPS   
C80@!VirtualVisualizarProd.Serv.CPProducto / Servicio CP   Si el campo TipoDeComprobante contiene el valor “I” (Ingreso), el valor de este campo deberá contener una clave del catálogo del complemento Carta Porte c_ClaveProdServCP, publicado en el portal del SAT.


      
No
D2_METODO 
C10@!VirtualVisualizarMt.PeligrosoMaterial peligroso       Si los bienes o mercancías que se trasladan son considerados material peligroso. Los valores permitidos para este campo son “Sí” y “No”.


      
No
D2_GRPCST 
C50@!RealAlterarCve.Mat.Pel.Clave material peligroso Tipo de material peligroso que se transporta. Si el valor registrado en el campo MaterialPeligroso es “Sí”, este campo debe contener una clave del catálogo del complemento Carta Porte, c_MaterialPeligroso, publicado en el portal del SAT. Si el valor registrado en el campo MaterialPeligroso es “No”, este campo no debe existir.


MEX020Vazio() .or. ValidF3I("S020", M->D2_GRPCST,1,5) No
D2_TNATREC
C50@!RealAlterarEmbalaje    Clave de embalaje        Campo condicional para registrar la clave del tipo de embalaje del catálogo del complemento Carta Porte, c_TipoEmbalaje, publicado en el portal del SAT, que se requiere para transportar el material o residuo peligroso. Este campo debe existir siempre que el campo CveMaterialPeligroso tenga un valor del catálogo del complemento Carta Porte, c_MaterialPeligroso, publicado en el portal del SAT, en caso contrario este campo no debe existir


MEX021Vazio() .or. ValidF3I("S021", M->D2_TNATREC,1,5)No
D2_FCICOD 
C400@!RealAlterarUUID Com ExtUUID comercio exterior   El folio fiscal o UUID del comprobante de comercio exterior que se relaciona, este dato se vuelve requerido cuando el campo EntradaSalidaMerc contenga el valor “Salida”. Este campo puede existir siempre que el valor registrado en el campo TranspInternac es “Sí” y el campo EntradaSalidaMerc contiene el valor “Salida” y si la exportación es considerada definitiva (de tipo A1), en caso contrario este campo no debe existir.


      
No
D2_VLRFUE 
N142@E 99,999,999,999.99RealAlterarVl.MercancíaValor mercancía          Valor de los bienes o mercancías que se trasladan en los distintos medios de transporte, de acuerdo al valor de de mercado, el valor pactado en la contraprestación o al valor estimado que determine el contribuyente.


      Positivo()No
D2_CNATREC
C80@!RealAlterarId Ub OrigenId. ubicación origenEn este campo se deberá capturar un valor de los registrados en el campo “ID Ubicación Origen” de la sección “Ubicaciones”.



Substr(M->D2_CNATREC,1,2)=="OR".And.Val(Substr(M->D2_CNATREC,3))>0No
D2_GRUPONC
C80@!RealAlterarId Ub DestinoId. ubicación destinoEn este campo se deberá capturar un valor de los registrados en el campo “ID Ubicación Destino” de la sección “Ubicaciones”.



Substr(M->D2_GRUPONC,1,2)=="DE".And.Val(Substr(M->D2_GRUPONC,3))>0No
D2_PEDISAT
C900@!RealAlterarNum. Ped.   Número de PedimentoEn este campo se podrá registrar el número de pedimento de importación que se encuentra asociado con el traslado de los bienes y/o mercancías de procedencia extranjera para acreditar la legal estancia y tenencia durante su traslado en territorio nacional




No
D2_PAFMD5
C20@!RealAlterarTpo Doc AduTipo de Documento AduaneroEn este campo se podrá registrar el tipo de documento
aduanero que se encuentra asociado al traslado de los bienes y/o mercancías de procedencia extranjera durante
su traslado en territorio nacional.



MEX038Vazio() .or. ValidF3I("S038", M->D2_PAFMD5,1,2)No
D2_LIQGR
C500@!RealAlterarId Doc AduanId de Documento AduaneroEn este campo se podrá registrar el identificador o folio del documento aduanero que se encuentra asociado al traslado de los bienes y/o mercancías de procedencia extranjera para acreditar la legal estancia o tenencia durante su traslado en territorio nacional.




No
D2_NRECAGR
C140@!RealAlterarRFC Imp     RFC del importadorEn este campo se podrá registrar el RFC del importador
de los bienes y/o mercancías que fue registrado en la documentación aduanera correspondiente y este se encuentre en la lista de RFC inscritos no cancelados del SAT (l_RFC)





No
D2_LOTECTL
C100@!RealAlterarLoteLoteEn este campo se podrá registrar la denominación que
identifica y confiere trazabilidad del medicamento, precursor, químico de uso dual, psicotrópico o estupefaciente elaborado en un ciclo de producción, bajo condiciones equivalentes de operación y durante un periodo. 




LocXVlot()             No
D2_DTVALID
D80@!RealAlterarFecha cadFecha caducidadEn este campo se podrá registrar la fecha de caducidad del medicamento, psicotrópico o estupefaciente; o para expresar la fecha de reanálisis del precursor o químico de uso dual que se traslada a través de los distintos medios de transporte. Se expresa en la forma AAAA-MM-DD.



M->D2_DTVALID >= dDataBase No


Modificaciones a la tabla SF2 - Encabezado de factura de salida.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónConsultaValidaciónObligatorioUsado
F2_TPCOMPL
C10@!RealAlterarCarta Porte?Usa Carta Porte?         Activar el uso de Carta Porte. S- Permite el uso del botón "Carta Porte"S=Si;N=No"N"
      Pertence("SN")


Modificaciones a la tabla SB1 - Productos.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpListaInicializadorModo ediciónValidaciónObligatorioUsado
B1_TPCLAS
C10@!RealAlterarMat. PeligrosoMaterial Peligroso     Indica si el material será considerado o no como material peligroso, la selección será mostrada en el Complemento de Carta Porte0=No;1=Sí;
ObtColSAT("S019",M->B1_PRODSAT,1,8,189,3) =='0,1'Pertence(" 01")No


Modificaciones a la tabla SB5 - Datos Adicionales del Producto.

CampoOrdenTipoTamañoDecimalFormatoContextoPropiedadTítuloDescripciónHelpInic. estándarValidaciónWhenConsultaObligatorioUsado
B5_SECTOR
C20@!RealAlterarSec.COFEPRISSector COFEPRIS

Expresa la clasificación del producto que se traslada a través de los distintos medios de transporte y que debe contar con autorización por la autoridad correspondiente. Utilizado para el complemento de Carta porte.


Vazio() .or. ValidF3I("S032", M->B5_SECTOR,1,2)
MEX032No
B5_DESCSEC
C500@!VirtualVisualizarDesc. SectorDescripción Sector COFEPR

Visualización de la descripción del Sector COFEPRIS, se llena al informar el campo Sec.COFEPRIS (B5_SECTOR) de acuerdo al catálogo S032 - Catálogo de Sector COFEPRIS.

IIf(FindFunction("LXMXF3IDES"),LXMXF3IDES(1,M->B5_SECTOR),"")


No
B5_NOMGER
M100@!RealAlterarNom.Gen.ProdNombre Genérico del Prod.Fármaco o la sustancia activa del medicamento, psicotrópico o estupefaciente. Utilizado para el complemento de Carta porte.

M->B5_SECTOR $ "01|03"
No
B5_NOMCOME
M100@!RealAlterarMarca ComercMarca comercial Marca con la que se comercializa el producto o nombre que le asigna el laboratorio o fabricante a sus especialidades farmacéuticas con el fin de distinguirlas de otras similares del medicamento, psicotrópico o estupefaciente. Utilizado para el complemento de Carta porte.

M->B5_SECTOR $ "01|03"
No
B5_FABRICA
M100@!RealAlterarFabricanteDatos del FabricanteNombre o razón social del establecimiento que realiza la fabricación o manufactura del medicamento, precursor, químico de uso dual, psicotrópico o estupefaciente. Utilizado para el complemento de Carta porte.

M->B5_SECTOR $ "01|02|03|05"
No
B5_CODFORM
C20@!RealAlterarCód.For.FarmCódigo Forma FarmacéuticaForma farmacéutica o mezcla del medicamento, precursor, químico de uso dual, psicotrópico o estupefaciente que presenta ciertas características físicas para su adecuada dosificación, conservación y administración. Utilizado para el complemento de Carta porte.
Vazio() .or. ValidF3I("S034", M->B5_CODFORM,1,2)M->B5_SECTOR $ "01|02|03"MEX034No
B5_DESCFOR
C500@!VirtualVisualizarDesc.Form.FaDesc.Form.Farmacéutica

Visualización de la descripción de la Forma Farmacéutica, se llena al informar el campo Cód.For.Farm (B5_CODFORM) de acuerdo al catálogo S034 - Catálogo de Forma Farmacéutica.

IIf(FindFunction("LXMXF3IDES"),LXMXF3IDES(3,M->B5_CODFORM),"")


No
B5_CONDIC
C20@!RealAlterarCond. Esp TrCódigo Condicion de TransCondición en la cual es necesario mantener el medicamento, precursor, químico de uso dual, psicotrópicos o estupefacientes durante el traslado y almacenamiento. Utilizado para el complemento de Carta porte.
Vazio() .or. ValidF3I("S036", M->B5_CONDIC,1,2)M->B5_SECTOR $ "01|02|03"MEX036No
B5_DESCCON
C500@!VirtualVisualizarDesc.Cond.EsDesc. Condición Especial

Visualización de la descripción del Sector COFEPRIS, se llena al informar el campo Sec.COFEPRIS (B5_SECTOR) de acuerdo al catálogo S032 - Catálogo de Sector COFEPRIS.

IIf(FindFunction("LXMXF3IDES"),LXMXF3IDES(4,M->B5_CONDIC),"")


No
B5_REGSAN
C150@!RealAlterarReg. SanitarRegistro SanitarioRegistro sanitario o folio de autorización con el que cuenta la empresa para el traslado del medicamento, psicotrópico o estupefaciente. 

M->B5_SECTOR $ "01|02|03"
No
B5_PERIMP
C60@!RealAlterarPermiso Imp Folio Permiso ImportaciónFolio del permiso de importación con el que cuenta el medicamento, precursor, químico de uso dual, psicotrópico o estupefaciente.  Utilizado para el complemento de Carta porte.

M->B5_SECTOR $ "01|02|03"
No
B5_VUCEM
C250@!RealAlterarVUCEM       Folio VUCEM       Número de folio de importación VUCEM para la identificación del documento, para el traslado de medicamentos, precursores o químicos de uso dual, sustancias tóxicas, plaguicidas o fertilizantes. 

M->B5_SECTOR == "04"
No
B5_INGREDI
M100@!RealAlterarIng. Activo Ingrediente Activo       Nombre común del ingrediente activo de los precursores, químicos de uso dual, plaguicidas o fertilizantes. Utilizado para el complemento de Carta porte.

M->B5_SECTOR $ 02|05"
No
B5_SUSACT
M100@!RealAlterarSust. ActivaSustancia Activa         Nombre de la sustancia activa de los precursores, químicos de uso dual o sustancias tóxicas. Utilizado para el complemento de Carta porte.



No
B5_CAS
C150@!RealAlterarCAS         CAS         Número Chemical Abstracts Service (CAS). Utilizado para el complemento de Carta porte.

M->B5_SECTOR == "04"
No
B5_EMPIMP
M100@!RealAlterarEmp. ImportaEmpresa Importadora      Nombre o razón social de la empresa importadora de las sustancias tóxicas.Utilizado para el complemento de Carta porte.

M->B5_SECTOR == "04"
No
B5_DATFOR
M100@!RealAlterarFormulador  Formulador  Registrar el país y nombre o razón social de quien formula el ingrediente activo del plaguicida o fertilizante. 

M->B5_SECTOR == "05"
No
B5_DATMAQ
M100@!RealAlterarMaquilador  Maquilador  Registrar el país y nombre o razón social de quien maquila el ingrediente activo del plaguicida o fertilizante.  Utilizado para el complemento de Carta porte.

M->B5_SECTOR == "05"
No
B5_USOAUT
M100@!RealAlterarUso autorizadoUso autorizadoRegistrar el uso autorizado del plaguicida o fertilizante de acuerdo a la regulación del país.  Utilizado para el complemento de Carta porte.

M->B5_SECTOR == "05"
No
B5_TPOMAT
C20@!RealAlterarTipo Materia             Tipo Materia  Estado de la materia o producto al realizar una operación de comercio exterior a través de los distintos medios de transporte.  Utilizado para el complemento de Carta porte.
Vazio() .or. ValidF3I("S033", M->B5_TPOMAT,1,2)
MEX033No
B5_DESMAT
C500@!VirtualVisualizarDesc. Tpo.MatDesc. Tipo Materia

Visualización de la descripción del Tipo de Materia se llena al informar el campo Tipo Materia (B5_TPOMAT) de acuerdo al catálogo S033 - Catálogo de Tipo Materia.

IIf(FindFunction("LXMXF3IDES"),LXMXF3IDES(2,M->B5_TPOMAT),"")


No
B5_OTROS
M100@!RealAlterarOtrosOtros

Cuando "TipoMateria" contenga el valor "05" con descripción "Otra", este dato debe existir, en caso contrario se debe omitir. Utilizado para el complemento de Carta porte.





No

Aviso

Las modificaciones y nuevos campos para versión Carta Porte 3.0 fueron incluidas en el pacote 013132 - DMINA-21262 - COMPLEMENTO DE CARTA PORTE (CCP) v3.0.

Consultas Estándar;

Consultas Estándar:

Actualizaciones en la tabla SXB-Consultas Estándar.


Creación de la consulta específica MEX015 - Colonias.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX015101REColoniasF3I
MEX01520101
F812SXB('S015','Clave') 
MEX015501

VAR_IXB


Creación de la consulta específica MEX017 - Clave del Transporte.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX017101REClave del TransporteF3I
MEX01720101
F812SXB('S017','Transp')
MEX017501

VAR_IXB


Creación de la consulta específica MEX018 - Tipo de Estación.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX018101RETipo de EstaciónF3I
MEX01820101
F812SXB('S018','Estacion')
MEX018501

VAR_IXB


Creación de la consulta específica MEX019 - Prods y Servs CP.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX019101REProds y Servs CPF3I
MEX01920101
F812SXB('S019','Producto')
MEX019501

VAR_IXB


Creación de la consulta específica MEX020 - Material Peligroso.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX020101REMaterial PeligrosoF3I
MEX02020101
F812SXB('S020','Material')
MEX020501

VAR_IXB


Creación de la consulta específica MEX021 - Tipo de Embalaje.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX021101RETipo de EmbalajeF3I
MEX02120101
F812SXB('S021','Embalaje')
MEX021501

VAR_IXB


Creación de la consulta específica MEX022 - Tipo Permiso.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX022101RETipo PermisoF3I
MEX02220101
F812SXB('S022','Permiso')
MEX022501

VAR_IXB


Creación de la consulta específica MEX023 - Localidades.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX023101RELocalidadesF3I
MEX02320101
F812SXB('S023','Localidad')
MEX023501

VAR_IXB


Creación de la consulta específica MEX024 - Municipios.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX024101REMunicipiosF3I
MEX02420101
F812SXB('S024','Municipio')
MEX024501

VAR_IXB


Creación de la consulta específica MEX025 - Estados.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX025101REEstadosF3I
MEX02520101
F812SXB('S025','Estado')
MEX025501

VAR_IXB


Creación de la consulta específica MEX026 - Autotransporte Fed..

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX026101REAutotransporte Fed.F3I
MEX02620101
F812SXB('S026','Clave')
MEX026501

VAR_IXB


Creación de la consulta específica MEX027 - Tipo de Remolque.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX027101RETipo de RemolqueF3I
MEX02720101
F812SXB('S027','Remolque')
MEX027501

VAR_IXB


Creación de la consulta específica MEX028 - Parte Transporte.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX028101REParte TransporteF3I
MEX02820101
F812SXB('S028','Codigo')
MEX028501

VAR_IXB

Modificación de la consulta específica MEX004 - Códigos Postales. (°)

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX0042


F812SXB('S004','Codigo')

(°) Nota:

En esta consulta, ya existente, solo se actualiza el registro Tipo 2 con el Contenido que se indica.

Creación de la consulta específica MEX032 - Sector COFEPRIS.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX032101RESector COFEPRISF3I
MEX03220101
F812SXB("S032","Clave") 
MEX032501

VAR_IXB

Creación de la consulta específica MEX033 - Tipo Materia.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX033101RETipo MateriaF3I
MEX03320101
F812SXB("S033","Clave")
MEX033501

VAR_IXB

Creación de la consulta específica MEX034 - Forma Farmacéutica.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX034101REForma FarmacéuticaF3I
MEX03420101
F812SXB("S034","Clave")
MEX034501

VAR_IXB

Creación de la consulta específica MEX035 - Registro ISTMO.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX035101RERegistro ISTMOF3I
MEX03520101
F812SXB("S035","Clave") 
MEX035501

VAR_IXB

Creación de la consulta específica MEX036 - Cond. Especial Trasp.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX036101RECond. Especial TraspF3I
MEX03620101
F812SXB("S036","Clave")
MEX036501

VAR_IXB

Creación de la consulta específica MEX037 - Régimen Aduanero.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX037101RERégimen AduaneroF3I
MEX03720101
F812SXB("S037","Clave")
MEX037501

VAR_IXB

Creación de la consulta específica MEX038 - Documento Aduanero.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX038101REDocumento Aduanero F3I
MEX03820101
F812SXB("S038","Clave")
MEX038501

VAR_IXB

Aviso

Las consultas especificas "MEX032, MEX033, MEX034, MEX035, MEX036, MEX037 y MEX038" fueron incluidas en el pacote 013132 - DMINA-21262 - COMPLEMENTO DE CARTA PORTE (CCP) v3.0.

Disparadores


CampoSecuenciaC. DominioTipoReglaPosicionaAliasOrdenClaveCondición
A1Y_CPDES 1A1Y_EDODESP - PrimarioObtColSAT("S004",M->A1Y_CPDES,1,5,6,3)N - No
0
!EMPTY(M->A1Y_CPDES)
A1Y_CPDES 2A1Y_LOCDESP - PrimarioObtColSAT("S004",M->A1Y_CPDES,1,5,12,2) N - No
0
!EMPTY(M->A1Y_CPDES)
A1Y_CPDES 3A1Y_MUNDESP - PrimarioObtColSAT("S004",M->A1Y_CPDES,1,5,9,3)N - No
0
!EMPTY(M->A1Y_CPDES)
A1Y_CPORI 1A1Y_EDOORIP - PrimarioObtColSAT("S004",M->A1Y_CPORI,1,5,6,3)N - No
0
!EMPTY(M->A1Y_CPORI)
A1Y_CPORI 2A1Y_LOCORIP - PrimarioObtColSAT("S004",M->A1Y_CPORI,1,5,12,2) N - No
0
!EMPTY(M->A1Y_CPORI)
A1Y_CPORI 3A1Y_MUNORIP - PrimarioObtColSAT("S004",M->A1Y_CPORI,1,5,9,3)N - No
0
!EMPTY(M->A1Y_CPORI)
A1Y_EDODES1A1Y_CPDES P - PrimarioSpace(Len(M->A1Y_CPDES))N - No
0

A1Y_EDODES2A1Y_COLDESP - PrimarioSpace(Len(M->A1Y_COLDES)) N - No
0

A1Y_EDODES3A1Y_LOCDESP - PrimarioSpace(Len(M->A1Y_LOCDES)) N - No
0

A1Y_EDODES4A1Y_MUNDESP - PrimarioSpace(Len(M->A1Y_MUNDES)) N - No
0

A1Y_EDODES5A1Y_PAIDESP - PrimarioObtColSAT("S025",M->A1Y_EDODES,1,3,4,3) N - No
0
!EMPTY(M->A1Y_EDODES) 
A1Y_EDOORI1A1Y_CPORI P - PrimarioSpace(Len(M->A1Y_CPORI))N - No
0

A1Y_EDOORI2A1Y_COLORIP - PrimarioSpace(Len(M->A1Y_COLORI)) N - No
0

A1Y_EDOORI3A1Y_LOCORIP - PrimarioSpace(Len(M->A1Y_LOCORI)) N - No
0

A1Y_EDOORI4A1Y_MUNORIP - PrimarioSpace(Len(M->A1Y_MUNORI)) N - No
0

A1Y_EDOORI5A1Y_PAIORIP - PrimarioObtColSAT("S025",M->A1Y_EDOORI,1,3,4,3) N - No
0
!EMPTY(M->A1Y_EDOORI) 
A4_CEP1A4_ESTP - PrimarioObtColSAT("S004",M->A4_CEP,1,5,6,3) N - No
0
!EMPTY(M->A4_CEP) 
A4_CEP2A4_CLOCALIP - PrimarioObtColSAT("S004",M->A4_CEP,1,5,12,2)N - No
0
!EMPTY(M->A4_CEP) 
A4_CEP3A4_COD_MUNP - PrimarioObtColSAT("S004",M->A4_CEP,1,5,9,3) N - No
0
!EMPTY(M->A4_CEP) 
A4_EST1A4_CEPP - PrimarioSpace(Len(M->A4_CEP)) N - No
0

A4_EST2A4_CBAIRROP - PrimarioSpace(Len(M->A4_CBAIRRO)) N - No
0

A4_EST3A4_CLOCALIP - PrimarioSpace(Len(M->A4_CLOCALI)) N - No
0

A4_EST4A4_COD_MUNP - PrimarioSpace(Len(M->A4_COD_MUN)) N - No
0

A4_EST5A4_CODPAISP - PrimarioObtColSAT("S025",M->A4_EST,1,3,4,3) N - No
0
!EMPTY(M->A4_EST) 
DA4_CEP 1DA4_EST P - PrimarioObtColSAT("S004",M->DA4_CEP,1,5,6,3)N - No
0
!EMPTY(M->DA4_CEP)
DA4_CEP 2DA4_LOCAL P - PrimarioObtColSAT("S004",M->DA4_CEP,1,5,12,2) N - No
0
!EMPTY(M->DA4_CEP)
DA4_CEP 3DA4_CODMUNP - PrimarioObtColSAT("S004",M->DA4_CEP,1,5,9,3)N - No
0
!EMPTY(M->DA4_CEP)
DA4_EST 1DA4_CEP P - PrimarioSpace(Len(M->DA4_CEP))N - No
0

DA4_EST 2DA4_CODBAIP - PrimarioSpace(Len(M->DA4_CODBAI)) N - No
0

DA4_EST 3DA4_LOCAL P - PrimarioSpace(Len(M->DA4_LOCAL))N - No
0

DA4_EST 4DA4_CODMUNP - PrimarioSpace(Len(M->DA4_CODMUN)) N - No
0

DA4_EST 5DA4_PAISP - PrimarioObtColSAT("S025",M->DA4_EST,1,3,4,3)N - No
0
!EMPTY(M->DA4_EST)
D2_COD6D2_METODOP - PrimarioIIf(FindFunction("LxMxDatPro"),LxMxDatPro(M->D2_COD),"")N - No
0

D2_COD7D2_CFPSP - PrimarioSB1->B1_PRODSATS - SiSB11xFilial()+M->D2_COD
B5_SECTOR1B5_DESCSECP - PrimarioIIf(FindFunction("LXMXF3IDES"),LXMXF3IDES(1,M->B5_SECTOR),"")N - No
0

B5_TPOMAT1B5_DESMATP - PrimarioIIf(FindFunction("LXMXF3IDES"),LXMXF3IDES(2,M->B5_TPOMAT),"")N - No



B5_CODFORM1B5_DESCFORP - PrimarioIIf(FindFunction("LXMXF3IDES"),LXMXF3IDES(3,M->B5_CODFORM),"")N - No



B5_CONDIC1B5_DESCCONP - PrimarioIIf(FindFunction("LXMXF3IDES"),LXMXF3IDES(4,M->B5_CONDIC),"")N - No



Aviso

Los disparadores con orden 006 y 007 para el campo D2_COD fueron incluidos en el pacote 009897 - DMINA-14383 FUNCIONALIDAD DE CARTA PORTE VERSION.


Menú SIGAFAT


Nuevas opciones de menú de catálogos en el módulo SIGAFAT:

MenúSubmenúNombre de la RutinaProgramaMóduloTipo
ActualizacionesArchivosTipos de VehículoTMSA530FacturaciónFunción Protheus
ActualizacionesArchivosVehículosOMSA060FacturaciónFunción Protheus
ActualizacionesArchivosConductoresOMSA040FacturaciónFunción Protheus


05. BITACORA DE CAMBIOS

5.1 Carga de Catálogos desde la rutina de Definición de catálogos/Mantenimiento de catálogos.

Para la carga de catálogos se realizaron los siguientes cambios en la issue 12543481 DMINA-13909 DT Carga de catálogos no funciona con más de 99999 registros MEX:

  • Dentro de la rutina de Carga de Catálogos en formato .csv (FISA814), en la función encargada de Insertar los registros en la tabla de Catálogos (f814ReadFile), se toma de forma dinámica el tamaño del campo secuencia (F3I_SEQUEN) al momento de realizar la inserción de registros.
  • Para que la inserción masiva de registros en la tabla Catálogos (F3I) sea más eficiente, se implementa la clase FWBulk.


Paquete:

Las siguientes actualizaciones fueron incorporadas en el paquete: 009766 - DMINA-13909- ACTUALIZACIÓN CAMPO F3I_SEQUEN- MEX.


Actualización de campo en el archivo SX3 - Campos:

Tabla: F3I – Catálogo

Campo

F3I_SEQUEN

Tipo

C

Tamaño

6

Decimal

0

Formato

999999

Título

Secuencia

Descripción

Secuencia

Help

Secuencia

Obligatorio

No

Usado

Si

Browse

No


5.2 Carta Porte con versión CFDI 4.0

Con fecha 30 de diciembre de 2021 el Servicio de Administración Tributaria (SAT) da a conocer cambios a la versión 2.0 del Complemento Carta Porte (CCP) del Comprobante Fiscal Digital por Internet (CFDI), aplicable a la versión CFDI 4.0:

  1. Actualización de las direcciones URL de los esquemas XML y XSD para actualizarlos a CFDI 4.0:

  2. Se actualizan los siguientes catálogos.
  • Productos/Servicios Carta Porte - C_ClaveProdServCP
    El catálogo de claves de productos y servicios mantiene la versión 2.0, pero se actualiza a la Revisión “A”, y actualizando los siguientes conceptos para señalar que en el campo “Material peligroso” pueden contener 0 o 1. Antes se preveía solamente el 0.
    - Estibas
    - Empaques (Embalaje, Paquetería)
    Para descargar los catálogos actualizados - Catálogos Carta Porte
  • Uso CFDI - c_UsoCFDI
    Si el documento realizado es de tipo Traslado, el uso de CFDI debe ser "S01", por lo cual se requiere actualizar el catalogo.
    Para descargar los catálogos actualizados - Catálogos CFDI versión 4.0

Con fecha 31 de diciembre de 2021 el Servicio de Administración Tributaria (SAT) actualiza los instructivos de llenado del Comprobante Fiscal Digital por Internet (CFDI) con Complemento Carta Porte (CCP).

  • Uso CFDI
    Si es documento de tipo traslado, el uso de CFDI debe ser S01.

Para esto, es necesario tener la actualización del CFDI 4.0, puede ver detalles en DT CFDI Versión 4.0


En el caso de Carta Porte en Facturas de Traslado, el atributo uso de CFDI cambia el código de "P01 - Por definir" a "S01 - Sin obligaciones fiscales".

  1. En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación Facturaciones (MATA467N).
  2. Incluir una Factura de Venta de tipo Traslado.
  3. Informar el campo ¿Carta Porte? (F2_TPCOMPL) con el valor S-Si.
  4. Informar el campo Uso CFDI (F2_USOCFDI) con valor S01.
  5. En el detalle informar:
    • El o los productos a transportar (mercancías), utilizando una TES (D2_TES - Tipo de Salidasin afectar stock ni financiero y sin cálculo de Impuesto.

      IMPORTANTE

      Si el Producto es considerado como material peligroso según la columna Material peligroso del catálogo c_ClaveProdServCP (S020) del SAT, se deben informar los campos Cve.Mat.Pel. (D2_GRPCST) y Embalaje (D2_TNATREC), en caso de no informar los campos en el detalle, se presenta el siguiente mensaje y no se permite cambiar de ítem o guardar el documento:



  6. Desde Otras acciones ejecutar la acción Carta Porte.
  7. Informar los datos para el Complemento de Carta Porte y presionar Confirmar.

    IMPORTANTE

    Es necesario informar los datos de la sección Ubicaciones, registrando al menos un Origen y/o Destino, e indicando el campo RFC (A1Y_RFCORI) en cada caso.

  8. Presionar Grabar para confirmar el guardado de la Factura de Traslado,
  9. Confirmar la generación del comprobante fiscal digital
  10. Confirmar el timbrado del comprobante fiscal digital.
  11. Validar que el timbrado haya sido exitoso, que en el XML se visualice el nodo CartaPorte30, que los XSD y versión correspondan a la versión 4.0 y el uso de CFDI igual a S01
    Ejemplo:


5.3 Carta Porte con atributo MaterialPeligroso para Bienes con código de material peligroso "0,1"

Para los Productos, se añade el nuevo campo Mat. Peligroso (B1_TPCLAS) el cual es editable cuando el producto indicado en Producto/Servicio SAT(B1_PRODSAT) cuenta como código de material peligroso el valor "0,1" en el catálogo S019 - Catalogo Producto/Servicio CP; en el campo se podrá indicar la opción Si o No, y será el valor a mostrar en el atributo "Mercancia:MaterialPeligroso".

  • Productos(MATA010)


  • Catálogo S019 - Catalogo Producto/Servicio CP


  • Generacion de XML


Actualizaciones a diccionario realizadas en el paquete de actualización 010110.

Tabla SB1 - Productos:

CampoContenido
CampoB1_TPCLAS
Tipo1 - Caracter
Tamaño1
Decimal0
Formato!@
ContextoReal
PropiedadModificar
Tit. EspañolMt.Peligroso
Des. EspañolMaterial peligroso
Lista Opciones0=No;1=Si;
Modo EdicionObtColSAT("S019",M->B1_PRODSAT,1,8,189,3) =='0,1'
ValidaciónPertence(" 01")
UsadoSi
HelpIndica si será considerado o no como material peligroso, la selección será mostrada en el Complemento de Carta Porte


5.3 - Ajustes del Atributo ObjetoImp de una Factura de Venta (NF)

Producto

TOTVS Backoffice

Línea de producto: 

Línea Protheus

Segmento:

Backoffice

Módulo:SIGAFAT - Facturación
Función:
RutinaNombre TécnicoFecha
FISA814Carga de Catálogos
LOCXFUNAFunciones Genéricas de Notas Fiscales17/05/2023
FATSMEX.INIGeneración de XML de Documentos de Salida17/05/2023
País:México (Pacote: 012207)
Ticket:No aplica
Requisito/Story/Issue (informe el requisito vinculado):DMINA-19024

Se solicita realizar ajustes para permitir al usuario modificar el valor del atributo ObjetoImp, para el timbrado de Facturas de Venta (NF) de tipo Ingreso (Normal) cuando se tiene complemento con Carta Porte, permitiendo utilizar los valores que se definen en el catálogo del SAT c_ObjetoImp:


En la rutina de Carga de Catálogos (FISA814):

Se realizó ajuste para que al entrar a las rutinas de Definición de Catálogos (FISA812) o Mantenimiento de Catálogos (FISA813), si en la ruta local definida en el parámetro MV_PATH814 existe el archivo c_ObjetoImp.csv, se realice la carga de la estructura y datos de la tabla S031 - Catálogo de Objeto de Impuesto.

En la rutina de Funciones Genéricas de Notas Fiscales (LOCXFUNA):

Se realizaron ajustes para:

  • Acumular el valor de impuestos, sumando Traslados y restando las Retenciones, para cuando el campo Objeto Imp (D2_NIT) contiene los valores 01, 03 o 04.
  • No generar el nodo de Impuestos, para los Conceptos, si el campo Objeto Imp (D2_NIT) contiene los valores 01, 03 o 04.

En el archivo de Generación de XML de Documentos de Salida (FATSMEX.INI):

Se realizaron los siguientes ajustes:

  • Restar el valor de Impuestos (Traslados menos Retenciones), del atributo Total,  de los ítems que el campo Objeto Imp (D2_NIT) contiene los valores 01, 03 o 04.
  • La generación de los datos del Complemento de Impuestos Locales para la Cadena Original se generen después de los datos del Complemento de Carta Porte.


IMPORTANTE

La funcionalidad del campo Objeto Imp (D2_NIT), solo aplica para Facturas con Complemento de Carta Porte, y en caso de no existir el campo o estar vacío, se tomará la funcionalidad anterior para la generación del nodo de Impuestos por Concepto.


En el archivo FATSMEX.INI, se deberán realizar los siguientes ajustes:

//FATSMEX.INI V4.0 --- Modelo 2022

[XXX POSICIONAMENTOS]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)

[XXX INICIALIZACION]
(PRE) SD2->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SC6->(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1)) 
(PRE) CTO->(DbSetOrder(1)) 
(PRE) SAH->(DbSetOrder(1)) 
(PRE) _aTotal[009] := SuperGetMV("MV_CFDICPG", .F., "")
(PRE) _aTotal[010] := FindFunction("zh_FechaHoraUTC") .And. !Empty(_aTotal[009])
(PRE) _aTotal[011] := FindFunction("LxFunaCaPo")
(PRE) _aTotal[094] := ""
(PRE) _aTotal[095] := ""
(PRE) _aTotal[033] := ""
(PRE) _aTotal[034] := ""
(PRE) _aTotal[035] := ""
(PRE) _aTotal[036] := 0
(PRE) _aTotal[037] := 0
(PRE) _aTotal[038] := 0
(PRE) _aTotal[039] := SuperGetMV("MV_CFDIEXP",.F.,.F.)
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
(PRE) _aTotal[076] := ((_aTotal[039] .And. !Empty(SF2->F2_TIPOPE)) .Or. SF2->(ColumnPos("F2_TPCOMPL")) > 0 .And. AllTrim(SF2->F2_TPCOMPL)=="S") .And. Alltrim(SF2->F2_TIPODOC) == "21"
(PRE) IIf(_aTotal[010],_aTotal[096] := zh_FechaHoraUTC(Alltrim(_aTotal[009]),Alltrim(SM0->M0_CEPENT),SF2->F2_EMISSAO,SF2->F2_HORA),"")
(PRE) IIf(!_aTotal[010],_aTotal[096] := DtoS(SF2->F2_EMISSAO),"")
(PRE) IIf(!_aTotal[010],_aTotal[096] := Left(_aTotal[096],4) + "-" + Substr(_aTotal[096],5,2)+ "-" + Right(_aTotal[096],2),"")
(PRE) IIf(!_aTotal[010],_aTotal[096] += "T" + SF2->F2_HORA,"")
(PRE) _aTotal[097] := {"SD2",""}
(PRE) _aTotal[098] := "|"
(PRE) _aTotal[099] := "||"
(PRE) _aTotal[100] := ""
(PRE) _aTotal[101] := "OPERACION DE CONFORMIDAD CON EL ART. 29 FRACCION I DE LIVA Y LO ESTIPULADO EN LAS RGCE 5.2.6. FRACCION I, 5.2.7 Y 4.3.21"
(PRE) _aTotal[102] := "OPERACION DE CONFORMIDAD CON EL ART. 29 FRACCION I DE LIVA Y LO ESTIPULADO EN LAS RGCE 5.2.6. FRACCION II, 5.2.7 Y 4.3.21"
(PRE) _aTotal[103] := fSumBC(SF2->F2_DOC,SF2->F2_SERIE,SF2->F2_CLIENTE,SF2->F2_LOJA)
(PRE) _aTotal[104] := IIf(SF2->(ColumnPos("F2_TPCOMPL")) > 0 .And. AllTrim(SF2->F2_TPCOMPL)=="S",.T.,.F.)
(PRE) _aTotal[105] := ""
(PRE) _aTotal[106] := IIf(Alltrim(SF2->F2_TIPODOC) == "21",0,2)
(PRE) _aTotal[107] := IIf(SF2->(ColumnPos("F2_TPDOC")) > 0,ALLTRIM(SF2->F2_TPDOC),ALLTRIM(AI0->AI0_MPAGO))
(PRE) _aTotal[108] := IIf(_aTotal[076],AllTrim(SM0->M0_CGC),AllTrim(SA1->A1_CGC))
(PRE) _aTotal[109] := IIf(_aTotal[076],_aTotal[075],Alltrim(SA1->A1_NOME))
(PRE) _aTotal[110] := IIf(_aTotal[076],AllTrim(SM0->M0_CEPENT),Alltrim(SA1->A1_CEP))
(PRE) _aTotal[111] := IIf(_aTotal[076],Alltrim(SM0->M0_DSCCNA),Alltrim(AI0->AI0_REGFIS))
(PRE) _aTotal[112] := FormPagGlo(SF2->F2_DOC,SF2->F2_SERIE)
(PRE) _aTotal[113] := IIf(!_aTotal[039] .Or. (_aTotal[039] .And. Empty(SF2->F2_TIPOPE)),"01",IIf(SF2->F2_CVEPED !="A1" .Or. Alltrim(SF2->F2_TIPOPE)== "3","04","02"))
(PRE) _aTotal[114] := IIf(_aTotal[113] == "04" .And.( Empty(SF2->F2_CERORI) .Or. Empty(SF2->F2_INCOTER) .Or. Empty(SF2->F2_SUBDIV) .Or. Empty(SF2->F2_TCUSD) .Or. Empty(SF2->F2_TOTUSD)) ,.F.,.T.)
(PRE) _aTotal[115] := {}
(PRE) lCCCE        := .F.
(PRE) cNodoCCE     := ""
(PREREG) FsQuery(_aTotal[097],1,"D2_DOC='" + SF2->F2_DOC + "' AND D2_SERIE='" + SF2->F2_SERIE + "' AND D2_CLIENTE='" + SF2->F2_CLIENTE + "' AND D2_LOJA='" + SF2->F2_LOJA + "'","SD2->D2_DOC=SF2->F2_DOC .AND. SD2->D2_SERIE=SF2->F2_SERIE .AND. SD2->D2_CLIENTE=SF2->F2_CLIENTE .AND. SD2->D2_LOJA=SF2->F2_LOJA","D2_ITEM") .And. .T.

(PRE) fImptosD(SF2->F2_DOC,SF2->F2_SERIE,SF2->F2_CLIENTE,SF2->F2_LOJA,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),"SD2", SF2->F2_GLOBAL == "1",@(_aTotal[036]),_aTotal[104],@_aTotal[037], @_aTotal[038], ,@_aTotal[115]

[SD2 CADENAORIGINAL_SELLO]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
//////////////////////////////////////////////CADENA ORIGINAL//////////////////////////////////////////////
(PRE) cCadOrig   := _aTotal[099]
(PRE) lCCCE      := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.)  .And. !Empty(SF2->F2_TIPOPE)  .And. _aTotal[114], .T., .F.)
(PRE) cCadOriCCE := ""

//Cadena Original | Complemento de Comercio Exterior (Mercancias)
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_ITEM + SD2->D2_COD), (cCadOriCCE += Alltrim(SD2->D2_ITEM + SD2->D2_COD) + _aTotal[098],.T.),("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), (cCadOriCCE += Alltrim(SD2->D2_FRACCA) + Alltrim(SD2->D2_NICO) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_CANADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_CANADU)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), (cCadOriCCE += AllTrim(ObtColSAT("S014",AllTrim(SD2->D2_FRACCA),1,8,9,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_VALADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_VALADU,14,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_USDADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_USDADU,14,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. SA1->A1_CONTRBE=="1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", (cCadOriCCE += '1.0' +_aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. SA1->A1_CONTRBE=="1" .And. SF2->F2_CONUNI=="1", (cCadOriCCE += 'IMMEX:' + ALLTRIM(SA1->A1_PFISICA) + ' ' + _aTotal[101] + _aTotal[098],.T.), IIf (lCCCE .And. SA1->A1_CONTRBE=="1" .And. SF2->F2_CONUNI=="2", (cCadOriCCE += 'IMMEX:' + ALLTRIM(SA1->A1_PFISICA) + ' ' + _aTotal[102] + _aTotal[098],.T.), ("",,.T.)))

///////////DATOS DE LA FACTURA/////////////////
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
//Version
(PRE) cCadOrig += "4.0" + _aTotal[098]
//Serie
(PRE) cCadOrig += Alltrim(SF2->F2_SERIE) + _aTotal[098]
//Folio
(PRE) cCadOrig += Alltrim(SF2->F2_DOC) + _aTotal[098]
//Fecha
(PRE) cCadOrig += Alltrim(_aTotal[096]) + _aTotal[098]
//FormaPago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", IIf(SF2->F2_GLOBAL == '1',IIf(!Empty(_aTotal[112]),_aTotal[112],_aTotal[107]),IIf(Empty(_aTotal[107]).Or. Alltrim(SE4->E4_MPAGSAT) == "PPD","99",_aTotal[107])) + _aTotal[098] )
//NoCertificado
(PRE) cCadOrig += Alltrim(SF2->F2_CERTFOL) + _aTotal[098]
//CondicionesDePago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", CFDCarEsp(Alltrim(SE4->E4_DESCRI)) + _aTotal[098] ) 
//Subtotal
(PRE) cCadOrig += Alltrim(STR(IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, (SF2->(F2_VALMERC+F2_FRETE+F2_SEGURO+F2_DESPESA) + _aTotal[103] + SF2->F2_DESCONT) - _aTotal[036] - _aTotal[037]),14,_aTotal[106])) + _aTotal[098]
//Descuento
(PRE) cCadOrig += IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", "", IIf( SF2->F2_DESCONT == 0, "", Alltrim(STR(SF2->F2_DESCONT,14,2)) + _aTotal[098]) )
//Moneda
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21","XXX",Alltrim(CTO->CTO_MOESAT)) + _aTotal[098]
//TipoCambio
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21","",IIf(Alltrim(CTO->CTO_MOESAT) <> "MXN", Alltrim(STR(SF2->F2_TXMOEDA,14,2)), "1") + _aTotal[098])
//Total
(PRE) cCadOrig += Alltrim(Str(IIf(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, iif(GetSx3Cache("F2_VALBRUT","X3_DECIMAL")<= 2,SF2->F2_VALBRUT + _aTotal[103]- _aTotal[037] - IIf(Len(_aTotal[115]) > 0,_aTotal[115][1],0),Round(SF2->F2_VALBRUT,2) + _aTotal[103] - _aTotal[037] - IIf(Len(_aTotal[115]) > 0,_aTotal[115][1],0))),14,_aTotal[106])) + _aTotal[098]
//TipoDeComprobante
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_ESPECIE) == "NF",IIf(ALLTRIM(SF2->F2_TIPODOC) == "21", "T", "I" ), "E") + _aTotal[098]
//Exportacion
(PRE) cCadOrig += IIf(!Empty(_aTotal[113]),_aTotal[113],"01") + _aTotal[098]
//MetodoPago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", Alltrim(SE4->E4_MPAGSAT) + _aTotal[098] )
//LugarExpedicion
(PRE) cCadOrig += CFDCarEsp(AllTrim(SM0->M0_CEPENT)) + _aTotal[098]
//Periodicidad
(PRE) cCadOrig += IIf(SF2->(ColumnPos("F2_IDCBAJA")) > 0 .And. SF2->F2_GLOBAL == "1", SF2->F2_IDCBAJA + _aTotal[098],"")
//Meses
(PRE) cCadOrig += IIf(SF2->(ColumnPos("F2_MODCONS")) > 0 .And. SF2->F2_GLOBAL == "1", SF2->F2_MODCONS + _aTotal[098],"")
//Año
(PRE) cCadOrig += IIf(SF2->(ColumnPos("F2_PTOEMIS")) > 0 .And. SF2->F2_GLOBAL == "1", SF2->F2_PTOEMIS + _aTotal[098],"")

//////////////////////CFDI Relacionados//////////////////////////
(PREREG)!Empty(SF2->F2_RELSAT).Or. !Empty(SF2->F2_SERMAN).Or. !Empty(SF2->F2_DOCMAN)
(PRE) IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","",fGetFolRel("S",.T.))

///////////DATOS DEL EMISOR///////////////////////
//Rfc
(PRE) cCadOrig += CFDCarEsp(AllTrim(SM0->M0_CGC),.F.) + _aTotal[098]
//Nombre
(PRE) cCadOrig += CFDCarEsp(_aTotal[075],.F.) + _aTotal[098]
//RegimenFiscal
(PRE) cCadOrig += CFDCarEsp(Alltrim(SM0->M0_DSCCNA)) + _aTotal[098]

//////////////////////DATOS DEL RECEPTOR//////////////////////////
(PRE) AllTrim(SF2->F2_ESPECIE) <> "NDI"
(PRE) SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA))
(PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
//Rfc
(PRE) (cCadOrig += IIf(!_aTotal[104] .And. ((ALLTRIM(SF2->F2_TIPODOC) == "21" .And. !lCCCE) .Or. SF2->F2_GLOBAL == "1"), "XAXX010101000", CFDCarEsp(_aTotal[108], .F.)) + _aTotal[098])
//Nombre
(PRE) (cCadOrig += IIF(SF2->F2_GLOBAL == "1", "PUBLICO EN GENERAL",CFDCarEsp(_aTotal[109],.F.)) + _aTotal[098], .T.)
//DomicilioFiscalReceptor
(PRE) (cCadOrig += CFDCarEsp(_aTotal[110],.F.) + _aTotal[098], .T.)
//ResidenciaFiscal
(PRE) IIf(lCCCE .And. !Empty(CFDCarEsp(Alltrim(SF2->F2_RESIDE))) .And. !_aTotal[076], cCadOrig += AllTrim(Posicione("SYA",1,xFilial("SYA")+SF2->F2_RESIDE,"YA_CCESAT")) + _aTotal[098], "")
//NumRegIdTrib
(PRE) IIf(lCCCE .And. !Empty(CFDCarEsp(Alltrim(SF2->F2_IDTRIB))) .And. !_aTotal[076], cCadOrig += CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB))) + _aTotal[098], "")
//RegimenFiscalReceptor
(PRE) (cCadOrig += IIf(AI0->(ColumnPos("AI0_REGFIS")) > 0,CFDCarEsp(_aTotal[111],.F.) + _aTotal[098],""), .T.)
//UsoCFDI
(PRE) (cCadOrig += Alltrim(SF2->F2_USOCFDI) + _aTotal[098], .T.)

(PRE) (cCadOrig += fXMLFUN("CO",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),.T.)
(PRE) (cCadOrig += fXMLFUN("TI",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)
(PRE) (cCadOrig += fXMLFUN("IL",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.) Se debe mover después de la generación de la Cadena Original del Complemento de Carta Porte

(POS) IIf(lCCCE, cCadOrig += "1.1" + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_TRASLA), cCadOrig += Alltrim(SF2->F2_TRASLA) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_TIPOPE), cCadOrig += IIf(Alltrim(SF2->F2_TIPOPE)=="3","2",Alltrim(SF2->F2_TIPOPE)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_CVEPED), cCadOrig += Alltrim(SF2->F2_CVEPED) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_CERORI), cCadOrig += Alltrim(SF2->F2_CERORI) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_NUMCER), cCadOrig += Alltrim(SF2->F2_NUMCER) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_EXPCONF), cCadOrig += Alltrim(SF2->F2_EXPCONF) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_INCOTER), cCadOrig += Alltrim(SF2->F2_INCOTER) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_SUBDIV), cCadOrig += Alltrim(SF2->F2_SUBDIV) + _aTotal[098], "")
(POS) IIf(lCCCE .And. SF2->(ColumnPos("F2_OBSCE")) > 0 .And. !Empty(SF2->F2_OBSCE), cCadOrig += CFDCarEsp(AllTrim(SF2->F2_OBSCE), .F.) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(Str(SF2->F2_TCUSD)), cCadOrig += Alltrim(Str(SF2->F2_TCUSD)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(Str(SF2->F2_TOTUSD)), cCadOrig += Alltrim(Str(SF2->F2_TOTUSD,14,2)) + _aTotal[098], "")

//Emisor
(POS) IIf(lCCCE , cCadOrig += CFDCarEsp(AllTrim(SM0->M0_ENDCOB)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SM0->M0_CEPENT), cCadOrig += CFDCarEsp(AllTrim(ObtColSAT("S015",AllTrim(SM0->M0_CODZOSE)+ALLTRIM(SM0->M0_CEPENT),1,9,1,4))) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SM0->M0_CODMUN), cCadOrig += AllTrim(SM0->M0_CODMUN) + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += CFDCarEsp(Alltrim(ObtColSAT("S004",AllTrim(SM0->M0_CEPENT),1,5,6,3))) + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += "MEX" + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += AllTrim(SM0->M0_CEPENT) + _aTotal[098], "")

//Receptor Domicilio
(POS) IIf(lCCCE .And. _aTotal[108] == "XEXX010101000", cCadOrig += CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB))) + _aTotal[098], "")
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(AllTrim(SA1->A1_END)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NR_END)), cCadOrig += AllTrim(SA1->A1_NR_END) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NROINT)), cCadOrig += AllTrim(SA1->A1_NROINT) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))), cCadOrig +=  CFDCarEsp(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))) + _aTotal[098],"")
(POS) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_MUN))), cCadOrig +=  CFDCarEsp(AllTrim(SA1->A1_MUN),.F.) + _aTotal[098],"")
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI"))) + _aTotal[098],"")
(POS) IIf(lCCCE, cCadOrig += AllTrim(Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCESAT")) + _aTotal[098], "")
(POS) IIf(lCCCE, cCadOrig += AllTrim(SA1->A1_CEP) + _aTotal[098], "")

(POS) cCadOrig += IIf(!Empty(cCadOriCCE), cCadOriCCE, "")

//Carta Porte
(POS) IIf(_aTotal[011],(cCadOrig += LxFunaCaPo(SF2->F2_FILIAL,SF2->F2_DOC,SF2->F2_SERIE,.T.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),.T.),"")

(POS) (cCadOrig += fXMLFUN("IL",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)

(POS) cCadOrig += _aTotal[098]
(POS) _aTotal[033] := cCadOrig

//SELLO
(POS) _aTotal[100] := EVPDigest(cCadOrig,5)
(POS) _aTotal[100] := PrivSignRSA(&(SuperGetMv("MV_CFDDIRS",,""))+SuperGetMv("MV_CFDARQS",,""),_aTotal[100],6,"assinatura")
(POS) _aTotal[100] := ENCODE64(_aTotal[100])
[XXX CABECERA]
Linha1     C 041 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8"?>'
[XXX FACTURA]
//Certificado del SAT incluido para pruebas 
(PRE) cCert := "MIIF5TCCA82gAwIBAgIUMDAwMDEwMDAwMDA1MDI2MzYxOTcwDQYJKoZIhvcNAQEL"
(PRE) cCert += "BQAwggGEMSAwHgYDVQQDDBdBVVRPUklEQUQgQ0VSVElGSUNBRE9SQTEuMCwGA1UE"
(PRE) cCert += "CgwlU0VSVklDSU8gREUgQURNSU5JU1RSQUNJT04gVFJJQlVUQVJJQTEaMBgGA1UE"
(PRE) cCert += "CwwRU0FULUlFUyBBdXRob3JpdHkxKjAoBgkqhkiG9w0BCQEWG2NvbnRhY3RvLnRl"
(PRE) cCert += "Y25pY29Ac2F0LmdvYi5teDEmMCQGA1UECQwdQVYuIEhJREFMR08gNzcsIENPTC4g"
(PRE) cCert += "R1VFUlJFUk8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQ"
(PRE) cCert += "Q0lVREFEIERFIE1FWElDTzETMBEGA1UEBwwKQ1VBVUhURU1PQzEVMBMGA1UELRMM"
(PRE) cCert += "U0FUOTcwNzAxTk4zMVwwWgYJKoZIhvcNAQkCE01yZXNwb25zYWJsZTogQURNSU5J"
(PRE) cCert += "U1RSQUNJT04gQ0VOVFJBTCBERSBTRVJWSUNJT1MgVFJJQlVUQVJJT1MgQUwgQ09O"
(PRE) cCert += "VFJJQlVZRU5URTAeFw0yMDAxMDYyMjIwMzhaFw0yNDAxMDYyMjIwMzhaMIGzMR4w"
(PRE) cCert += "HAYDVQQDExVUT1RWUyBNRVhJQ08gU0EgREUgQ1YxHjAcBgNVBCkTFVRPVFZTIE1F"
(PRE) cCert += "WElDTyBTQSBERSBDVjEeMBwGA1UEChMVVE9UVlMgTUVYSUNPIFNBIERFIENWMSUw"
(PRE) cCert += "IwYDVQQtExxUTUUwMzExMTJCQzAgLyBIRVJNNjcwODI4MkU0MR4wHAYDVQQFExUg"
(PRE) cCert += "LyBIRVJNNjcwODI4SERGUkJOMDMxCjAIBgNVBAsTATEwggEiMA0GCSqGSIb3DQEB"
(PRE) cCert += "AQUAA4IBDwAwggEKAoIBAQDSxcVwA52Ec5xakhUEyuaeozyzccDhukYJuXYDuLxH"
(PRE) cCert += "lDtiTdCE5Bof3c1wVN+EAvTvOBCvXcCOeLgo6EJlc6hArdFIKaiH+Ylf2xmq3u89"
(PRE) cCert += "X1JgwwbrqyTJoC6bw1fbyeDAGVsV7yGRs8YsZ65AU2RKK6L5GiyQKampRpaTiBoU"
(PRE) cCert += "pp5NR+B41+lc46rFI2wQrXGzry+vIkCnyJSH7w0XUgrDChyk8ORLdmQicUY0xkcy"
(PRE) cCert += "b3ql5Uvkd3AF+7RMck8gow8dby10rctjoCN4KY/wyWu5j7PHguH9rgbuOpo14hON"
(PRE) cCert += "Hx7720Eo1KA6GK3jPqVdpG7wfm6EVE0Kf9K7F471wZoRAgMBAAGjHTAbMAwGA1Ud"
(PRE) cCert += "EwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBCwUAA4ICAQBa+6i9/Qto"
(PRE) cCert += "ouwZNQIOZALwkAzEJfEasxQkm+Ggu2xhNJc75A1/qMxaKi84YCFDMr1eWwjQEs9H"
(PRE) cCert += "nfdwZKjkF/55vgQoTMEZBlemG5IJPwMDy01ho4FAShYG780sdPpa9RMYzjE1o82O"
(PRE) cCert += "226yv5ksy1yBySoGY7NWyRj1f5zCXQfyE8fAwAkaNiMmZYljztWg0cPvEG+gOgFl"
(PRE) cCert += "aLhy9YFMkFp3wEZjn/vZP5tbMvXCm3wRbf5ncJUCbr0xkpkDMIvgV/obTAfllvB0"
(PRE) cCert += "mQuVjLsTTA43NkvmpaV9+yYhvvzD24TOnZE8goB6C1bu8MooyMnVg6+RthZxLmzb"
(PRE) cCert += "syw+FkMzpjfMJU/J5nZL9VAZgdDX4H3wtmupAfKmL1hm95D9s0VA7sSFeAJkPvWG"
(PRE) cCert += "8ZcjlridsAFbSIFcfc8S8+NqBMKNFJsRF4X2Yj2Wxq3ZrNe9lPeq5skot9iJ9bz/"
(PRE) cCert += "1sfVTTqmqw1S3w13aCIqkwzU2aFpC7aMHT13Fx2SK5djvlnR0aHNycGxjA46iq+b"
(PRE) cCert += "vdHtC2Tqf/ZHJB/jeogiUeISbJ+uUHNEbXaE3YLsuhEsbNi7E++MRS/CtUeOxXZx"
(PRE) cCert += "FgnV6luIS1kzu+7aj4WR+m3Gweo6pOuz2s1MhtASDIucGWMyJm30DiWSZkrKmyTr"
(PRE) cCert += "OG6983CcMAhLkT16E0a32/Fn9OgZfiSMsg=="

(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE) .And. _aTotal[114], .T., .F.)
(PRE) cNodoCCE := ""

(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) _aTotal[001] := '<cfdi:Comprobante'
(PRE) _aTotal[001] += ' xmlns:cfdi="http://www.sat.gob.mx/cfd/4"'
(PRE) _aTotal[001] += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
(PRE) _aTotal[001] += Iif(_aTotal[104],' xmlns:cartaporte30="http://www.sat.gob.mx/CartaPorte30"','')
(PRE) _aTotal[001] += ' xmlns:implocal="http://www.sat.gob.mx/implocal"'
(PRE) _aTotal[001] += IIf(lCCCE .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", ' xmlns:leyendasFisc="http://www.sat.gob.mx/leyendasFiscales"' , "")
(PRE) _aTotal[001] += ' xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd '
(PRE) _aTotal[001] += IIF(lCCCE,'http://www.sat.gob.mx/ComercioExterior11 http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior11/ComercioExterior11.xsd ','http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd')
(PRE) _aTotal[001] += IIf(_aTotal[104],'http://www.sat.gob.mx/CartaPorte30 http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte30.xsd','')
(PRE) _aTotal[001] += IIf(lCCCE .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", ' http://www.sat.gob.mx/leyendasFiscales http://www.sat.gob.mx/sitio_internet/cfd/leyendasFiscales/leyendasFisc.xsd"' , '"')
(PRE) _aTotal[001] += IIf(lCCCE, ' xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11"' , "")
(PRE) _aTotal[001] += ' Version="4.0"'
(PRE) _aTotal[001] += ' Serie="' + Alltrim(SF2->F2_SERIE) + '"'
(PRE) _aTotal[001] += ' Folio="' + Alltrim(SF2->F2_DOC) + '"'
(PRE) _aTotal[001] += ' Fecha="' + Alltrim(_aTotal[096]) + '"'
(PRE) _aTotal[001] += ' Sello="' + Alltrim(_aTotal[100]) + '"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' FormaPago="' +  IIf(SF2->F2_GLOBAL == '1',IIf(!Empty(_aTotal[112]),_aTotal[112],_aTotal[107]),IIf(Empty(_aTotal[107]) .Or. Alltrim(SE4->E4_MPAGSAT) == "PPD","99",_aTotal[107])) + '"' )
(PRE) _aTotal[001] += ' NoCertificado="' + Alltrim(SF2->F2_CERTFOL) + '"'
(PRE) _aTotal[001] += ' Certificado="' + cCert + '"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' CondicionesDePago="' +  CFDCarEsp(Alltrim(SE4->E4_DESCRI)) + '"' ) 
(PRE) _aTotal[001] += ' SubTotal="' + Alltrim(STR(IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, (SF2->(F2_VALMERC+F2_FRETE+F2_SEGURO+F2_DESPESA)  + _aTotal[103] + SF2->F2_DESCONT) - _aTotal[036] - _aTotal[037] ),14,_aTotal[106])) + '"'
(PRE) _aTotal[001] += IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", "", IIf( SF2->F2_DESCONT == 0, "", ' Descuento="' + Alltrim(STR(SF2->F2_DESCONT,14,2)) + '"' ))
(PRE) _aTotal[001] += ' Moneda="' + IIf(Alltrim(SF2->F2_TIPODOC) == "21","XXX",Alltrim(CTO->CTO_MOESAT)) + '"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' TipoCambio="' + IIf(Alltrim(CTO->CTO_MOESAT) <> "MXN", Alltrim(STR(SF2->F2_TXMOEDA,14,2)), "1") + '"') 
(PRE) _aTotal[001] += ' Total="' + Alltrim(Str(IIf(Alltrim(SF2->F2_TIPODOC) == "21", 0, IIf(GetSx3Cache("F2_VALBRUT","X3_DECIMAL") <= 2,SF2->F2_VALBRUT + _aTotal[103] - _aTotal[037] - _aTotal[038] - IIf(Len(_aTotal[115]) > 0,_aTotal[115][1],0),Round(SF2->F2_VALBRUT,2) + _aTotal[103] - _aTotal[037] - _aTotal[038] - IIf(Len(_aTotal[115]) > 0,_aTotal[115][1],0))),14,_aTotal[106])) +  '"'
(PRE) _aTotal[001] += ' TipoDeComprobante="' + IIf(Alltrim(SF2->F2_ESPECIE) == "NF",IIf(Alltrim(SF2->F2_TIPODOC) == "21", "T", "I"), "E") + '"'
(PRE) _aTotal[001] += ' Exportacion="'+IIf(!Empty(_aTotal[113]),_aTotal[113],"01")+'"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' MetodoPago="' +  Alltrim(SE4->E4_MPAGSAT) + '"' )
(PRE) _aTotal[001] += ' LugarExpedicion="' + CFDCarEsp(AllTrim(SM0->M0_CEPENT)) + '"'
(PRE) _aTotal[001] += '>'
(PREREG) _aTotal[001]

(POS) cNodoCCE := IIf(lCCCE, '        <cce11:ComercioExterior' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Version="1.1"' , "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_TRASLA), ' MotivoTraslado="' + Alltrim(SF2->F2_TRASLA) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_TIPOPE), ' TipoOperacion="' + IIF(Alltrim(SF2->F2_TIPOPE)== "3","2",Alltrim(SF2->F2_TIPOPE)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_CVEPED), ' ClaveDePedimento="' + Alltrim(SF2->F2_CVEPED) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_CERORI), ' CertificadoOrigen="' + Alltrim(SF2->F2_CERORI) +'"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_NUMCER), ' NumCertificadoOrigen="' + Alltrim(SF2->F2_NUMCER) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_EXPCONF), ' NumeroExportadorConfiable="' + Alltrim(SF2->F2_EXPCONF) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_INCOTER), ' Incoterm="' + Alltrim(SF2->F2_INCOTER) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_SUBDIV), ' Subdivision="' + Alltrim(SF2->F2_SUBDIV) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. SF2->(ColumnPos("F2_OBSCE")) > 0 .And. !Empty(SF2->F2_OBSCE), ' Observaciones="' + CFDCarEsp(AllTrim(SF2->F2_OBSCE), .T.) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(Str(SF2->F2_TCUSD)), ' TipoCambioUSD="' + Alltrim(Str(SF2->F2_TCUSD)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(Str(SF2->F2_TOTUSD)), ' TotalUSD="' + Alltrim(Str(SF2->F2_TOTUSD,14,2)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")
(POS) _aTotal[094] := cNodoCCE

[XXX CFDIREL]
(PREREG) !Empty(SF2->F2_RELSAT).Or. !Empty(SF2->F2_SERMAN).Or. !Empty(SF2->F2_DOCMAN)
(PREREG) (_aTotal[001] := IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","",fGetFolRel("S")))
(PREREG) _aTotal[001]

[XXX FACTURA GLOBAL]
(PRE) (_aTotal[001] := IIF(SF2->F2_GLOBAL == "1",'    <cfdi:InformacionGlobal ',""))
(PRE) (_aTotal[001] += Iif(SF2->(ColumnPos("F2_IDCBAJA")) > 0 .and. SF2->F2_GLOBAL == "1" ,' Periodicidad="' + SF2->F2_IDCBAJA  + '"',""))
(PRE) (_aTotal[001] += Iif(SF2->(ColumnPos("F2_MODCONS")) > 0 .and. SF2->F2_GLOBAL == "1" ,' Meses="' + SF2->F2_MODCONS  + '"',""))
(PRE) (_aTotal[001] += Iif(SF2->(ColumnPos("F2_PTOEMIS")) > 0 .and. SF2->F2_GLOBAL == "1" ,' Año="' + SF2->F2_PTOEMIS  + '"',""))
(PRE) (_aTotal[001] += IIF(SF2->F2_GLOBAL == "1",'/>' ,""))
(PRE) (_aTotal[001] := IIF(SF2->F2_GLOBAL == "1",_aTotal[001] ,""))
(PREREG) _aTotal[001]

[XXX EMISOR]
(PRE) (_aTotal[001] := '    <cfdi:Emisor'  , .T.)
(PRE) (_aTotal[001] += ' Rfc="' + CFDCarEsp(AllTrim(SM0->M0_CGC))+ '"'  , .T.)
(PRE) (_aTotal[001] += ' Nombre="' + CFDCarEsp(_aTotal[075],.T.) + '"'  , .T.)
(PRE) (_aTotal[001] += ' RegimenFiscal="' + CFDCarEsp(Alltrim(SM0->M0_DSCCNA)) + '"'  , .T.)
(PRE) (_aTotal[001] += '/>'  , .T.)
(PRE) (_aTotal[001] := _aTotal[001]  , .T.)
(PREREG) _aTotal[001]

[XXX RECEPTOR_CLIENTE]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.)  .And. !Empty(SF2->F2_TIPOPE) .And. _aTotal[114], .T., .F.)
(PRE) cNodoCCE := ""

(PREREG) AllTrim(SF2->F2_ESPECIE) <> "NDI"
(PREREG) (SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PREREG) (SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PREREG) (_aTotal[001] := '    <cfdi:Receptor' , .T.)
(PREREG) (_aTotal[001] += ' Rfc="' + CFDCarEsp(IIf(!_aTotal[104] .And.((Alltrim(SF2->F2_TIPODOC) == "21" .And. !lCCCE) .Or. SF2->F2_GLOBAL == "1"), "XAXX010101000", _aTotal[108])) + '"' , .T.)
(PREREG) (_aTotal[001] += ' Nombre="' + iif(SF2->F2_GLOBAL == "1","PUBLICO EN GENERAL",CFDCarEsp(_aTotal[109],.T.)) + '"' , .T.)
(PREREG) (_aTotal[001] += ' DomicilioFiscalReceptor="' + _aTotal[110] + '"' , .T.)
(PREREG) (_aTotal[001] += Iif(AI0->(ColumnPos("AI0_REGFIS")) > 0,' RegimenFiscalReceptor="' + _aTotal[111] + '"',""), .T.)
(PREREG) (_aTotal[001] += ' UsoCFDI="' + Alltrim(SF2->F2_USOCFDI) + '"' , .T.)
(PREREG) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB)))) .And. !_aTotal[076], (_aTotal[001] += ' NumRegIdTrib="' + CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB))) + '"' , .T.), "") 
(PREREG) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(AllTrim(SF2->F2_RESIDE)))) .And. !_aTotal[076], (_aTotal[001] += ' ResidenciaFiscal="' + AllTrim(Posicione("SYA",1,xFilial("SYA")+SF2->F2_RESIDE,"YA_CCESAT")) + '"' , .T.), "")
(PREREG) (_aTotal[001] += '/>' ,.T.)
(PREREG) (_aTotal[001] := _aTotal[001] , .T.)
(PREREG) _aTotal[001]

(POS) cNodoCCE += IIf(lCCCE, '            <cce11:Emisor' , "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "") 
(POS) cNodoCCE += IIf(lCCCE, '                <cce11:Domicilio' , "")        
(POS) cNodoCCE += IIf(lCCCE, ' Calle="' + CFDCarEsp(AllTrim(SM0->M0_ENDCOB)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(CFDCarEsp(AllTrim(SM0->M0_CEPENT)))), ' Colonia="' + CFDCarEsp(AllTrim(ObtColSAT("S015",AllTrim(SM0->M0_CODZOSE)+ALLTRIM(SM0->M0_CEPENT),1,9,1,4))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SM0->M0_CEPENT))), ' Municipio="' + CFDCarEsp(AllTrim(SM0->M0_CODMUN)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Estado="' + CFDCarEsp(Alltrim(ObtColSAT("S004",AllTrim(SM0->M0_CEPENT),1,5,6,3))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Pais="' + AllTrim("MEX") + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' CodigoPostal="' + AllTrim(SM0->M0_CEPENT) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '/>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, '            </cce11:Emisor>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, '            <cce11:Receptor ' + IIf(_aTotal[108]=="XEXX010101000", 'NumRegIdTrib="' + CFDCarEsp(AllTrim(SF2->F2_IDTRIB)) + '"',""), "")     
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "") 
(POS) cNodoCCE += IIf(lCCCE, '                <cce11:Domicilio' , "")        
(POS) cNodoCCE += IIf(lCCCE, ' Calle="' + CFDCarEsp(AllTrim(SA1->A1_END)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NR_END)), ' NumeroExterior="' + AllTrim(SA1->A1_NR_END) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NROINT)), ' NumeroInterior="' + AllTrim(SA1->A1_NROINT) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))), ' Colonia="' + CFDCarEsp(AllTrim(SA1->A1_BAIRRO)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_MUN)), ' Municipio="' + CFDCarEsp(AllTrim(SA1->A1_MUN),.T.) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Estado="' + CFDCarEsp(Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI"))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Pais="' + AllTrim(Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCESAT")) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' CodigoPostal="' + AllTrim(SA1->A1_CEP) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '/>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, '            </cce11:Receptor>' + ( chr(13)+chr(10) ), "") 

(POS) (cNodoCCE += IIf(lCCCE, '            <cce11:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) _aTotal[094] += cNodoCCE

[SD2 CONCEPTO]
(PRE) lCCCE    := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.)  .And. !Empty(SF2->F2_TIPOPE) .And. _aTotal[114] , .T., .F.)
(PRE) cNodoCCE := ""

(PRE) DbGoTop()

(PREREG) (cNodoCCE += IIf(lCCCE, '                  <cce11:Mercancia' , ""),.T.)      
(PREREG) (cNodoCCE += IIf(lCCCE , ' NoIdentificacion="' + Alltrim(SD2->D2_ITEM + SD2->D2_COD) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), ' FraccionArancelaria="' + Alltrim(SD2->D2_FRACCA) + Alltrim(SD2->D2_NICO) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD2->D2_CANADU)), ' CantidadAduana="' + Alltrim(Str(SD2->D2_CANADU)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), ' UnidadAduana="' + AllTrim(ObtColSAT("S014",AllTrim(SD2->D2_FRACCA),1,8,9,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD2->D2_VALADU)), ' ValorUnitarioAduana="' + Alltrim(Str(SD2->D2_VALADU,14,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, ' ValorDolares="' + Alltrim(Str(SD2->D2_USDADU,14,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ) , ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, '                  </cce11:Mercancia>' + ( chr(13)+chr(10) ), ""),.T.)

(POS) (cNodoCCE += IIf(lCCCE, '            </cce11:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) (cNodoCCE += IIf(lCCCE, '        </cce11:ComercioExterior>' , ""),.T.)
(POS) _aTotal[094] += cNodoCCE

(POS) (_aTotal[034] := fXMLFUN("CO",.F., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),.T.)
 
[XXX CONCEPTOS]
(POS) FsQuery(_aTotal[097],2)

(PREREG) (_aTotal[001] := _aTotal[034] ,.T.)
(PREREG) _aTotal[001]

[XXX IMPUESTOS]
(PREREG) (_aTotal[002] := fXMLFUN("TI",.F.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)
(PREREG) _aTotal[002]

//IMPUESTOS LOCALES//
(PRE) (_aTotal[095] := fXMLFUN("IL",.F.),.T.)

[XXX COMPLEMENT]
(PREREG) IIf(_aTotal[011],_aTotal[105] := LxFunaCaPo(SF2->F2_FILIAL,SF2->F2_DOC,SF2->F2_SERIE,.F.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),"")
(PREREG) (_aTotal[001] := IIF(!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095] ) .Or. !Empty(_aTotal[105]) .or. _aTotal[104] , '    <cfdi:Complemento', ""), .T.)
(PREREG) (_aTotal[001] += IIF(!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095] ) .Or. !Empty(_aTotal[105]),'>',""),.T.)
(PREREG) _aTotal[001]
COMPLEMENT  C 021 0 ENCODEUTF8(XMLConv("",,,"cfdi:Complemento",.T.,.F.,4))


[XXX COMERCIOEX]
(PREREG) (_aTotal[001] := _aTotal[094],.T.)
(PREREG) _aTotal[001]

[XXX CARTAPORTE]
(PREREG) (_aTotal[001] := _aTotal[105],.T.)
(PREREG) _aTotal[001]

[XXX IMPUESTOLOC]
(PREREG) (_aTotal[001] := _aTotal[095],.T.)
(PREREG) _aTotal[001]

[XXX LEYENDASFIS]
(PREREG) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.)  .And. !Empty(SF2->F2_TIPOPE) .And. _aTotal[114], .T., .F.) .And. SF2->(FieldPos("F2_CONUNI")) > 0
(PREREG) lCCCE
(PREREG) (_aTotal[001] := IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF" , '        <leyendasFisc:LeyendasFiscales version="1.0" >'+ ( chr(13)+chr(10) ), ""), .T.)
(PREREG) (_aTotal[001] += IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF" , '            <leyendasFisc:Leyenda textoLeyenda=', ""), .T.)
(PREREG) (_aTotal[001] += IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. SF2->F2_CONUNI=="1" .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", '"IMMEX:'+ AllTrim(SA1->A1_PFISICA) +' ' + _aTotal[101] +'" />', IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. SF2->F2_CONUNI=="2" .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF",'"IMMEX:'+ AllTrim(SA1->A1_PFISICA) + ' ' + _aTotal[102] +'" />',"")), .T.)
(PREREG) _aTotal[001]
(PREREG) (_aTotal[001] := IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF",'        </leyendasFisc:LeyendasFiscales>', ""), .T.)
(PREREG) _aTotal[001]


[XXX COMPLEMENT]
(PREREG) (_aTotal[001] := IIF(!EMPTY(_aTotal[094]) .or. !EMPTY(_aTotal[095]) .or. !EMPTY(_aTotal[105]),'    </cfdi:Complemento>',""), .T.)
(PREREG) _aTotal[001]
COMPLEMENT  C 021 0 ENCODEUTF8(XMLConv("",,,"cfdi:Complemento",.F.,.T.,4))

//[XXX CAD_ORIG]
//(PREREG) _aTotal[033] 

[XXX FACTURA]
(PRE) _aTotal[095] := &(GetNewPar("MV_CFDNAF2","Lower(AllTrim(SF2->F2_ESPECIE)) + '_' + Lower(AllTrim(SF2->F2_SERIE)) + '_'  + Lower(AllTrim(SF2->F2_DOC)) + '.xml'"))
(ARQ) _aTotal[095]
FACTURA    C 019 0 ENCODEUTF8(XMLConv("",,,"cfdi:Comprobante",.F.,.T.,0))


Catálogo de Objeto Impuesto:



Actualizaciones en la tabla SXB-Consultas Estándar.

Creación de la consulta específica MEX015 - Colonias.

Alias

Tipo

Secuencia

Columna

Descripción

Contenido

MEX031101REObjeto ImpuestoF3I
MEX03120101
F812SXB("S031","Codigo")
MEX031501

VAR_IXB


Activar el siguiente campo en la tabla SD2 - Ítems de Venta de la Fact:

CampoContenido
CampoD2_NIT
Tipo1 - Caracter
Tamaño2
Decimal0
Formato!@
ContextoReal
PropiedadModificar
Tit. EspañolObjeto Imp
Des. EspañolObjeto Impuesto
ValidaciónVazio() .or. ValidF3I("S031", M->D2_NIT,1,2)
UsadoSi
HelpIndica si el Concepto del CFDI es Objeto de Impuesto, y el valor debe corresponder a un valor del catálogo c_ObjetoImp definido por el SAT. (Tabla S031 - Catálogo Objeto Impuesto), si el código es 01, 03 o 04 no se generará el nodo de Impuestos del Concepto.


06. OTRAS DOCUMENTACIONES

07. TABLAS UTILIZADAS

  • SF2 - Encabezado de facturas de salida
  • SD2 - Ítems de facturas de salida
  • SB1 - Productos
  • A1X - Encabezado de carta porte
  • A1Y - Ubicaciones de carta porte
  • A1Z - Operadores de carta porte
  • AE0 - Propietarios/Arrendatarios (Transportistas) de carta porte
  • DA3 - Conductores
  • DA4 - Transportadoras
  • F3H - Estructuras de catálogos del SAT
  • F3I - Catálogos del SAT