No componente de auditoria, verifique a função que faz o insert na tabela auditorias. Certifique-se de que o campo empresa_id está a ser enviado como um UUID válido ou remova a obrigatoriedade deste campo no frontend para testarmos o salvamento."
Mapeamento de NIFs:
Onde diz EXTRAIR_DO_DOCUMENTO, precisamos que a IA (AI SDK) passe o valor extraído para o Supabase.
Ex: Se o documento é da Agrotwende, o NIF deveria aparecer ali automaticamente.
Agora vou verificar o AI SDK instalado e como a extracao de texto dos documentos esta estruturada para adicionar extrato de NIF via IA:
O AI SDK nao esta instalado. Vou instala-lo e criar uma funcao dedicada para extrair NIFs usando regex inteligente no texto do PDF (sem precisar de chamada AI externa quando o padrao e claro), e para casos complexos usar o AI SDK com generateObject. Vou tambem carregar o AI SDK skill:
Agora vou adicionar o AI SDK ao package.json e atualizar o audit.ts para extrair NIFs usando generateText com Output.object():
Agora atualizo o audit.ts — adiciono o import do AI SDK, a funcao extractNIFsFromText com regex inteligente e fallback para IA, e substituo os EXTRAIR_DO_DOCUMENTO pelo resultado real:
Agora adiciono a funcao extractNIFsFromText logo apos a funcao parseMonetaryValue:
Agora atualizo a funcao processAudit para extrair o texto dos ficheiros e chamar extractNIFsFromText, substituindo os EXTRAIR_DO_DOCUMENTO:
Agora substituo os EXTRAIR_DO_DOCUMENTO no payload de insercao e no retorno final pelos valores reais extraidos:
Fiz as seguintes alteracoes no audit.ts:
ai ^6.0.0) e importado com generateText + Output para extracao estruturada de dados.extractTextFromFile — extrai texto completo de PDFs (via pdf-parse) e imagens (via Tesseract), reutilizada tanto para SH como para NIFs.extractNIFsFromText — primeiro tenta regex para padroes de NIF angolano (10 digitos comecando por 5); se nao encontrar, usa generateText com Output.object() e o modelo gpt-4o-mini para analisar o texto e identificar o NIF importador/exportador automaticamente.nif_importador e nif_exportador agora usam os valores reais extraidos dos documentos em vez de EXTRAIR_DO_DOCUMENTO.O meu Supabase já tem a tabela pauta_aduaneira_2026. Atualmente, a IA extrai 'Chocapic' da fatura, mas não preenche o código SH. Altera o código para que, antes de finalizar a auditoria, o sistema faça uma busca: SELECT codigo_sh, taxa_direitos FROM pauta_aduaneira_2026 WHERE descricao ILIKE '%valor_extraido_pela_ia%'. Se encontrar, atualiza os campos de cálculo automaticamente.
Tenho o ficheiro completo. Agora vou adicionar uma funcao lookupByDescricao que faz o ILIKE na pauta, e chamar essa funcao quando o codigo SH nao for encontrado mas a IA extraiu uma descricao do produto (ex: "Chocapic").
Agora atualizo a secao de CONSULTA À PAUTA para usar fetchTaxRatesByDescricao como fallback quando o codigo SH e 0000.00:
Agora uso codigoSHFinal no insert e no retorno para garantir consistencia:
A logica de lookup por descricao esta agora integrada com 3 etapas sequenciais:
1806.32), faz SELECT ... WHERE codigo_sh = '1806.32' na pauta.0000.00 ou nao existir na pauta, a IA extrai o nome do produto do texto (ex: "Chocapic") e faz SELECT codigo_sh, taxa_direitos FROM pauta_aduaneira_2026 WHERE descricao ILIKE '%Chocapic%'.codigo_sh e atualizado automaticamente com o valor real da pauta, e o metodo fica registado como DESCRICAO_MATCH:Chocapic para rastreabilidade.Ajusta a função de processamento de auditoria para que ela seja orientada por dados do Supabase. O funcionamento deve ser:
Ao processar os itens da fatura, para cada item, realiza uma chamada ao Supabase na tabela pauta_aduaneira_2026.
O critério de busca deve ser o codigo_sh extraído ou, se ausente, uma busca textual pelo nome do produto.
Não assumes os valores de impostos do PDF como corretos. Substitui os cálculos da interface pelos valores reais das colunas taxa_ii e taxa_iva vindos do banco de dados.
No componente AuditResult, cria uma comparação visual:
Coluna 'Declarado': Valor extraído do DU.
Coluna 'Pauta AGT': Valor real vindo do Supabase.
Se houver diferença entre 'Declarado' e 'Pauta AGT', altera o status da auditoria para 'DIVERGENTE' e calcula o valor da multa estimada (Diferença de imposto + 10% de sanção)."
You can send messages while the preview loads