Versões comparadas

Chave

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

Histórico

O MDF-e é uma parte do projeto NF-e, cuja especificação técnica é controlada pela SEFAZ RS (vide https://mdfe-portal.sefaz.rs.gov.br/). MDF-e deverá ser emitido por empresas prestadoras de serviço de transporte para prestações com mais de um conhecimento de transporte ou pelas demais empresas nas operações, cujo transporte seja realizado em veículos próprios, arrendados, ou mediante contratação de transportador autônomo de cargas, com mais de uma nota fiscal.

...

Não é um documento novo, mas sim a escrituração digital do Manifesto de Carga, um documento opcional utilizado por empresas transportadoras de cargas onde são relacionados todos os conhecimentos de transporte que deveriam ser emitidos em uma operação de transporte de carga fracionada, ou seja, onde em um mesmo caminhão há mercadorias para diversos destinatários. Havendo a utilização do Manifesto de Carga, não há necessidade de emitir um conhecimento de transporte para cada destinatário, sendo emitido apenas um, acompanhado do manifesto de carga em cada operação. Sua existência se deu pelo Ajuste Sinief nº 15/89, que acrescentou o inciso XVIII no art. 1º do Ajuste Sinief 06/89, criando o modelo 25 dos documentos fiscais utilizados pelos contribuintes do ICMS. Também pode ser utilizado por empresas que possuem frota própria e fazem entregas de cargas a vários clientes. Agora o modelo do MDF-e será 58.

Modo de funcionamento do MDF-e

Empresas envolvidas: Empresa transportadora ou distribuidora de combustíveis

...

    • Essa tela de Inclusão MDF-e já virá preenchida e dependendo da situação o usuário só precisará clicar no OK para processar o MDF-e.
      • O campo série será sugerido do perfil da empresa. O usuário poderá trocar por outra série que seja do tipo Emissão Própria. Através da série será sugerido o Número do MDF.
      • O modelo será sugerido do perfil da empresa e não poderá ser alterado.
      • A Data/Hora de Emissão será sugerida conforme a data/hora atual e pode ser alterada pelo usuário.
      • Os campos Frota, Carreta, Treminhão, Motorista e Transportadora serão sugeridos conforme as NF's selecionadas na tela anterior, não podendo ser alterados. No caso da Cidade Carregamento é a mesma regra, porém obtida do Cadastro do Depósito da NF.
      • Os campos de Informações Adicionais e Informações Complementares serão do tipo Memo passível de alteração do usuário. Essas informações serão sugeridas do perfil da empresa.
      • O campo Peso Total será sugerido com a soma dos Pesos das NF-s selecionadas (quando NF-e's) ou com 0 (zero) (quando CT-e's), podendo ser alterado pelo usuário.
      • O campo Valor Total da Carga será sugerido com a soma dos Valores Totais das NF's selecionadas (quando NF-e's) ou com a soma dos Valores Toais nas NF's que acobertam o Conhecimento (quando CT-e's), podendo ser alterado pleo usuário. 
    • O grid de NF's selecionadas será preenchido com as NF's selecionadas na tela anterior. 
      • A cidade Final do MDF-e (de Descarregamento) será obtida da última NF apresentada no grid (que não permitirá ordenação de colunas pelo usuário). Assim, a ordem das NF's deve representar o percurso da viagem e o usuário deve utilizar as setas laterais para ajustar essa ordem caso não venha correta
      • Caso tenha a necessidade de retirar uma NF do processo o usuário deve cancelar os dados dessa tela, o que retorna para tela anterior e desmarcar a NF a ser retirada.
    • Ao dar OK teremos o seguinte processo:
      • Salvamento dos dados principais do MDF-e
        • Deve ser verificada a simultaneidade com outro usuário de forma a ajustar o Número do MDF (similar ao que fazemos na NF e no Conhecimento) caso já tenha sido utilizado o número sugerido na tela por outro usuário
        • Deve ajustar na série informada o próximo número
      • Salvamento das NF's vinculadas
        • Além de salvar na tabela correspondente, deve salvar na NF o Sequencial do MDF. Para isso deve também ter controle de simultaneidade, de forma que uma NF não seja incluída em dois MDF's não cancelados ao mesmo tempo
      • Salvamento do percurso
        • A cada NF selecionada também será adicionada a cidade de Entrega na aba Percurso. Lembrando que não serão adicionadas cidades repetidas, nem a cidade que for igual à cidade do Carregamento do MDF-e
      • Todos esses pontos acima farão parte de uma única transação no banco de dados. Ou seja, qualquer problema em qualquer dos pontos deve abortar a transação toda. Dando tudo certo continua os próximos passos.
      • Verificação do perfil Off-line da empresa, que caso esteja desmarcadado força o envio do processamento de Recibo para SEFAZ (nos mesmos moldes da NF ou Conhecimento)
        • Caso OK no Recibo, enviar processamento de Protocolo para SEFAZ.
      • Independente do processo da SEFAZ ter sido enviado ou ter retornado com sucesso, questionar se quer imprimir DAMDFE (se perfil usuário "Pode imprimir MDF-e" estiver marcado), apresentando na mensagem se o MDF-e está autorizado ou não, sugerindo a impressora padrão e deixando alterar a impressora se perfil usuário "Direciona impressão MDF-e" estiver marcado. No caso de ser impresso o DAMDFE de um MDF-e não autorizado, no campo de Protocolo de Uso deve sair a mensagem sobre Contingência, conforme previsto no manual, página 101.
  • Tela de MDF-e's Pendentes
    • Essa tela será similar à tela de NF-e pendentes
      • As opções de tipo de Pendência devem ser: 
        • Recibo: Quando o MDF-e foi incluído, mas seja pela empresa estar off-line ou por erro no processamento da SEFAZ, esse MDF-e não foi processado.
        • Protocolo: Quando o MDF-e tem recibo, mas por algum erro (SEFAZ ou empresa) não conseguiu obter o protocolo
        • Encerramento: Quando o MDF-e está autorizado (tem protocolo), não está cancelado e ainda não está encerrado. Útil para o usuário não esquecer que precisa encerrar o MDF-e.
      • O grid deve apresentar os dados principais dos MDF-e's permitindo marcar cada um deles.
      • Terá os botões:
        • Processa
          • Caso a pendência seja de Recibo ou Protocolo será similar à NF-e, fazendo o envio do processamento para SEFAZ. No caso de Recibo, após processado o MDF-e retorna à tela como Pendente Protocolo, no caso de Protocolo o retorno será como Pendente Encerramento.
          • Caso a pendência seja de Encerramento
            • O usuário deverá indicar a Data/Hora de Encerramento (sendo sugerida a Data/Hora atual) e confirmar a Cidade de Descarregamento, que será sugerida conforme a última NF do percurso. Assim, caso seja necessário trocar uma dessas informações o usuário clica no botão Dados Encerramento e as ajusta. Nesta tela de Encerramento:
              • A cidade a ser informada deve utilizar o cadastro de Cidades do Sispetro.
              • Deve ser validado se a Data do Encerramento informada é maior que a Data de Autorização
        • Sincroniza: Fará a consulta da chave de acesso do MDF-e posicionado para identificar sua situação na SEFAZ.
  • Cancelamento de MDF-e
    • O botão de Cancelamento só estará habilitado se o usuário tiver permissão para cancelamento e o MDF-e estiver com status Ativo
    • Ao solicitar o cancelamento pela tela de Manutenção de MDF-e's o processo será similar ao que é feito na tela de Manutenção de NF's:
      • Questionar o usuário se deseja realmente cancelar
      • Fazer as validações para permitir o cancelamento via Servidor Sispetro, retornando uma lista de possíveis problemas:
        • O MDF-e não pode estar cancelado
        • O MDF-e não pode estar encerrado
        • O MDF-e não pode estar com protocolo pendente (só com recibo pendente)
        • O prazo de cancelamento deve estar de acordo com o configurado no perfil de sistema
          • MDF-e autorizado: Intervalo entre Data/Hora de Autorização e a Data/Hora atual do servidor
          • MDF-e NÃO autorizado: Intervalo entre Data/Hora de Inclusão e a Data/Hora atual do servidor
      • Para MDF-e autorizado enviar o cancelamento para SEFAZ com os seguintes passos:
        • Inclui dados na tabela de Processamento caso não tenha um Comando de Cancelamento como Não Solicitado. Caso tenha o Comando de Cancelamento como Não Solicitado utiliza o mesmo registro
        • Envia o cancelamento para SEFAZ
        • Salva os dados de retorno da SEFAZ (xml, resposta, data de processamento)
        • Se rejeitado pela SEFAZ ou sem comunicação (status não solicitado) aborta todo o processo. Se autorizado continua o processo.
      • Fazer o cancelamento efetivo no Sispetro, salvando Usuário e Data/Hora de Cancelamento
