Pular para o conteúdo principal

Origem do CFOP na Importação de XML de CT-e

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 2 → campo "CFOP Importação XML CT-E" Tabela: PARMFATUR.ST_IMPORTACFOCTE Valor padrão: E (Endereço Transportadora)

Define de onde o sistema obtém o estado (UF) usado para decidir se o CFOP do item será "dentro do estado" (inicia com 5) ou "fora do estado" (inicia com 6) quando se importa um XML de Conhecimento de Transporte Eletrônico (CT-e) na nota fiscal de entrada.

Telas impactadas​

MóduloCódigoDescrição
NF EntradaMNF001Emissão/recebimento de NF de entrada - importação XML de CT-e e definição do CFO do item
Manutenção NF-eMNF034Retorno de CFOP para itens/documentos quando o tipo de documento é Transporte

Campos envolvidos​

CampoDescrição
ITEMNOTA.CD_CFOCFO que será gravado no item da nota ao importar o CT-e
ITEMNOTA.CD_CFODENTROCFO configurado na Movimentação para operações dentro do estado
ITEMNOTA.CD_CFOFORACFO configurado na Movimentação para operações fora do estado
ITEMNOTA.CD_MOVIMENTACAOMovimentação vinculada ao item (origem dos CFOs dentro/fora)
NOTA.SG_ESTADOUF do endereço da transportadora (usado quando parâmetro = E)
CFOP lido do XML do CT-ePrimeiro dígito do CFOP do próprio CT-e (usado quando parâmetro = O)

Opções disponíveis​

E - Endereço Transportadora​

O que fazDetalhe
Origem da UFUF cadastrada no endereço da transportadora da nota (NOTA.SG_ESTADO)
ComparaçãoNOTA.SG_ESTADO = UF da empresa? Sim → CD_CFODENTRO; Não → CD_CFOFORA
Usa o CFOP do XML do CT-e?Não, ignora o CFOP do XML para decidir
ComportamentoPadrão tradicional: o CFOP do item é definido pela UF da transportadora vs UF da empresa

Simulação passo a passo​

  1. Em MFA001 → Parâmetros → Ambos → Opção 2 → CFOP Importação XML CT-E = "Endereço Transportadora"
  2. Salve os parâmetros (F6)
  3. Abra MNF001 e importe um XML de CT-e
  4. Suponha empresa em RS e transportadora cadastrada em RS (mesma UF)
  5. O item do CT-e recebe CD_CFO = CD_CFODENTRO da movimentação (CFOP 5xxx)
  6. Agora importe outro CT-e cuja transportadora é de SC (UF diferente)
  7. O item recebe CD_CFO = CD_CFOFORA (CFOP 6xxx)

Resultado esperado: O CFOP segue a UF da transportadora. Se a transportadora é do mesmo estado da empresa, usa CFO dentro; caso contrário, CFO fora, independentemente do que está escrito no XML do CT-e.


O - Origem/Destino Transporte​

O que fazDetalhe
Origem da UFCFOP lido diretamente do XML do CT-e (primeiro dígito)
ComparaçãoCopy(CFOPCte, 1, 1) = '5' → CD_CFODENTRO; caso contrário → CD_CFOFORA
Usa o CFOP do XML do CT-e?Sim, confia no CFOP que a transportadora emitiu
ComportamentoRespeita a natureza da operação declarada pela transportadora no próprio CT-e

Simulação passo a passo​

  1. Em MFA001 → Parâmetros → Ambos → Opção 2 → CFOP Importação XML CT-E = "Origem/Destino Transporte"
  2. Salve os parâmetros (F6)
  3. Abra MNF001 e importe um XML de CT-e cujo CFOP emitido é 5353 (prestação dentro do estado)
  4. O item recebe CD_CFO = CD_CFODENTRO da movimentação
  5. Importe outro CT-e cujo CFOP emitido é 6353 (prestação fora do estado)
  6. O item recebe CD_CFO = CD_CFOFORA
  7. Mesmo que a transportadora esteja cadastrada em UF diferente da operação, o CFOP usado respeita o XML

