O CTe de Substituição é um documento para corrigir qualquer erro que possa ter na emissão do CTe. Diferentemente do CTe de Anulação, o de substituição é emitido quando o tomador de serviço é contribuinte do ICMS, sendo voltado para corrigir algum valor incorreto ou o tomador de serviços informado no CTe. 

Para emitir o CTe de substituição é necessário seguir alguns passos, tanto pelo tomador de serviço, quanto o transportador.

Para valores
É possível emitir um CTe substituto se o valor da prestação de serviço tiver prosseguido acima do valor correto. Se o valor tiver saído menor, você deve emitir o CTe complementar com os valores que faltam. Dessa forma, este CTe de substituição só pode ser emitido quando o tomador do serviço de transporte for contribuinte do ICMS. Se o tomador não for contribuinte do ICMS e não emite NFe, deverá ser gerado o CTe de anulação após receber a NF de anulação de frete. 

Para corrigir tomador
Para alterar o tomador do serviço de um CTe emitido e já autorizado, que não pode ser cancelado, pode ser emitido um CTe substituto para corrigir esse erro. Mas para fazer esse feito, o CNPJ do tomador do CTe de substituição deve constar no CTe que há erros e deve ser substituído. Existem algumas regras para esse caso, como:

    • O tomador correto já deve constar no CTe substituto em algumas das opções: destinatário, remetente, expedidor ou recebedor;
    • O tomador deve estar localizado na mesma UF do tomador original;
    • O tomador original deve providenciar o evento de ‘’Prestação de Serviço em Desacordo’’ para que o CTe com erros seja substituído.

Nesta operação deve ser utilizado o CFOP:
CFOP 5932 - Prestação de serviço de transporte iniciada em unidade da Federação diversa daquela onde inscrito o prestador
    - Utilizar esse CFOP quando a UF de início da prestação for igual a UF de fim de prestação (diferentes de “EX”);

CFOP 6932 - Prestação de serviço de transporte iniciada em unidade da Federação diversa daquela onde inscrito o prestador
    - Utilizar esse CFOP quando a UF de início da prestação for diferente da UF de fim da prestação (diferentes de “EX”);

CFOP 7358 - Prestação de serviço de transporte
    - Utilizar esse CFOP quando a UF de início OU a UF de fim da prestação for igual a “EX”.

Classificam-se neste código as anulações correspondentes a valores faturados indevidamente, decorrentes das aquisições de serviços de transporte.

O prazo para emitir CTe de substituição é de até 60 dias após a emissão e autorização do CTe Original com erro.

Exemplo de Utilização


Endpoint:Ambiente Stage: https://stg.motorfiscal.raas.varejo.totvs.com.br/starting/api/v1/operacao
Método:POST
Descrição:Utilize este recurso para inserir um novo registro
Modelo JSON (envio):

{
    "naturezaOperacao": "SUBSTITUICAO",
    "tipoAcao": "EMISSAO",
    "emitente": "EMIT001",
    "indTomador": "REMETENTE",
    "remetente": "ATOR007",
    "destinatario": "ATOR008",
    "operacao": "TRANSPORTE",
    "modal": "RODOVIARIO",
    "tipoServico": "NORMAL",
    "tipoCte": "SUBSTITUICAO",
    "chaveCTeVinc": "35221153113791000122570350000002801546665335",
    "chaveCTeAnul": "35221153113791000122570230000002701952134225",
    "outrasCaracteristicas": "amarelo",
    "urlRetorno": "https://teste.free.beeceptor.com",
    "territorioOrigem": {
        "pais": "Brasil",
        "uf": "SP",
        "cidade": "Sorocaba"
    },
    "territorioDestino": {
        "pais": "Brasil",
        "uf": "SC",
        "cidade": "Joinville"
    },
    "produtos": [
        {
            "valor": 10,
            "quantidade": 2,
            "codigo": "002"
        }
    ],
    "componentesFretes": [
        {
            "codigo": "CF001",
            "nome": "seguro",
            "valor": 1.0
        },
        {
            "codigo":"CF002",
            "nome": "pedágio",
            "valor": 1.0
        }
    ],
    "infCTeNorm": {
        "infCarga": {
            "vCarga": 10475.10,
            "proPred": "MERCADORIAS KLABIN APARAS",
            "xOutCat": "Fardos",
            "vCargaAverb": 10475.10,
            "infQ": [
                {
                    "cUnid": "01",
                    "tpMed": "PESO REAL",
                    "qCarga": 29860.0000
                },
                {
                    "cUnid": "01",
                    "tpMed": "QUANTIDADE",
                    "qCarga": 30.0000
                },
                {
                    "cUnid": "00",
                    "tpMed": "PESO COBRADO",
                    "qCarga": 29860.0000
                },
                {
                    "cUnid": "03",
                    "tpMed": "CUBAGEM (M3)",
                    "qCarga": 0.0000
                }
            ]
        },
        "infDoc": {
            "infNFe": [
                {
                    "chave": "41220689637490013395550010059303221522453794"
                }
            ]
        },
        "infModal": {
            "rodo": {
                "RNTRC": "00070953"
            }
        }
    },
    "observacoesGerais""OBS GERAL",
    "observacoesContribuinte": [
        "observacoesContribuinte1","observacoesContribuinte2"
    ],
    "observacoesFisco": [
        "observacoesFisco1","observacoesFisco2"
    ]

}

