Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Novas funcionalidades e melhorias #159

Merged
merged 26 commits into from
Jun 13, 2024
Merged

WIP: Novas funcionalidades e melhorias #159

merged 26 commits into from
Jun 13, 2024

Conversation

andrekutianski
Copy link
Collaborator

Esta requisicao implementa novos recursos, melhorias e correcoes no módulo, visando melhor operacao, adminsitracao e integridade dos dados. As principais mudancas estao descritas a seguir.

Tratamento de status do cancelamento da nota via API

Refatorado a manipulação do status da nota quando é realizada cancelamento para atender a estrutura atual de retorno da API de cancelamento. Antes, ao cancelar uma nota via API, o objeto de retorno possuía um atributo "message" onde o processo de atualização de notas cancelava se baseava. Agora, a API de cancelamento está retornando a nf no objeto e código de status 202. Devido a isso as notas canceladas não estavam sendo registradas adequadamente.

Screenshot from 2024-04-27 21-37-02

Melhoria no tratamento de erros e registro de status do fluxo

Foi adicionado o registro do valor de flowStatus dos retornos do webhook, garantindo que em cenários de falha ou problemas, a informação deste atributo esteja registrada corretamente para solução de problemas. Com isso será possível analisar as mensagens de retorno de forma mais eficiente e também utilizar seus valores para processamento nas rotinas de mensagens de retorno implementadas nestas atualizações.

image

Também foi padronizado os identificadores e adicionado novos registros de log para permitir uma melhor depuração, tanto do retorno do webhook quanto em rotinas internas do módulo.

NOTA: A mensagem ApiNoResponse é uma mensagem interna utilizada para identificar quando uma ação de cancelamento não retornou o devido status pela nota já se encontrar cancelada na API ou tiver sua emissão não concluída e o usuário tenta cancelar da mesma forma.

Adicionado opção de atualização da nota

Foi adicionado na interface do administrador uma nova opção que permite a atualização do status da nota de forma manual. Com isso, é possível buscar as informações diretamente na API para refletir estas informações no WHMCS.
Este recurso é útil em casos onde as informações do status da nota não foram sincronizados com o módulo.

image

Tratamento de mensagens do callback e exibição ao usuário

Foi incluída a mensagem do fluxo de emissão existente na resposta do webhook na interface do usuário para permitir maior clareza em relação ao status do processo. Agora, caso o fluxo apresente um problema, a mensagem com os detalhes do motivo será exibida junto às informações da nota.

Com isso, será possível compreender melhor o motivo da falha, além de permitir a exibição de condições como quando o prestador possuir pendências junto a prefeitura como o caso de notificações pendentes de ciência no DTE que podem impedir a emissão das notas.

Além disso, foram realizadas alterações na interface do usuário para melhorar a visualização de informações.

msg-domicilio-dte

msg-flow-status-invoice

Screenshot from 2024-04-27 21-35-05

NOTA: está sendo utilizada a coluna issue_note_conditions já existente na tabela mod_nfeio_si_serviceinvoices para armazenar a mensagem do fluxo, evitando assim a criação de uma nova coluna uma vez que a mesma não está sendo mais utilizada pelas rotinas do módulo.

Adicionado classe de validações para CPF e CNPJ

Foi incluída uma nova classe de auxílio Validations no módulo NFEioServiceInvoices. Essa classe contém métodos para validar CPFs e CNPJs com base no algoritmo de validação, conforme regras de verificação, ao invés da definição de validade de documento pelo tamanho de caracteres, garantindo a integridade dos dados tratados.

Agora quando o número de documento não for válido, seja um CPF ou CNPJ, o processo de emissão da nota será encerrado e uma mensagem com o motivo será mostrado ao usuário, além de um registro detalhado no log do módulo quando em modo depuração.

Screenshot of WHMCS - NFE io NFSe (1)

Screenshot of WHMCS - System Module Debug Log

Adicionado validação e manipulação de webhook (hmac)

Foi adicionado um novo método de validação de webhook na classe de validação e uma nova manipulação de webhook no arquivo callback. Agora, é possível verificar a assinatura do webhook (HMAC) e certificar-se de que é de uma fonte confiável antes de processá-lo.

Também foi melhorado o retorno de erros e códigos de respostas para as chamadas da API ao callback, com isso é possível permitir que a API realize novas tentativas de envio em casos de impossibilidade do processamento na primeira chamada, evitando que atualizações de informações no módulo não sejam prejudicadas por qualquer impossibilidade momentânea do módulo em escutar os retornos.

Corrigido problema no registro de timestamp das informações no banco de dados

Foi corrigido um problema na definicao do tipo de valor padrao para os campo de created_at e updated_at nas tabelas do módulo. As informações nao estavam sendo registradas devidamente por algumas definicoes manuais de data de rotinas legadas e também devido a falta de uma definicao de valores padroes para estas colunas do tipo timestamp que poderia gerar uma atribuição equivocada de valores nestes campos.

Detalhes da análise e correcao podem ser encontradas na questao 156 #156

andrekutianski and others added 21 commits April 10, 2024 18:36
…55