Estrutura de Dados

Tabela MDFe

CampoTipo

MDFeID

Integer Default AutoIncrement Primary Key

CodEmpresa

Integer not null

ChaveAcesso

char(44) not null

Modelo

Integer not null

Serie

char(10)

NumeroMDF

Integer not null

DataMDF

date not null

HoraMDF

time not null

SituacaoMDF

smallint not null

CodigoDNCCarrega

char(09) not null

CodigoDNCDescarrega

char(09) not null

SeqFrota

Integer not null

SeqFrotaCarreta

Integer

SeqFrotaTrem

Integer

CodTranspMotorista

char(05) not null

CodTransp

char(05) not null

Status

smallint Default 0

StatusSefaz

smallint

DataInclusao

datetime Default Current

UsuarioInclusao

char(10)

DataAutorizacao

date

DataEncerramento

date

DataIncEncerramento

datetime Default Current

UsuarioEncerramento

char(10)

SeqMotivoCancto

Integer

DataCancelamento

datetime Default Current

UsuarioCancelamento

char(10)

NumeroRecibo

char(15)

DataProcessamentoRecibo

datetime

NumeroProtocolo

char(15)

XMLProtocolo

Long varchar

DataProcessamentoProtocolo

datetime

CodMsgSefaz

Integer

MsgSefaz

