nfephp-org / sped-efinanceira

API para comunicação com a Receita Federal, para atender aos requisitos do e-Financeira
Other
9 stars 19 forks source link

Preencher campo vlrultdia quando o mês caixa for 12 #114

Closed ns-bruno closed 2 years ago

ns-bruno commented 2 years ago

Segundo o manual de Preenchimento e-Financeira da Receita Federal (Versão 1.1.7) no item 4.1.3.1.172. Leiaute – Movimento de Operações Financeiras – Campo vlrUltDia é obrigatório o preenchimento do campo vlrUltDia quando o anoMesCaixa for igual a AAAA12, ou seja, é obrigatório ter a tag vlrUltDia no xml quando o mês caixa for dezembro.

Existe algumas contas que não tem saldo no último dia de dezembro, ou até mesmo quando a conta é encerrada em meses anteriores a dezembro mas já não existe saldo no dia anterior ao encerramento, ou seja, o saldo da conta é zero no mês caixa que vai ser informado, e segundo o manual da Receita Federal deve aparecer 0,00 na tag vlrUltDia do xml quando o anoMesCaixa= AAAA12.

E percebemos que na classe EvtMovOpFin, na linha abaixo: https://github.com/nfephp-org/sped-efinanceira/blob/7a1c7de2e41bee17a1f74f3feeb855ed5572371a/src/Factories/EvtMovOpFin.php#L967

é no momento que vai ser criado a tag vlrUltDia no xml, e antes de criar a tag existe uma validação que verifica se a variável do objeto é vazio, !empty($ic->vlrultdia). Se não for vazio então adiciona a tag vlrUltDia, e o PHP considera o valor 0.0 como vazio, e como existe contas que no mês de dezembro estão zeradas então a classe EvtMovOpFin.php não irá adicionar a tag vlrUltDia para o mês caixa de dezembro, e isso vai gerar o seguinte erro:

MS1108 – O saldo deve ser informado quando o mês que está sendo reportado for igual a 12 (dezembro) ou quando a conta estiver sendo encerrada.

Identificamos essa questão que estou relatando acima, tivemos que fazer uma alteração na classe EvtMovOpFin para que poder adicionar a tag vlrUltDia com valor 0,00 para quando o mês caixa for dezembro, e por isso estou relatando aqui tento em vista a importância e que outros também utilizam essa biblioteca para geração do e-Financeira e que possivelmente poderão ter a mesma situação e gerando o erro MS1108.

A implementação que fizemos foi um checagem simples se o $this->std->anomescaixa é dezembro e se $ic->vlrultdia é numérico, então adiciona a tag vlrUltDia, se não utiliza a verifica atual (!empty($ic->vlrultdia)).