Nfse.PedidoEvento (nfse v0.1.0)

Copy Markdown View Source

O pedido de registro de um evento da NFS-e, montado a partir dos campos que quem o pede preenche.

Os campos do struct são os elementos do Nfse.Schema.V1_01.TCInfPedReg, com os mesmos nomes e as mesmas regras de conversão. Exatamente um elemento e<código> vai preenchido, e é ele que define o tipo do evento. build/2 aceita o struct ou um mapa com essas chaves.

Eventos que o contribuinte pode registrar

CódigoCampoEvento
101101e101101Cancelamento de NFS-e
101103e101103Solicitação de análise fiscal para cancelamento
202201e202201Confirmação do prestador
203202e203202Confirmação do tomador
204203e204203Confirmação do intermediário
202205e202205Rejeição do prestador
203206e203206Rejeição do tomador
204207e204207Rejeição do intermediário
205208e205208Anulação da rejeição

No cancelamento (e101101), c_motivo é 1 para erro na emissão, 2 para serviço não prestado e 9 para outros, e x_motivo explica o motivo com 15 a 255 caracteres. Para cancelar sem montar o pedido, use Nfse.cancel/3.

O que build/2 calcula

  • Id do infPedReg, com 59 caracteres: "PRE", a chave de acesso da NFS-e e o tipo do evento com 6 dígitos
  • versao da raiz, sempre "1.01"
  • tp_amb, a partir do ambiente do cliente. Pode ser omitido; se vier, precisa ser o do cliente
  • cnpj_autor ou cpf_autor, a partir do certificado do cliente, quando o chamador não informa nenhum dos dois
  • dh_evento, a hora atual em UTC com precisão de segundos, quando o chamador não informa

ver_aplic vem sempre do chamador. Depois valida tudo, assina o infPedReg com o certificado do cliente e devolve o XML canônico, pronto para enviar. Nada é reescrito entre assinar e devolver.

Erros

Os erros voltam juntos, como %Nfse.Error{kind: :validation}, antes de qualquer assinatura. Além dos erros do schema, descritos em Nfse.Schema.Runtime:

CaminhoErroQuando
id:unknown_fieldo chamador passou id, que é sempre calculado
tp_amb:environmenttp_amb diferente do ambiente do cliente
(vários):choicemais de um elemento e<código> preenchido, ou nenhum

Summary

Functions

Calcula Id, versao e tpAmb, valida, assina e devolve o XML do pedido com o Id.

Types

built()

@type built() :: %{xml: binary(), id: String.t()}

t()

@type t() :: %Nfse.PedidoEvento{
  ch_nfse: term(),
  cnpj_autor: term(),
  cpf_autor: term(),
  dh_evento: term(),
  e101101: term(),
  e101103: term(),
  e105102: term(),
  e105104: term(),
  e105105: term(),
  e202201: term(),
  e202205: term(),
  e203202: term(),
  e203206: term(),
  e204203: term(),
  e204207: term(),
  e205204: term(),
  e205208: term(),
  e305101: term(),
  e305102: term(),
  e305103: term(),
  tp_amb: term(),
  ver_aplic: term()
}

Functions

build(pedido, client)

@spec build(t() | map(), Nfse.Client.t()) :: {:ok, built()} | {:error, Nfse.Error.t()}

Calcula Id, versao e tpAmb, valida, assina e devolve o XML do pedido com o Id.