Resultado esperado: A decisão dentro/fora ignora a UF cadastrada da transportadora e usa a natureza do transporte declarada no CT-e. Útil quando a mesma transportadora presta serviços interestaduais e intraestaduais.


Tabela Comparativa Resumida​

OpçãoFonte da UF para CFOPCritérioObservação
ENOTA.SG_ESTADO (endereço da transportadora)Igual à UF da empresa → DENTRO, senão → FORAValor padrão
OPrimeiro dígito do CFOP do XML do CT-e5 → DENTRO, 6 (ou outro) → FORARespeita o CFOP emitido pela transportadora

Referências no Código Fonte​

Delphi​

  • source/MFA001/UMFA001.dfm (linhas 3833-3847, 4396-4422): label "CFOP Importação XML CT-E" e combobox cmbTP_ANALISE1 com DataField = 'ST_IMPORTACFOCTE' e opções Endereço Transportadora (E) / Origem/Destino Transporte (O).

  • source/MFA001/UdmMFA001.pas linha 550: valor padrão 'E' atribuído em AfterInsert do dataset tabPARMFATUR.

  • source/MFA001/UdmMFA001.dfm linhas 1806-1808, 2428, 2602, 2848: definição do field tabPARMFATURST_IMPORTACFOCTE e inclusão nas cláusulas INSERT/UPDATE da PARMFATUR.

  • source/MNF001/UdmMNF001.pas linhas 1803-1822 (procedure Determina_Cfo):

    if ((dmMNF001.ParmFatur.Values['ST_IMPORTACFOCTE'] = 'O') and (iTP_XML = 'cte')) then
    begin
    if (iTP_XML = 'cte') then
    begin
    if (Copy(CFOPCte, 1 , 1) = '5') then
    dmMNF001.tabITEMNOTACD_CFO.AsString := dmMNF001.tabITEMNOTACD_CFODENTRO.AsString
    else
    dmMNF001.tabITEMNOTACD_CFO.AsString := dmMNF001.tabITEMNOTACD_CFOFORA.AsString;
    end
    end else
    begin
    if ( dmMNF001.tabNOTASG_ESTADO.AsString = dmMNF001.iSG_ESTEMP ) then
    dmMNF001.tabITEMNOTACD_CFO.AsString := dmMNF001.tabITEMNOTACD_CFODENTRO.AsString
    else
    dmMNF001.tabITEMNOTACD_CFO.AsString := dmMNF001.tabITEMNOTACD_CFOFORA.AsString;
    end;
  • source/MNF034/UMNF034.pas linhas 1581-1616 (function retornaCFOP):

    Consulta :=
    'SELECT M.CD_MOVIMENTACAO, M.CD_CFOD, M.CD_CFOF, P.ST_IMPORTACFOCTE '+#10+
    'FROM MOVIMENTACAO M '+#10+
    'INNER JOIN PARMFATUR P ON (P.CD_EMPRESA = '+IntToStr(sessao.empresa.cd_Empresa)+') '+#10+
    'WHERE M.CD_MOVIMENTACAO = '+Movimentacao;
    ...
    if ((dmMNF034.ParmFatur.Values['ST_IMPORTACFOCTE'] = 'O') and (cmbTP_DOCUMENTO.Value = 'T')) then
    begin
    if (Copy(dmMNF034.cdsDOCUMENTOSCFOP.AsString, 1 , 1) = '5') then
    Result := Resultado[1] // CD_CFOD (dentro)
    else
    Result := Resultado[2]; // CD_CFOF (fora)
    end else
    begin
    if (dmMNF034.cdsDOCUMENTOSSG_ESTADO.AsString = UFEmpresa) then
    Result := Resultado[1]
    else
    Result := Resultado[2];
    end;

SQL / Scripts​

  • Nenhuma referência a ST_IMPORTACFOCTE em Scripts/ - a regra é aplicada exclusivamente no cliente Delphi durante a importação do XML do CT-e. Stored procedures não leem este parâmetro.