Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.


ÍNDICE

Í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.

...

Instructivo de llenado del CFDI con Complemento Carta Porte

Fundamento Legal

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

...

Aviso
titleImportante
  • 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
  • El complemento Carta Porte versión 3.1, se publicó en el Portal del SAT el 17 de junio de 2024.
  • El complemento Carta Porte versión 3.1, se debe estar utilizando a partir del 17 de julio de 2024.
  • Para desactivar la funcionalidad del Complemento de Carta Porte versión 3.1 se debe crear el parámetro MV_ACTCOCP de tipo lógico y configurarlo con el valor .F., con lo cual se revierten lo ajustes realizados para versión 3.1 y se generan de acuerdo a la versión 3.0.
  • Para la generación del XML si se utiliza el archivo FATSMEX.INI, se debe hacer de manera manual el ajuste de las url's de la declaración del complemento de carta porte.
  • Para la generación del Nodo cartaporte31:RegimenesAduaneros, actualmente el sistema Protheus sólo permite relacionar un código de Régimen Aduanero, el cual se informa en el campo Rég. Aduana (A1X_REGADU).

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

...

Para tener activa la funcionalidad de Complemento de Carta Porte

...

para versión 3.1, es necesario tener actualizadas con una fecha mayor o igual las siguientes rutinas:

RutinaNombre TécnicoFecha
LOCXFUNAFunciones generales de documentos fiscales05/07/2024
MATR475Informe de Notas Fiscales05/07/2024
FATSMEX.PRWGeneración de XML para Documentos de Salida05/07/2024
FATSMEX.INIEstructura de XML para Documentos de Salida05/07/2024

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


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

La

...

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.

...

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

    Realizar los ajustes que se marcan en color Naranja en el archivo de Estructura de XML para Documentos de Salida (FATSMEX.INI), que corresponde a las url's del Complemento de Carta Porte: 

