diff --git a/.claude/settings.json b/.claude/settings.json index 8545763..1293cfc 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -151,7 +151,9 @@ "PowerShell(& \"C:\\\\Users\\\\Depaula\\\\Documents\\\\Portal\\\\.venv\\\\Scripts\\\\python.exe\" manage.py makemigrations portal_api --name contabil_ordering_determinista --dry-run -v 2)", "PowerShell(& \"C:\\\\Users\\\\Depaula\\\\Documents\\\\Portal\\\\.venv\\\\Scripts\\\\python.exe\" manage.py makemigrations portal_api --name contabil_ordering_determinista)", "PowerShell(& \"C:\\\\Users\\\\Depaula\\\\Documents\\\\Portal\\\\.venv\\\\Scripts\\\\python.exe\" \"C:\\\\Users\\\\Depaula\\\\AppData\\\\Local\\\\Temp\\\\claude\\\\c--Users-Depaula-Documents-Portal\\\\33b72ffc-a7b3-4b7e-8afe-bb65121e9a85\\\\scratchpad\\\\testa_removidos.py\")", - "PowerShell(.venv\\\\Scripts\\\\python.exe manage.py migrate portal_api 0080)" + "PowerShell(.venv\\\\Scripts\\\\python.exe manage.py migrate portal_api 0080)", + "Bash(file *)", + "Bash(iconv -f latin1 -t utf-8)" ], "additionalDirectories": [ "C:\\Users\\Depaula\\AppData\\Local\\Temp\\claude\\c--Users-Depaula-Documents-Portal\\3ea0ee22-e5fd-4030-98b1-ee2e71c16ce0\\scratchpad\\halloween-design", diff --git a/CLAUDE.md b/CLAUDE.md index 4e028a3..2994d45 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -27,6 +27,7 @@ Aplicações com pacote Python próprio (`CLAUDE.md` **carregado automaticamente | Simulação de Custo de Contratação | `portal_api/custo_contratacao/` — `CLAUDE.md` (técnico), `README.md`, `CHANGELOG.md` | | Não Conformidades | `portal_api/nao_conformidades/` — `CLAUDE.md` (técnico), `README.md`, `CHANGELOG.md` | | Relatório Contábil | `portal_api/dashboard_contabil/` — `CLAUDE.md` (técnico), `README.md`, `CHANGELOG.md` | +| Conciliação de Fornecedores | `portal_api/conciliacao_fornecedores/` — `CLAUDE.md` (técnico), `README.md`, `CHANGELOG.md` | Aplicações sem pacote Python dedicado (código ainda em `portal_api/models.py`/`views.py`/`serializers.py` — os arquivos em `docs//` **não** são carregados automaticamente, ler manualmente): @@ -96,7 +97,7 @@ Ver `docs/identidade-visual/identidade-visual.md` para o inventário de cada arq ### Backend serve o frontend (mesma origem) -`config/urls.py` registra `path("api/", include("portal_api.urls"))` e, para cada uma das **14 páginas HTML** do frontend (`index.html` mais os 13 shells — ver a tabela em "Páginas" abaixo), uma rota `TemplateView` que resolve o arquivo em `templates/`. O 15º template, `dashboard-contabil-relatorio.html`, não tem rota própria: é renderizado por uma view do Relatório Contábil, não navegável pela URL. Os estáticos (`static/css`, `static/js`, `static/img`) são servidos por `django.contrib.staticfiles` automaticamente em `DEBUG` (via `STATICFILES_DIRS`) — não há mais nenhum `re_path`/`static_serve` manual em `urls.py`. Cada template usa `{% load static %}` + `{% static 'css/tokens.css' %}` (nunca um caminho hardcoded tipo `assets/css/...`, que não existe mais). Essa escolha (Django servindo o próprio frontend) existe para evitar CORS/cookie cross-origin: autenticação é por **sessão/cookie do Django**, então frontend e API precisam estar na mesma origem. +`config/urls.py` registra `path("api/", include("portal_api.urls"))` e, para cada uma das **15 páginas HTML** do frontend (`index.html` mais os 14 shells — ver a tabela em "Páginas" abaixo), uma rota `TemplateView` que resolve o arquivo em `templates/`. O 15º template, `dashboard-contabil-relatorio.html`, não tem rota própria: é renderizado por uma view do Relatório Contábil, não navegável pela URL. Os estáticos (`static/css`, `static/js`, `static/img`) são servidos por `django.contrib.staticfiles` automaticamente em `DEBUG` (via `STATICFILES_DIRS`) — não há mais nenhum `re_path`/`static_serve` manual em `urls.py`. Cada template usa `{% load static %}` + `{% static 'css/tokens.css' %}` (nunca um caminho hardcoded tipo `assets/css/...`, que não existe mais). Essa escolha (Django servindo o próprio frontend) existe para evitar CORS/cookie cross-origin: autenticação é por **sessão/cookie do Django**, então frontend e API precisam estar na mesma origem. Em produção, rodar `python manage.py collectstatic` (junta tudo em `STATIC_ROOT = BASE_DIR / "staticfiles"`) e servir esse diretório via whitenoise/nginx — `django.contrib.staticfiles` só serve automaticamente quando `DEBUG=True`. Uploads de usuário (ícones de `LinkFerramenta`) são um mecanismo separado: `MEDIA_URL`/`MEDIA_ROOT` em `settings.py`, servidos por `config/urls.py` via `static()` só quando `DEBUG=True` (em produção, servir `media/` também por whitenoise/nginx, igual ao `STATIC_ROOT`). @@ -124,6 +125,7 @@ Pacotes Python puros (sem ORM), um por ferramenta — cada um com seu próprio ` | `custo_contratacao/` | "Simulação de Custo de Contratação" (Geradoc) — `tabelas.py` (faixas de INSS/IRRF), `calculo.py`, `pdf.py` via `reportlab`. | | `indicadores/` | "Indicador de Desempenho" (Geradoc) — `tipos.py`, `leiaute.py` (`openpyxl`), `pipeline.py`, `entregas.py`, `calculo.py`, `recibo.py` (PDF via `reportlab`), `departamentos.py`. | | `nao_conformidades/` | "Não Conformidades" (Relatórios > Qualidade) — leiautes dos exports do Sigsistem, `diff.py` (reabertura automática), `classificacao.py`, `pipeline.py`. | +| `conciliacao_fornecedores/` | "Conciliação de Fornecedores" (Utilitários) — `parser.py` (razão do Questor em XLSX/CSV), `motor.py` (vínculos automáticos débito × crédito), `alertas.py` (situação/alertas recalculados a cada leitura), `exportacao.py` (XLSX). | | `dashboard_contabil/` | "Relatório Contábil" (Relatórios > Contabilidade) — `parser.py` (extração do PDF), `regras.py` (motor de auditoria), `formula.py` (avaliador de fórmula por `ast`), `indicadores.py`, `chaves.py` (chave natural de conta/linha, compartilhada por sincronização, observações e relatório), `exportacao.py` (XLSX), `resumo_pdf.py`. | ### API (sessão + CSRF, não token) @@ -179,6 +181,7 @@ Pacotes Python puros (sem ORM), um por ferramenta — cada um com seu próprio ` | `custo-contratacao.html` | Ferramenta de Geradoc: formulário de simulação de custo de contratação (Empregado CLT) + painel colapsável de parâmetros fiscais, gera um PDF (ver `portal_api/custo_contratacao/CLAUDE.md`). | | `indicador-desempenho.html` | Ferramenta de Geradoc: histórico de apurações + nova apuração (upload das 2 planilhas) + cadastro de critérios/percentuais + revisão/geração dos recibos em PDF do Indicador de Desempenho do Fiscontábil (ver `portal_api/indicadores/CLAUDE.md`). | | `nao-conformidades.html` | Aplicação de Relatórios > Qualidade: gestão contínua das ocorrências/ações do Sigsistem, com dashboard e status interno de tratativa da Qualidade (ver `portal_api/nao_conformidades/CLAUDE.md`). | +| `conciliacao-fornecedores.html` | Ferramenta de Utilitários: histórico + nova conciliação (código da empresa com nome buscado no Questor + razão de fornecedores .xlsx/.csv) + detalhe com cards de alerta e tabela de fornecedores expansível, vínculo manual, validação e exportação XLSX (ver `portal_api/conciliacao_fornecedores/CLAUDE.md`). | | `dashboard-contabil.html` | Aplicação de Relatórios > Contabilidade ("Relatório Contábil" na UI): histórico de análises + nova análise (upload do PDF de Balancete + DRE) + revisão de achados de auditoria (com observações por conta) + botão "Gerar Relatório" (relatório HTML autocontido, ver `portal_api/dashboard_contabil/CLAUDE.md`). | O item "Calendário De Paula" no menu **não é uma página local** — é um `` (continua favoritável, já que ainda é um `` — ver `docs/favoritos/favoritos.md`) cujo clique é interceptado em `sidebar.js` (`PID_CALENDARIO_DEPAULA_URL`) pra abrir `https://depaula-tvcorporativa.lovable.app/calendario` num modal com ` + + + + + + + + + + + + + + + + + + + diff --git a/templates/custo-contratacao.html b/templates/custo-contratacao.html index 42e8dd7..ffc4bee 100644 --- a/templates/custo-contratacao.html +++ b/templates/custo-contratacao.html @@ -165,6 +165,7 @@ diff --git a/templates/dashboard-contabil.html b/templates/dashboard-contabil.html index 0f12286..35a6395 100644 --- a/templates/dashboard-contabil.html +++ b/templates/dashboard-contabil.html @@ -166,6 +166,7 @@ diff --git a/templates/importacao-plano-saude-de-paula.html b/templates/importacao-plano-saude-de-paula.html index 5a2c9ee..598151a 100644 --- a/templates/importacao-plano-saude-de-paula.html +++ b/templates/importacao-plano-saude-de-paula.html @@ -166,6 +166,7 @@ diff --git a/templates/importacao-plano-saude.html b/templates/importacao-plano-saude.html index ea5807d..0b16d1e 100644 --- a/templates/importacao-plano-saude.html +++ b/templates/importacao-plano-saude.html @@ -166,6 +166,7 @@ diff --git a/templates/indicador-desempenho.html b/templates/indicador-desempenho.html index ca73ac0..677385a 100644 --- a/templates/indicador-desempenho.html +++ b/templates/indicador-desempenho.html @@ -166,6 +166,7 @@ diff --git a/templates/links-ferramentas.html b/templates/links-ferramentas.html index a0bce92..25313fa 100644 --- a/templates/links-ferramentas.html +++ b/templates/links-ferramentas.html @@ -166,6 +166,7 @@ diff --git a/templates/nao-conformidades.html b/templates/nao-conformidades.html index 03bd175..64ba7ef 100644 --- a/templates/nao-conformidades.html +++ b/templates/nao-conformidades.html @@ -166,6 +166,7 @@ diff --git a/templates/perfis-acesso.html b/templates/perfis-acesso.html index 47185cb..67ac410 100644 --- a/templates/perfis-acesso.html +++ b/templates/perfis-acesso.html @@ -165,6 +165,7 @@ diff --git a/templates/portal.html b/templates/portal.html index 43bdbb0..623844b 100644 --- a/templates/portal.html +++ b/templates/portal.html @@ -169,6 +169,7 @@ diff --git a/templates/ramais.html b/templates/ramais.html index 1beaebf..6ff4284 100644 --- a/templates/ramais.html +++ b/templates/ramais.html @@ -166,6 +166,7 @@ diff --git a/templates/usuarios.html b/templates/usuarios.html index 3ad8383..563f63a 100644 --- a/templates/usuarios.html +++ b/templates/usuarios.html @@ -165,6 +165,7 @@