char(200)

NumeroProtocoloCancelamento

char(15)

XMLAutorizacaoCancelamento

Long varchar

DataProcessamentoCancelamento

datetime

SeqEventoCancelamento

Integer

Ambiente

smallint Default 0

XMLSolicitacaoCancelamento

Long varchar

 

Tabela MDFeDoctoVinculado

CampoTipo
SeqMDFeDoctoVinculadointeger
MDFeIDinteger
CodEmpresaNFinteger
SequencialNFinteger

 

Tabela MDFePercurso

CampoTipo
SeqMDFePercursointeger
MDFeIDinteger
UFchar(2)
Ordemsmallint

* Ter índice único para SequencialMDFe e CodigoDNC, ou seja, uma Cidade de percurso não pode estar repetida para o mesmo MDF-e

* Ter índice único para SequencialMDFe e Ordem, ou seja, não pode ter ordem repetida para o mesmo MDF-e

Tabela MDFeProcessamento

CampoTipo

SeqMDFeProcessamento

integer Default AutoIncrement Primary Key

MDFeID

integer not null

TipoComando

smallint not null

Status

smallint Default 0

XMLEnviado

long Varchar

XMLRecebido

long Varchar

XMLProtocolo

long Varchar

XML

long Varchar

NumeroRecibo

char (15)

NumeroProtocolo

char (15)

StatusResposta

integer

MotivoResposta

integer

DataInclusao

datetime

DataProcessamento

datetime

 

Dicas para Homologação

  • A

Controle de tempo dos Trabalhos

TarefaEspecificaçãoCodificaçãoTotal DesenvData Prev. Liberação
Alterações Servidor SisPetro16h - Ueliton40h - Ueliton56h21/01/2013
MDF-e - Perfis e Afins4h - Giovana6h - Paulo6h14/01/2013
Impressão de DAMDFe4h - Giovana8h - Paulo8h15/01/2013
Inclusão MDF-e e Manutenção Básica16h - Paulo32h - Paulo48h23/01/2013
MDF-e Pendente8h - Giovana24h32h27/01/2013
Manutenção MDF8h - Ueliton24h32h29/01/2013

 

Solução Detalhada

Inclusão de MDF-e

A tela de Inclusão será utilizada só no Normal. Porém trabalharemos com memDataSet para facilitar, caso no futuro, seja mudada para utilizar também no Remoto.

Ter uma tabela global temporary MDFeNFPendente com a estrutura dos campos necessários para apresentação na tela, inclusive NumNotasMotorista (para indicar o número de Notas por Motorista para o filtro da tela)

Ter uma procedure do banco MDFeIncluiNFPendente que receba como parametro as opções da tela de Inclusão do MDFe. Parametros:

NomeTipoIn/OutObservacoes
xCodEmpresaintegerin 
xDataInidatein 
xDataFindatein 
xTipoCargasmallintin default -11 Lotação e 0 Fracionada
xOperadorsmallintin default -1 0 : '=',1 : '<>', 2 : '>', 3 : '>=', 4 : '<',5 : '<='
xNumNotasMotoristasmallintin default 0 
xCodDepchar(2)in default '' 
xSeqFrotaintegerin default 0 
xCodTranspMotoristachar(5)in default '' 

 

Essa procedure terá o seguinte comportamento:

  • Pelo código da empresa recebido deve identificar se a empresa é transportadora ou não
  • Se a empresa for transportadora
    • Inserir dados na tabela MDFeNFPendente com o resultado de um select nas tabelas NotaFiscal e Conhecimento, considerando os parâmetros recebidos pela procedure (além dos filtros fixos citados na solução)

    • Usar o recurso de execute immediate para montar o SQL conforme os parametros (ou seja, só terá na clausula where os filtros que tenham parametros informados)
  • Se a empresa for Não transportadora
    • Inserir dados na tabela MDFeNFPendente com o resultado de um select na tabela NotaFiscal considerando os parâmetros recebidos pela procedure, exceto Número de Notas por Motorista (além dos filtros fixos citados na solução)
    • Usar o recurso de execute immediate para montar o SQL conforme os parametros (ou seja, só terá na clausula where os filtros que tenham parametros informados)
    • Caso a opção de filtro de Número de Notas por Motorista seja diferente de >= 1
      • Preencher o campo NumNotasMotorista da tabela MDFeNFPendente com um update similar a:

        Bloco de código
        update MDFeNFPendente n set NumNotasMotorista = (select count(*) from MDFeNFPendente where CodTranspMotorista = n.CodTranspMotorista)

        Deletar os registros cujo NumNotasMotorista não atenda o filtro passado (usar também execute immediate

Esta procedure será utilizada pelo botão Atualiza da primeira tela para trazer as NF's pendentes de MDF-e

 

Especificação

Seguir a ordem de especificação abaixo

...

Aviso

Atenção para não criar os mesmos campos nas especificações acima. A maioria dos campos necessários para o Servidor SisPetro e Client's serão criados na especificação do Servidor.

...