NOTA: Los ajustes al archivo FATSMEX.INI solo aplican, si no se tiene activa la funcionalidad por medio de la rutina FATSMEX.PRW, cuando el parámetro MV_FEXML no existe o está configurado con un valor diferente de .T.

  1. Informações
    titleFASTMEX.INI

    //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] := Alltrim(SF2->F2_TIPODOC) == "21" .And. ((!(Alltrim(SF2->F2_TIPOPE) $ "3|4")) .Or. SF2->(ColumnPos("F2_TPCOMPL")) > 0 .And. AllTrim(SF2->F2_TPCOMPL)=="S")
    (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(FindFunction("FxDelExp"),FxDelExp(IIf(_aTotal[076],_aTotal[075],Alltrim(SA1->A1_NOME))),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(Alltrim(SF2->F2_TIPOPE)== "4","03",IIf(SF2->F2_CVEPED !="A1" .Or. Alltrim(SF2->F2_TIPOPE)== "3","04","02")))
    (PRE) _aTotal[114] := IIf(_aTotal[113] == "03" .Or.(_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(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.)

    (POS) IIf(lCCCE, cCadOrig += "2.0" + _aTotal[098], "")
    (POS) IIf(lCCCE .And. !Empty(SF2->F2_TRASLA), cCadOrig += Alltrim(SF2->F2_TRASLA) + _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. 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], "")

    //Destinatarios
    (POS) IIf(lCCCE .And. FindFunction("LxCEDest") .And. SF2->(ColumnPos("F2_ACOPLA")) > 0, cCadOrig += LxCEDest(SF2->F2_CLIENTE,SF2->F2_LOJA,SF2->F2_ACOPLA, .T.), "")

    (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 := "MIIFuTCCA6GgAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0NDIwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDA"
    (PRE) cCert +="ZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQ"
    (PRE) cCert +="kBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYS"
    (PRE) cCert +="UNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTI1OTI2WhcNMjcwNTE4MTI1OTI2WjCB4DEqM"
    (PRE) cCert +="CgGA1UEAxMhWEVOT04gSU5EVVNUUklBTCBBUlRJQ0xFUyBTIERFIENWMSowKAYDVQQpEyFYRU5PTiBJTkRVU1RSSUFMIEFSVElDTEVTIFMgREUgQ1YxKjAoBgNVBAoTIVhFTk9OIElORFVTVFJJQUwgQVJUSUNMRVMgUyBERSBDVjElMCMGA1UEL"
    (PRE) cCert +="RMcWElBMTkwMTI4SjYxIC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAga5zxQ4mEBE4LobElO0+UyMDcAYbY0NJbg4x"
    (PRE) cCert +="Nbvwd66CUuTjyK2q11Y6nTzod1I1Nhv75cfZbJzdW/4EO/1bGLEt3zpTnP0yDVh9KL4/WJ0QW5kR4QVpxd84aBkJe7FltC5j+FUiDSCCLpSBlGvwZdFAwZhSZvHeFB1i1pDc3rA/PvqJwn35goEdIfhgfymg+31LuL1stU30pOSYtxltiEoM3QFePVurYhYq"
    (PRE) cCert +="sxNmZMGkRvVNrf/SnZsiaLUonM8CNLfhJIFxBraH3qeZ3iCaeFgL8zO5ux+8D1XAg2RpJLf7gFVC9fWOc9yaHKNsjkt1E2YauH9KpHxRAjt3zKniywIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAR73vD"
    (PRE) cCert +="0WGeWtnZyIFixfsNtvM3068JFvn4LJ0aF0ZZwTJhcff7OrUrpsrCjMzpIOB3Lfq5DLtaIPNeEkSa5W4yi1XJ930kcJ4kubi16jmTIMIZ7w9fy8p99gggTMbYiFf0Jzvfz+PQqqpsfnc3lMVV/GkHvs8QHEekZxpWHS22oE/S5wKq7b85oW649fC834EoZGIsb8"
    (PRE) cCert +="0Rna4ATuDxbt3dvzTR/b/eyricihMBqQ1MPCi9D81o1/3EPEOZNYFcC+yQK7M+/C7pivs0A972q8LYxG8DzmaKV8zLg+IR9ygdYdl/y/Snoeo0udV4yUlzug7i5IGZbfUh2jo3WEkEdIpty+lcVt2PtWOTdR70V0oCivE0MV0qw9GRzFAr6G71fra6r+sUKUwxQB"
    (PRE) cCert +="n07pi6hHmmZ7/DZ9QCaheqD9ttdhlQhpTTt0UPpWY9CDUJKpbWlkKYUzLPkdf/ppjiizbP1fqDcoIfZxl4RPKKtr0eIJWhEnuVirZ0kevHXEspI+igdMqk8MRndZSoohuIuLdjKjfXEGBALoqUzAB6avN2zzEy6ERRCGfR3cVhVUTcpd/iQffeGvw7tRZZOiWgwG3"
    (PRE) cCert +="Sjc/zgUppnFXfVFHCTmRz1nr0dOqKjOpMEMncRSfY2Mk+Xm8rmJ7toBu4iAyJUDCP6v24as1uxiE9DVDaFwlugdYL9c="
    (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:cartaporte31="http://www.sat.gob.mx/CartaPorte31"','')
    (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/ComercioExterior20 http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior20/ComercioExterior20.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/CartaPorte31 http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte31.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:cce20="http://www.sat.gob.mx/ComercioExterior20" ' , "")
    (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, '        <cce20:ComercioExterior' , "")
    (POS) cNodoCCE += IIf(lCCCE, ' Version="2.0"' , "")
    (POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_TRASLA), ' MotivoTraslado="' + Alltrim(SF2->F2_TRASLA) + '"', "")
    (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. 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(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, '            <cce20:Emisor' , "")
    (POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "") 
    (POS) cNodoCCE += IIf(lCCCE, '                <cce20: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, '            </cce20:Emisor>' + ( chr(13)+chr(10) ), "")
    (POS) cNodoCCE += IIf(lCCCE, '            <cce20:Receptor ' + IIf(_aTotal[108]=="XEXX010101000", 'NumRegIdTrib="' + CFDCarEsp(AllTrim(SF2->F2_IDTRIB)) + '"',""), "")     
    (POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "") 
    (POS) cNodoCCE += IIf(lCCCE, '                <cce20: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, '            </cce20:Receptor>' + ( chr(13)+chr(10) ), "") 
    //Destintarios
    (POS) cNodoCCE += IIf(lCCCE .And. FindFunction("LxCEDest") .And. SF2->(ColumnPos("F2_ACOPLA")) > 0, LxCEDest(SF2->F2_CLIENTE,SF2->F2_LOJA,SF2->F2_ACOPLA,.F.),"")
    (POS) (cNodoCCE += IIf(lCCCE, '            <cce20: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, '                  <cce20: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, '                  </cce20:Mercancia>' + ( chr(13)+chr(10) ), ""),.T.)

    (POS) (cNodoCCE += IIf(lCCCE, '            </cce20:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
    (POS) (cNodoCCE += IIf(lCCCE, '        </cce20: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))

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
cartaporte31: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
cartaporte31:CartaPorteRequerido"3.
0
1"
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
cartaporte31: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 extranjeracartaporte30: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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 Porte
    cartaporte30
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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 Tehuantepec
    de Desarrollo para el Bienestar del istmo de Tehuantepeccartaporte31: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).



    cartaporte31:RegimenesAduaneros
    cartaporte30:CartaPorte
    Condicional

    Este atributo se informa si el campo de Carta Porte 

    Reg. ISTMO 

    Transporte internacional (A1X_

    RISTMO

    INTERN) es "Sí".

    Campo de Carta Porte Clave de transporte (A1X_TRANSP).

    RegimenAduaneroExpresar el régimen aduanero al cual se destina el bien y/o mercancía. cartaporte31:RegimenAduaneroCCPCondicional

    Debe contener un valor del catálogo S037 - Catálogo de Régimen Aduanero (c_RegimenAduanero)

    Cuando el Entrada o Salida (A1X_ENTSAL) contenga el valor E-Entrada, debe
    contener un valor del catálogo c_RegimenAduanero donde la columna
    ImpoExpo contenga el valor “Entrada” o “Salida,Entrada”.
    Cuando el Entrada o Salida (A1X_ENTSAL) contenga el valor S-Salida, debe
    contener un valor del catálogo c_RegimenAduanero donde la columna
    ImpoExpo contenga el valor “Salida” o “Salida,Entrada”.

    Campo de Carta Porte

    Polo Destino

    Rég. Aduana (A1X_

    POLODE

    REGADU).

    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31:Ubicaciones:Ubicacion:DomicilioRequerido

    Campo Código postal (A1Y_CPORI) de Ubicaciones.

    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31:MercanciasRequerido"KGM"
    PesoNetoTotalAtributo condicional para registrar la suma de los valores indicados en el atributo “PesoNeto” del nodo “DetalleMercancia”.
    cartaporte30
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31:MercanciasOpcional

    Campo  (A1X_LOGDEV) de Carta Porte:

    "Sí" o "No"

    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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 fertilizante
    cartaporte30
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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


    cartaporte31: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
    cartaporte31:Mercancias:Mercancia:PedimentosRequeridoCampo Num. Ped. (D2_PEDISAT) del ítem de la factura.
    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31:Mercancias:Mercancia:GuiasIdentificacionRequeridoN/A
    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31:Mercancias:Mercancia:CantidadTransportaOpcional"01"
    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31:Mercancias:Mercancia:DetalleMercanciaRequeridoN/A
    PesoNetoEn este campo se deberá registrar el peso neto de los bienes y/o mercancías que se trasladan.
    cartaporte30
    cartaporte31: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
    cartaporte31: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
    cartaporte31:Mercancias:Mercancia:DetalleMercanciaOpcionalN/A
    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31:Mercancias:AutotransporteRequeridoCampo Número permiso SCT (A1X_PERMIS) de Carta Porte.
    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31:Mercancias:Autotransporte:SegurosOpcionalCampo Prima Seguro (A1X_PRISEG) de Carta Porte.
    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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


    cartaporte31: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


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31:FiguraTransporte:TiposFiguraCondicionalN/A
    cartaporte30


    cartaporte31: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
    cartaporte31:FiguraTransporte:TiposFigura:PartesTransporteRequeridoCampo Parte Transporte (AE0_PARTE)  de Propietarios/Arrendatarios.
    cartaporte30


    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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
    cartaporte31: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.


    ...

    Aviso
    titleSector COFEPRIS

    En esta nueva A partir de la 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)

    ...

    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.

        Aviso
        titleIMPORTANTE

        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 cartaporte30cartaporte31:CartaPorte y que los Productos se visualicen en el nodo de cfdi:Conceptos y cartaporte30cartaporte31:Mercancias.

    Factura de Traslado

    ...

    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.

      Aviso
      titleIMPORTANTE

      Para el proceso de Traslados con Complemento Carta Porte 3.0 o superios 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).

        Aviso
        titleIMPORTANTE

        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.

      Aviso
      titleIMPORTANTE

      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.

    ...

    Informações
    titleImportante

    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.

    ...

    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:

    Painel
    titleBGColorlightblue
    borderStyledashed
    titleFATSMEX.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.

    Painel
    titleBGColorlightblue
    borderStyledashed
    titleFATEMEX.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


    Aviso
    titleImportante

    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.

    ...

    Informações
    titleAviso

    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.

    ...

    Informações
    titleAviso

    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



    Informações
    titleAviso

    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:

    ...

    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. 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".

    ...

    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

    Solucoes_espanhol
    SolucaoTOTVS Backoffice

    Línea de producto: 

    Linhas_totvs_espanhol
    LinhaLínea Protheus

    Segmento:

    Segmentos_totvs_espanhol
    SegmentoBackoffice

    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

    ...

    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.


    5.4 Facilitador para selección de productos para facturas de traslado e ingreso.

    Producto

    Solucoes_espanhol
    SolucaoTOTVS Backoffice

    Línea de producto: 

    Linhas_totvs_espanhol
    LinhaLínea Protheus

    Segmento:

    Segmentos_totvs_espanhol
    SegmentoBackoffice

    Módulo:SIGAFAT - Facturación.
    Función:
    Rutina(s)Nombre TécnicoFecha
    LOCXNFFunciones genéricas.06/03/2024
    LOCXMEXFunciones genéricas localizadas para México.06/03/2024
    MATA521Eliminación de documentos de Salida.
    País:México
    Ticket:18954604 | 12928232
    Requisito/Story/Issue (informe el requisito vinculado):DMINA-21955 | DMINA-14374


    Se requiere agregar funcionalidad en la rutina de Facturaciones (MATA67N) para la emisión de Facturas de Traslado (¿Tipo Factura? - Traslado)  y Facturas de Ingreso(¿Tipo Factura? - Normal) con complemento de Carta Porte (Carta Porte - Si) donde permite realizar la selección de los productos de una Factura de Venta realizada previamente.

    En la rutina Funciones genéricas (LOCXNF)

    ...

    :

    Se activa la opción Facturas en el menú de "Otras acciones"

    ...

    , solo disponible en la Factura

    ...

    Normal (Ingreso), cuando es una Carta Porte (el campo F2_TPCOMPL

    ...

    tiene informado el valor S-Si).

    En la rutina Funciones genéricas localizadas para México (LOCMEX)

    ...

    :

    Se agregan las funciones:

    • LxMxPFact() - Función que muestra la pantalla de los productos disponibles de las Facturas de tipo "Normal" creadas previamente para su selección.
    • LxMxProd() - Realiza el query de los productos disponibles para ser mostrados.
    • LxMxVldPrd() - Función que valida si fue seleccionado al menos un producto de la pantalla de Facturas.
    • LxMxMarcaI() - Función que permite realizar las selecciones "Marcar Todos", "Desmarcar Todos" o "Invertir selección".
    • LxMxBusCve() - Función que permite la búsqueda de un producto específico en base a las claves "Factura+Serie+Item+Cod producto" o "Cod Producto+Factura+Serie".
    • LxMxCrgPrd() - Función que realiza la carga de los productos seleccionados a los ítems de la Factura.
    • LxMxQtdNF() - Función que valida que la cantidad digitada no sea mayor a la del documento original.
    • LxMxAQtDel() - Función que actualiza la cantidad disponible del documento original cuando se realiza la eliminación de una Factura de tipo Traslado e Ingreso.

    En la rutina Eliminación de documentos de Salida (MATA521)

    ...

    :

    Se realizó ajuste para que si el documento es de Tipo de Documento

    ...

    Normal (F2_TIPODOC = "

    ...

    01")

    ...

    , se llame la función que actualiza la cantidad disponible del documento original cuando se realiza la eliminación de una Factura (LxMxAQtDel), para actualizar los saldos de las cantidades al borrar la Factura de Venta.


    Totvs custom tabs box
    tabsFactura Traslado,Factura Ingreso
    idsFactura Traslado,Factura Ingreso
    Totvs custom tabs box items
    defaultyes
    referenciaFactura Traslado
    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 en el Encabezado los datos Cliente, Tienda, Serie Docto, N. Documento, Uso CFDI.
      1. Solo para las facturas de Traslado, el opción "Facturas" esta habilitada independientemente del valor del campo Carta Porte.
    4. Dar clic en "Otras acciones > Facturas", seleccionar parámetros de las facturas que desee filtrar para mostrarlas.
      ¿Serie? - Indicar la serie de la Factura.
      ¿Documento Inicial ? - Indicar el folio inicial de documentos.
      ¿Documento Final? - Indicar el folio final de documentos.
      ¿TES de Traslado? - Indicar la TES configurada de traslado para que asigne a los ítems.




    5. Se visualizan los productos asociados a la factura indicada, se seleccionan los productos que se requieran cargar en esta factura y dar clic en “Grabar”.



    6. Se cargaran los productos seleccionados en la Factura de Traslado.


    7. Si el campo Carta Porte es igual a "S - Si", se indica los datos requeridos para Carta Porte de los ítems y se guarda la Factura.


    8. Seleccionar la Factura en el browse y dar clic en "Otras acciones > Carta Porte".
    9. Llenar la información de la Carta Porte.
    Totvs custom tabs box items
    defaultno
    referenciaFactura Ingreso
    1. En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación Facturaciones (MATA467N).
    2. Incluir una Factura de Venta de tipoNormal.
    3. Informar en el Encabezado los datos Cliente, Tienda, Serie Docto, N. Documento, Uso CFDI y Carta Porte - Si.
    4. Dar clic en "Otras acciones > Facturas", seleccionar parámetros de las facturas que desee filtrar para mostrarlas.
      ¿Serie? - Indicar la serie de la Factura.
      ¿Documento Inicial ? - Indicar el folio inicial de documentos.
      ¿Documento Final? - Indicar el folio final de documentos.
      ¿TES de Traslado? - Indicar la TES configurada de traslado para que asigne a los ítems.




    5. Se visualizan los productos asociados a la factura indicada, se seleccionan los productos que se requieran cargar en esta factura y dar clic en “Grabar”.



    6. Se cargaran los productos seleccionados en la Factura.


    7. Se indica los datos requeridos para Carta Porte de los ítems y se guarda la Factura.

    8. Seleccionar la Factura en el browse y dar clic en "Otras acciones > Carta Porte".
    9. Llenar la información de la Carta Porte.

    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 




    ...