GIAST¶
- Slug:
giast - Grupo: Declaracoes
- API Base:
/api/giast - Classificacao operacional:
vps-compatible
O que esta ferramenta faz¶
Ferramenta para gerar o TXT da declaracao GIA-ST no layout informado (api/layouts/giast-layout.json).
Fluxo principal: - cadastro e manutencao de declarantes; - cadastro de inscricoes estaduais por UF; - preenchimento de UF + vencimento + valor DIFAL + valor FCP + devolucoes/anulacoes + pagamentos antecipados; - geracao do TXT apenas com registros A0 e A4 (EC 87/15), sem gerar A1/A2/A3.
Como acessar¶
- Pagina:
/giast - Permissao:
tool:giastoutool:*
Endpoints Node¶
GET /api/giast/healthGET /api/giast/declarantesGET /api/giast/declarantes/:idPOST /api/giast/declarantes(CSRF)PUT /api/giast/declarantes/:id(CSRF)DELETE /api/giast/declarantes/:id(CSRF)POST /api/giast/generate-txt(CSRF)
Endpoint Python¶
POST /api/giast/gerar
Arquivo principal do core:
- api/giast_core.py
Banco de dados¶
Tabelas criadas automaticamente ao usar a ferramenta:
- giast_declarants
- giast_declarant_state_regs
Observacoes de seguranca¶
- Mutacoes exigem
x-csrf-token. - Pagina segue rota limpa (
/giast) sem acesso direto via.html. - Auditoria registra criacao, edicao, exclusao e geracao de arquivo.
Correcoes registradas¶
Leitura do layout JSON falhando no Python¶
- Sintoma: erro
Unexpected UTF-8 BOMao gerar TXT. - Causa provavel: arquivo
api/layouts/giast-layout.jsonsalvo com BOM UTF-8. - Solucao aplicada: leitura do layout ajustada para
encoding=\"utf-8-sig\"emapi/giast_core.py.
Dropdown de declarante e campos desalinhados na tela¶
- Sintoma: menu suspenso do declarante ficava encoberto e labels/campos apareciam centralizados.
- Causa provavel: estilos globais de
.nfe-input-file-label(centralizados) aplicados sem override especifico da pagina. - Solucao aplicada: overrides locais em
public/styles.csspara alinhamento a esquerda,z-indexno seletor eoverflowvisivel no card.
Fluxo visual da tela fora do esperado¶
- Sintoma: formulario de cadastro aparecia sempre, tabela de geracao aparecia sem declarante ativo e datas padrao divergiam do desejado.
- Causa provavel: comportamento inicial sem controle de estado por modo (
novoxselecionado) e sem defaults de periodo/vencimento ajustados. - Solucao aplicada: em
public/js/giast.js, formulario de cadastro passa a abrir apenas no botao Novo declarante, secao de geracao fica oculta ate haver declarante selecionado, periodo padrao usa mes anterior e vencimento padrao usa dia 09 do mes atual.
Navegacao por setas no teclado¶
- Sintoma: nao era possivel navegar entre campos usando setas.
- Causa provavel: ausenca de handler de navegacao por teclado no formulario/tabelas.
- Solucao aplicada: adicionado controlador de navegação por setas em
public/js/giast.js, com deslocamento por linha/coluna nas tabelas e por sequencia de campos na tela.
Dropdown de declarante cortado e acoes fora do layout esperado¶
- Sintoma: menu suspenso do declarante ficava limitado ao quadro, botao Novo declarante quebrava para baixo e acoes do topo nao seguiam o fluxo esperado.
- Causa provavel: combinacao de altura/espacamento do container do select com alinhamento antigo dos botoes e referencias de JS para botoes removidos.
- Solucao aplicada: ajuste do topo em
public/styles.css(select com altura de botao,overflow/z-indexcorretos e acoes alinhadas a direita) e revisao de fluxo empublic/js/giast.js(remocao do atualizar lista, inclusao de Editar declarante e exclusao movida para o painel de edicao).
Dropdown do declarante ainda limitado por containers da pagina¶
- Sintoma: menu de selecao de declarante continuava sendo recortado por limites de cards/secoes.
- Causa provavel: comportamento do dropdown nativo do
selectdependente da pilha/containers da pagina. - Solucao aplicada: substituido por dropdown em modo portal no front (
public/js/giast.js+public/styles.css), com renderizacao emdocument.body,position: fixedez-indexelevado para sobrepor qualquer camada da tela.
Botao salvar declarante parecia nao funcionar¶
- Sintoma: ao clicar em Salvar declarante, usuario nao via retorno e interpretava como falha de salvamento.
- Causa provavel: mensagens de status eram exibidas apenas na secao de geracao do TXT, que fica oculta durante o cadastro/edicao do declarante.
- Solucao aplicada: adicionada area de status no card de declarante (
public/giast.html) e unificacao da exibicao de mensagens empublic/js/giast.js, com estado visual de Salvando declarante... e bloqueio temporario do botao durante a requisicao.
Salvamento bloqueado por inconsistencias nas inscricoes estaduais¶
- Sintoma: em alguns cenarios o salvamento do declarante retornava erro durante a gravacao das inscricoes por UF.
- Causa provavel: falha na etapa de persistencia das inscricoes estaduais interrompendo a transacao inteira de cadastro/edicao.
- Solucao aplicada: ajuste no backend (
src/routes/tools/giast.routes.js) para persistenciabest-effortdas inscricoes estaduais comSAVEPOINT; o declarante passa a ser salvo mesmo se houver falha nas UFs, retornando apenas aviso para o front.
Editor de declarante com largura excessiva¶
- Sintoma: campos do bloco Editar declarante e a area de inscricoes estaduais ocupavam largura ampla demais.
- Causa provavel: grids do editor configurados para ocupar 100% da largura do card em duas colunas amplas e tabela linear de UFs.
- Solucao aplicada: ajustes de layout em
public/styles.csspara limitar largura do editor e transformar inscricoes estaduais em grade compacta com 3 UFs por linha; front atualizado empublic/js/giast.js+public/giast.html.
Espacamento horizontal entre containers no editor¶
- Sintoma: distancia horizontal entre colunas/containers no editor de declarante estava desalinhada com o esperado visual.
- Causa provavel:
column-gapreduzido nos grids de campos e inscricoes estaduais. - Solucao aplicada: ajuste de
column-gapempublic/styles.csspara16pxnos gridsgiast-declarant-gridegiast-ie-grid.
Valor FCP em branco bloqueando geracao¶
- Sintoma: ao deixar o campo de FCP vazio na grade de geracao, o sistema retornava
valor FCP invalido. - Causa provavel: validacao do front tratava campo vazio como invalido, em vez de assumir zero.
- Solucao aplicada: ajuste em
public/js/giast.jsesrc/services/giast.service.jspara considerar FCP vazio como0,00no payload e na validacao da API.
Registro A0 com tamanho rejeitado no importador¶
- Sintoma: importador retornava
Linha X: A0 deveria conter 865 ou 1031 caracteres, mas contém 844. - Causa provavel: divergencia entre JSON e manual v3.1 no trecho final do A0 (campos 827-865: codigo entrega reservado, quantidades dos anexos e repasse por outros contribuintes).
- Solucao aplicada: alinhamento do
api/layouts/giast-layout.jsoncom o manual e ajuste doapi/giast_core.pypara montar explicitamente esses campos, gerando A0 base com 865 caracteres no layout aceito pelo GIA-ST 3.
Totais EC 87/15 no A0 divergindo do somatorio do A4¶
- Sintoma: importador acusava divergencia entre
Total do ICMS Devido a UF de Destino/Total ICMS FCPdo A0 e a soma dos valores dos registros A4. - Causa provavel: bloco opcional EC 87/15 do A0 nao estava sendo preenchido com os totais quando havia A4 com valores.
- Solucao aplicada: ajuste em
api/giast_core.pypara gerar A0 com 1031 posicoes quando houver definicao do bloco EC 87/15 no layout e preencher os campos de totalizacao (posicoes finais) com os valores do proprio A4.
A0 cortado no caractere 865 e campos EC 87/15 incompletos¶
- Sintoma: importador sinalizava que a parte final do A0 (866-1031) nao estava sendo considerada corretamente e os totais do ICMS destino apareciam como
0,00. - Causa provavel: mapeamento incompleto entre front/Node/Python para os campos finais do EC 87/15 e regra de totalizacao do campo
total_icms_destinodivergente da validacao do GIA-ST 3. - Solucao aplicada: adicao dos campos
valueDevolutionsevaluePrepaymentsna grade e no payload ponta a ponta (public/giast.html,public/js/giast.js,src/services/giast.service.js,src/routes/tools/giast.routes.js,api/integra_api.py) e ajuste noapi/giast_core.pypara mantertotal_icms_destinoigual aovalueIcms(soma do A4), mantendo o A0 com 1031 posicoes quando o bloco EC 87/15 estiver definido.
Geracao sem anexos A1/A2/A3¶
- Sintoma: necessidade operacional de enviar arquivo contendo apenas registro principal e anexo EC 87/15.
- Causa provavel: fluxo anterior ainda montava A1, A2 e A3 zerados.
- Solucao aplicada: ajuste no
api/giast_core.pypara gerar somente A0 e A4, com contadores de anexos I/II/III no A0 preenchidos com zero.