Status de retorno:
  • 200 - OK
  • 400 - Bad Request (Um ou mais campos estão inválidos. Faça o preenchimento correto e tente novamente)
  • 401 - Unauthorized (Falha na autenticação)
  • 500 - Internal Error (Falha de comunicação com a fila: fiscal-motor-starting-calculating-topic ou Dados mínimos precisam ser preenchidos)
Exemplo de Json assíncrono Emissão (retorno enviado para o link informado no atributo urlRetorno):  {
    "tipo""EMISSAO",
    "retornoEmissao ":
    {
        "Aprovado"true,
        "Situacao""Autorizado",
        "cStat""100",
        "Descricao""Autorizado o uso do CT-e",
        "chaveacesso""35221153113791000122570220022986891339483933"
    },
    "tributos": [
        {
            "nome""ICMS_TRANSP_0000_S_PED",
            "cst""00",
            "vbc"153.41,
            "picms"12.0,
            "predbc"0.0,
            "vicms"18.41
        }
    ],
    "totais": {
        "vprest"153.41,
        "vrec"153.41,
        "vtotTrib"18.41
    },
    "componentes": [
        {
            "nome""ICMS_TRANSP_0000_S_PED",
            "tipo""ICMS",
            "codigo""EMBALAGEM",
            "descricao""EMBALAGEM",
            "cst""00",
            "vbc"5.68,
            "picms"12.0,
            "vicms"0.68
        },
        {
            "nome""ICMS_TRANSP_0000_S_PED",
            "tipo""ICMS",
            "codigo""SEGURO",
            "descricao""SEGURO",
            "cst""00",
            "vbc"147.73,
            "picms"12.0,
            "vicms"17.73
        }
    ]
}
Exemplo de Json assíncrono Simulação (retorno enviado para o link informado no atributo urlRetorno):{
    "tipo""SIMULACAO",
    "tributos": [
        {
            "nome""ICMS_TRANSP_0000_S_PED",
            "cst""00",
            "vbc"153.41,
            "picms"12.0,
            "predbc"0.0,
            "vicms"18.41
        }
    ],
    "totais": {
        "vprest"153.41,
        "vrec"153.41,
        "vtotTrib"18.41
    },
    "componentes": [
        {
            "nome""ICMS_TRANSP_0000_S_PED",
            "tipo""ICMS",
            "codigo""EMBALAGEM",
            "descricao""EMBALAGEM",
            "cst""00",
            "vbc"5.68,
            "picms"12.0,
            "vicms"0.68
        },
        {
            "nome""ICMS_TRANSP_0000_S_PED",
            "tipo""ICMS",
            "codigo""SEGURO",
            "descricao""SEGURO",
            "cst""00",
            "vbc"147.73,
            "picms"12.0,
            "vicms"17.73
        }
    ]
}


Observações

AtributoExemplo
naturezaOperacao
  • Campo OPCIONAL, porém caso exista a necessidade em utilizar um Cenário Fiscal específico para esse tipo de operação será importante informar o valor correspondente da Classe Fiscal criada.
  • O valor esperado para esse campo é conforme o exemplo ("naturezaOperacao": "SUBSTITUICAO").
  • Não existe uma palavra específica a ser utilizada nesse caso, sendo totalmente flexível esse processo, porém a informação enviada nessa TAG deverá corresponder com o mesmo nome da Classe Fiscal do time Natureza de Operação para que o Motor Fiscal identifique esse Cenário Fiscal específico e aplique as regras correspondentes.
  • Caso existir a necessidade em um Cenário Fiscal específico a sugestão é informar a palavra "SUBSTITUIÇÃO" dessa forma organiza as Classes Fiscais e evita qualquer problema de entendimento na parametrização dentro do Motor Fiscal.
tipoCte
  • Campo OPCIONAL, porém caso não for indicado que se trata de uma SUBSTITUICAO e não existir um Cenário Fiscal considerando a naturezaOperacao indicando esse processo, o Motor Fiscal não conseguirá identificar que essa operação é correspondente a um CTe de Substituição.
  • Para esse tipo de documento, a sugestão é informar a palavra restrita SUBSTITUICAO ("tipoCte": "SUBSTITUICAO") e dessa forma o Motor Fiscal consegue identificar esse processo.
chaveCTeVinc
  • Campo OPCIONAL, porém caso não for indicado a data de emissão do CTe Original, irá provocar a Rejeição no envio do CTe ao SEFAZ. 
  • O valor esperado para esse campo é conforme o exemplo ("chaveCTeVinc": "35221153113791000122570350000002801546665335").
  • Vale destacar que caso não for informado a data de emissão do CTe Original na integração pelo JSON, o usuário poderá acessar a tela de digitação do Conhecimento de Transporte e informar manualmente esse dado, em seguida enviar o documento gerado para a SEFAZ.
chaveCTeAnul
  • Campo OPCIONAL, porém caso não for indicado a chave do CTe Original, irá provocar a Rejeição no envio do CTe ao SEFAZ.
  • O valor esperado para esse campo é conforme o exemplo ("chaveCTeAnul": "35221153113791000122570230000002691452155532").
  • Vale destacar que caso não for informado a chave do CTe Original na integração pelo JSON, o usuário poderá acessar a tela de digitação do Conhecimento de Transporte e informar manualmente esse dado, em seguida enviar o documento gerado para a SEFAZ.