O commit inclui atualizações nas chamadas de registro para fornecer informações mais precisas sobre o comportamento do aplicativo. Também melhora o tratamento de erros em vários locais para tornar o aplicativo mais robusto e mais fácil de depurar quando algo dá errado. As alterações de registro garantem que cenários de falha importantes sejam registrados corretamente para solução de problemas futuros.
Essa atualização inclui uma nova classe de auxílio `Validations` no módulo `NFEioServiceInvoices`. Essa classe contém métodos para validar CPFs e CNPJs, conforme regras de verificação do Brasil, garantindo a integridade dos dados tratados em nossos serviços.
O código foi refatorado na função gnfe_customer para melhorar as validações de CPF e CNPJ. Foram adicionadas novas condições de validação de CPF e CNPJ utilizando um novo helper de validações. Foi reformulado o retorno dos dados de CPF e CNPJ validados, adicionando o nome e tipo de documento conforme a validação. Melhorias extras também foram implementadas para validar e lidar com a inscrição municipal do cliente.
As modificações implementadas visam melhorar o manejo de erros ao emitir notas fiscais. Agora, quando os dados do cliente retornarem algum erro, o status da NF será atualizado e a emissão será interrompida para evitar inconsistências. Além disso, o código de tratamento do CEP e do nome do cliente foi refinado para aumentar a precisão e a robustez da operação.

ref: #55
Esta atualização refatora a manipulação do status da nota quando é realizada cancelamento para atender a estrutura atual de retorno da API de cancelamento. Também a função updateLocalNfeStatus foi atualizada para aceitar um parâmetro adicional para o status do fluxo. Além disso, foi removido trechos de codigos comentados.
Foi adicionado um novo método de validação de webhook na classe de validação e uma nova manipulação de webhook no arquivo callback. Agora, é possível verificar a assinatura do webhook e certificar-se de que é de uma fonte confiável antes de processá-lo. Também foi melhorado o tratamento de erros e códigos de respostas.
Foram implementados dois novos métodos no repositório ServiceInvoices: `updateNfStatusByExternalId` e `updateNfStatusByNfeId`. Esses métodos permitem atualizar o status e o flow status de uma Nota Fiscal, seja pelo ID externo da mesma ou pelo seu próprio ID. No caso de erro, registra-se um log detalhado. Estes novos métodos visam substituir as operações no banco de dados realizada por funções legadas.
Os métodos `updateLocalNfeStatus` e `updateLocalNfeStatusByExternalId` foram atualizados para melhorar o controle de erros e a consistência do código. Foram adicionados tratamentos de exceções e logs para rastrear operações. Além disso, o tipo de retorno foi ajustado para booleano a fim de garantir uma melhor compreensão do status da operação.
Este commit adiciona uma nova função no módulo para atualizar o status de uma nota fiscal. Agora é possível buscar o status mais recente de uma nota na API em caso de falha no sincronismo dessa informação. Também foi refatorado os botoes de acoes para exibir um modal de confirmação antes de realizar a ação.
Este commit implementa um workaround no arquivo callback.php que retorna um status code 200 quando a requisição contém uma query que começa com 'echo'. Essa solução visa atender a verificação do webhook.
Esta atualização modifica como as colunas de registro de data e hora de criação e atualização são manipuladas no módulo NFEioServiceInvoices. Agora, as colunas 'created_at' e 'updated_at' são gerenciadas automaticamente pelo banco de dados, evitando a necessidade de atualizá-las manualmente no código. Além disso, foi implementada uma migração para atualizar as colunas em questão nas tabelas existentes.

ref: #156
Este commit refatora o método de criação das colunas de timestamp, a lógica inicial utilizava modificadores não compativeis com a versao atual do Capsule utilizado pelo WHMCS.

ref: #156
WIP: corrige propriedades de colunas de timestamp
apos a alteracao dos nomes das colunas para timestamp restou atualizar a referencia em $fieldDeclaration.

ref: #156
Os campos 'created_at' e 'updated_at' foram removidos de buildItemsToTransmit como parte da refatoracao dos timestamps.

ref: #156
…do usuário

Inclui a mensagem do fluxo de emissão existente na resposta do webhook na interface do usuário para permitir maior clareza em relação ao status do processo. Agora, caso o fluxo apresente um problema, a mensagem com os detalhes do motivo será exibida junto às informações da nota. Com isso, será possível compreender melhor o motivo da falha, além de permitir a exibição de condições como quando o prestador possuir pendências junto a prefeitura como o caso de notificações pendentes de ciência no DTE que podem impedir a emissão das notas.

Além disso, foram realizadas alterações na interface do usuário para melhorar a visualização de informações.
adicionado exibicao de mensagem do fluxo na visualizacao da fatura.
@andrekutianski andrekutianski changed the title Novas funcionalidades e melhorias WIP: Novas funcionalidades e melhorias May 29, 2024
Este commit refatora as propriedades das colunas de timestamp para o controle manual dos valores. Isso foi necessario para garantir interoperabilidade entre bancos em MariaDB e MySQL devido as diferentes formas na tratativa do valor para timestamps, o que poderia levar a inconsistencias do registro dependendo das definicoes de fuso horario do banco e PHP.

ref: #156
Este commit implementa uma verificacao estendida dos cabecalhos para verificar o valor da assinatura do webhook. Esta correcao foi necessaria devido a possibilidade de alguns servidores web ou load balancers reescreverem os cabecalhos e podendo levar a falha na validacao.
Este commit altera o comportamento das acoes de cancelamento e reemissao da nota na visualizacao da fatura para prevenir a re-submissao da acao quando administrador tentar atualizar a pagina apos envio do POST com o comando.

ref: #160
@andrekutianski andrekutianski self-assigned this Jun 11, 2024
@luiznfeio luiznfeio merged commit 020540e into main Jun 13, 2024
0 of 8 checks passed
@luiznfeio luiznfeio deleted the develop branch June 13, 2024 15:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants