diff --git a/.claude/settings.json b/.claude/settings.json index 084e609..ae51932 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -98,7 +98,25 @@ "Bash(sed -i 's#/api/apuracoes-contabeis/26/#/api/contabil-apuracoes/26/#' \"C:\\\\Users\\\\Depaula\\\\AppData\\\\Local\\\\Temp\\\\claude\\\\c--Users-Depaula-Documents-Portal\\\\cf4a6caf-9798-42a6-bbc8-a8ffbb3debf6\\\\scratchpad\\\\pid_test_iripara3.py\")", "Bash(PYTHONPATH=\"C:\\\\Users\\\\Depaula\\\\Documents\\\\Portal\" .venv/Scripts/python.exe \"C:\\\\Users\\\\Depaula\\\\AppData\\\\Local\\\\Temp\\\\claude\\\\c--Users-Depaula-Documents-Portal\\\\cf4a6caf-9798-42a6-bbc8-a8ffbb3debf6\\\\scratchpad\\\\pid_test_iripara3.py\")", "Bash(awk '/class ContabilApuracao\\(List|Detail\\)Serializer/,/^class [A-Z]/' portal_api/serializers.py)", - "Bash(grep -n \"Colapsadas.size ? new Set\\(\\)\\\\|Colapsadas = dcContasColapsadas.size\\\\|Colapsadas.size$\" static/js/dashboard-contabil.js)" + "Bash(grep -n \"Colapsadas.size ? new Set\\(\\)\\\\|Colapsadas = dcContasColapsadas.size\\\\|Colapsadas.size$\" static/js/dashboard-contabil.js)", + "Bash(awk '/^## /{if\\(h!=\"\"\\){printf \"%7d bytes %s\\\\n\", b, h} h=$0; b=0} {b+=length\\($0\\)+1} END{printf \"%7d bytes %s\\\\n\", b, h}' CLAUDE.md)", + "Bash(awk '/^### /{if\\(h!=\"\"\\){printf \"%7d bytes %s\\\\n\", b, h} h=$0; b=0} /^## /{if\\(h!=\"\"\\){printf \"%7d bytes %s\\\\n\", b, h} h=\"[[ \"$0\" ]]\"; b=0} {b+=length\\($0\\)+1} END{printf \"%7d bytes %s\\\\n\", b, h}' CLAUDE.md)", + "Bash(grep -c \"^| \\\\`/api/\" CLAUDE.md)", + "Bash(grep -c \"^| \\\\`/api/indicadores\" CLAUDE.md)", + "Bash(grep -c \"^| \\\\`/api/contabil\" CLAUDE.md)", + "Bash(sed 's/.*\"//')", + "Bash(git check-ignore *)", + "Bash(awk '{printf \"%4d %6d bytes %.110s\\\\n\", NR, length\\($0\\), $0}' portal_api/indicadores/CLAUDE.md)", + "Bash(grep -noE \".{0,60}\\(10 shells|11 páginas|7 shells|8 páginas|as 3 páginas\\).{0,10}\" CLAUDE.md)", + "Bash(awk 'NR>0')", + "Bash(awk '/^### API \\\\\\(sessão/,/^### Frontend consumindo/' CLAUDE.md)", + "Bash(grep -n \"^| \\\\`/api/\")", + "Bash(grep -oE \"^\\\\| \\\\`/api/[a-z-]+\")", + "Bash(awk '/^## /{if\\(h!=\"\"\\){printf \"%7d %s\\\\n\", b, h} h=$0; b=0} {b+=length\\($0\\)+1} END{printf \"%7d %s\\\\n\", b, h}' CLAUDE.md)", + "Bash(grep -vE \"\\\\.md$\")", + "Bash(grep \"\\\\.md$\")", + "Bash(xargs -n1 basename)", + "Bash(.venv/Scripts/python.exe -c \"import ast,sys; [ast.parse\\(open\\(f,encoding='utf-8'\\).read\\(\\)\\) for f in ['portal_api/views.py','portal_api/models.py']]; print\\(' .py intactos'\\)\")" ] } } diff --git a/CLAUDE.md b/CLAUDE.md index dc6ef24..4a4723e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,7 +14,9 @@ Até uma rodada anterior, todo o estado (sessão, usuários, perfis de acesso, f Este arquivo cobre o que é **transversal** ao Portal (arquitetura, modelo de permissões, API, CSS, animações). A partir de 2026-08-26, a documentação detalhada de cada aplicação foi movida pra fora daqui, pra reduzir conflito de edição quando mais de uma pessoa mexe em aplicações diferentes ao mesmo tempo. Ver `prd.md` pra visão de produto (o quê/pra quem), `README.md` na raiz pro mapa de todas as aplicações, e `plano.md` pro histórico de decisões **estruturais/transversais** (o histórico específico de cada aplicação vive no `CHANGELOG.md` dela, ver abaixo). -Cada aplicação tem uma pasta própria com (a) o detalhamento técnico do estado atual, (b) um `README.md` (resumo enxuto — o quê/pra quem, sem o detalhe técnico) e (c) um `CHANGELOG.md` (histórico rodada a rodada, extraído de `plano.md`, mesma numeração de rodada usada lá): +Cada aplicação tem uma pasta própria com (a) o detalhamento técnico do estado atual, (b) um `README.md` (resumo enxuto — o quê/pra quem, sem o detalhe técnico) e (c) um `CHANGELOG.md` (histórico rodada a rodada, extraído de `plano.md`). + +**A numeração de rodada não é global**: cada aplicação conta as próprias, e o mesmo número designa trabalhos diferentes em arquivos diferentes (ex.: "rodada 93" é uma coisa em `plano.md` e outra em `portal_api/dashboard_contabil/CHANGELOG.md`). Ao citar uma rodada, **sempre nomear o arquivo** — "ver rodada 45 em `portal_api/indicadores/CHANGELOG.md`", nunca só o número. Ver o topo de `plano.md` para o detalhamento. Aplicações com pacote Python próprio (`CLAUDE.md` **carregado automaticamente** pelo Claude Code ao trabalhar dentro da pasta): @@ -37,6 +39,9 @@ Aplicações sem pacote Python dedicado (código ainda em `portal_api/models.py` | Perfis de Acesso / Usuários (telas administrativas, Liderança, inativação) | `docs/perfis-usuarios/` — `perfis-usuarios.md` (técnico), `README.md`, `CHANGELOG.md` | | Solicitações | `docs/solicitacoes/` — `solicitacoes.md` (técnico), `README.md`, `CHANGELOG.md` | | Temas Sazonais (marca P.I.D. sazonal — hoje só Halloween) | `docs/temas-sazonais/` — `temas-sazonais.md` (técnico), `README.md`, `CHANGELOG.md` | +| Identidade visual (logos, marca P.I.D. na UI, animações genéricas, intro pós-login) — não é aplicação do menu, é camada transversal | `docs/identidade-visual/` — `identidade-visual.md` (técnico), `README.md`, `CHANGELOG.md` | + +**Cada endpoint mora na doc da sua aplicação.** A tabela de API mais abaixo tem só os transversais (auth, `/api/me/`, catálogo, perfis, usuários, favoritos, widgets, compromissos, notificações). Ao criar uma aplicação nova, documentar os endpoints dela na pasta dela. ## Como rodar / testar localmente @@ -76,7 +81,7 @@ Portal/ ├── .env ├── config/ # settings.py, urls.py, wsgi.py, asgi.py — pacote de configuração do projeto ├── portal_api/ # único app Django (models, serializers, views, admin, migrations, seed) -├── templates/ # as 8 páginas HTML (TEMPLATES[0]["DIRS"] em settings.py aponta pra cá) +├── templates/ # as 15 páginas HTML (13 shells + index.html + o relatório do Relatório Contábil) (TEMPLATES[0]["DIRS"] em settings.py aponta pra cá) ├── static/ # css/, js/, img/ — STATICFILES_DIRS em settings.py aponta pra cá ├── media/ # upload de usuário (hoje só ícones de LinkFerramenta) — MEDIA_ROOT em settings.py ├── CLAUDE.md @@ -85,51 +90,41 @@ Portal/ ### Logos em `static/img/` -Duas identidades visuais coexistem **de propósito** hoje: o logo cursivo "D De Paula Contadores" (usado só nos documentos/PDFs que a aplicação gera, ver abaixo) e a marca nova "P.I.D." (`.svg`, ver `pid-marca-leiame.md` em `C:\Users\Depaula\Documents\Projetos\LOGOS\pid-marca`), adotada no favicon, no login e na sidebar do Portal. **Essa separação é deliberada, não uma migração incompleta**: um documento gerado pela aplicação (contrato, procuração, recibo do Indicador de Desempenho, PDF da Simulação de Custo de Contratação) é emitido como se o próprio escritório o tivesse gerado — carrega a identidade do escritório perante o cliente, não a identidade do Portal como ferramenta interna. A marca "P.I.D." é só pra UI do Portal em si. Não migrar o logo de um gerador de documento pra "P.I.D." (nem vice-versa numa tela do Portal) sem confirmar de novo com o usuário. +**Duas identidades visuais coexistem de propósito**: o logo cursivo "D De Paula Contadores" (`logo.png`/`logo-branco.png`/`logo-mono.png`), usado **só nos documentos e PDFs que a aplicação gera**, e a marca "P.I.D." (`pid-*.svg`), usada **só na UI do Portal** (favicon, login, sidebar). A separação é deliberada, não uma migração incompleta: um documento gerado (contrato, procuração, recibo do Indicador de Desempenho, PDF da Simulação de Custo, relatório do Relatório Contábil) é emitido como se o próprio escritório o tivesse gerado, e carrega a identidade dele perante o cliente. **Não migrar o logo de um gerador de documento para "P.I.D." (nem o contrário numa tela do Portal) sem confirmar com o usuário.** Ver `[[feedback_logos_documentos_vs_portal]]` na memória. -**Logo cursivo "D De Paula Contadores"** (D em degradê dourado/marrom + texto, PNG com fundo transparente) — não aparece em nenhum template HTML hoje, só nos PDFs gerados pela aplicação: - -- `logo.png` — original, texto **preto**. Serve como fonte pra gerar as outras variantes e é usada diretamente no recibo do Indicador de Desempenho (`indicadores/recibo.py`, `LOGO_PATH`, redimensionada/recomprimida em memória pra impressão — ver `portal_api/indicadores/CLAUDE.md`). -- `logo-branco.png` — usada no cabeçalho do PDF de Simulação de Custo de Contratação (`custo_contratacao/pdf.py`, banner marrom escuro, ver `portal_api/custo_contratacao/CLAUDE.md`) — até uma rodada anterior também era usada no `sidebar__brand` dos 10 shells, migrada pra marca "P.I.D." (ver abaixo; a UI do Portal e os documentos gerados usam fontes de logo independentes agora). Mesmo D colorido de `logo.png`, mas com o texto recolorido pra branco; gerada programaticamente a partir de `logo.png` (script Python com Pillow: qualquer pixel opaco quase-neutro/escuro — `max(r,g,b) < 70` e `spread(r,g,b) < 12` — virou branco; o D nunca entra nesse filtro porque mesmo na sombra mais escura do degradê ele mantém um matiz quente nitidamente não-neutro). Se o logo oficial mudar, regerar `logo-branco.png` a partir do novo `logo.png` com o mesmo filtro, não editar à mão. -- `logo-mono.png` — versão totalmente monocromática (D **e** texto em branco/cinza claro). Não usada em nenhum consumidor hoje; existe como variante alternativa (útil se algum dia precisar de um logo "chapado" sem o dourado do D). - -**Marca nova "P.I.D."**: - -- `pid-icone.svg` — ícone quadrado, variante pra **fundo claro** (corpo roxo escuro `#4B2E75`); chegou a ser usada no login quando `data-theme="light"`, mas o usuário pediu pra usar sempre a mesma logo nos dois temas — **não tem mais nenhum consumidor** hoje (mesma situação de `pid-favicon.svg`/`pid-logo-horizontal.svg` abaixo). -- `pid-icone-escuro.svg` — ícone quadrado, variante pra **fundo escuro** (corpo roxo mais claro `#7B5BA8`, pra manter contraste); usada (a) no favicon (`` no `
` das 11 páginas) e (b) no login, **sempre**, nos dois temas — o card do login já é congelado escuro nos dois temas (ver "Card de login" abaixo), e agora o ícone também, pedido explícito do usuário ("deixe no tema claro a mesma logo usada no tema escuro"; antes alternava com `pid-icone.svg` conforme `data-theme`, mecanismo removido — ver "Ícone do login é clicável" abaixo). O ícone da sidebar (expandida e colapsada, 10 shells) e o do card de login usam o **mesmo desenho/cores** desse arquivo, mas como markup `