From b0181b6f1f47570a53703a8b9b9fa81cacbba6b0 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Fri, 28 Aug 2026 10:23:34 -0300 Subject: [PATCH] Nova tela de Qualidade - NCs --- CLAUDE.md | 13 +- config/urls.py | 1 + .../acoes/acoes_27082026.xls | 11215 ++++++++++++++++ .../acoes/acoes_27082026_85afN4i.xls | 11215 ++++++++++++++++ .../acoes/acoes_27082026_PneJG9w.xls | 11215 ++++++++++++++++ .../acoes/acoes_27082026_YoiiMJa.xls | 11215 ++++++++++++++++ .../acoes/acoes_27082026_u5PN6hH.xls | 11215 ++++++++++++++++ .../ocorrencias/ocorrencias_pa_27082026.xlsx | Bin 0 -> 199232 bytes .../ocorrencias_pa_27082026_EUaULhJ.xlsx | Bin 0 -> 199232 bytes .../ocorrencias_pa_27082026_Vpau3Dr.xlsx | Bin 0 -> 199232 bytes .../ocorrencias_pa_27082026_ZfEFal9.xlsx | Bin 0 -> 199232 bytes .../ocorrencias_pa_27082026_z1fpXtG.xlsx | Bin 0 -> 199232 bytes plano.md | 22 + portal_api/catalogo.py | 12 + portal_api/management/commands/seed_portal.py | 7 + ...importacao_ncocorrencia_ncacao_and_more.py | 133 + .../0053_alter_ncocorrencia_assunto.py | 18 + portal_api/models.py | 217 + portal_api/nao_conformidades/CHANGELOG.md | 46 + portal_api/nao_conformidades/CLAUDE.md | 96 + portal_api/nao_conformidades/README.md | 19 + portal_api/nao_conformidades/__init__.py | 0 portal_api/nao_conformidades/classificacao.py | 66 + portal_api/nao_conformidades/diff.py | 79 + portal_api/nao_conformidades/leiaute_acoes.py | 90 + .../nao_conformidades/leiaute_ocorrencias.py | 209 + portal_api/nao_conformidades/modelos.py | 88 + portal_api/nao_conformidades/pipeline.py | 22 + portal_api/serializers.py | 152 + portal_api/urls.py | 10 + portal_api/views.py | 480 +- .../Relatorio_Qualidade_20260827.xlsx | Bin 0 -> 56290 bytes .../acoes_27082026.xls | 11215 ++++++++++++++++ .../analise-ncs.skill | Bin 0 -> 9922 bytes .../analise-ncs_SKILL.md | 134 + .../ocorrencias_pa_27082026.xlsx | Bin 0 -> 199232 bytes static/css/nao-conformidades.css | 505 + static/js/nao-conformidades.js | 778 ++ templates/acessos-gerais.html | 14 + templates/calendario-individual.html | 14 + templates/custo-contratacao.html | 14 + templates/importacao-plano-saude.html | 14 + templates/indicador-desempenho.html | 14 + templates/links-ferramentas.html | 14 + templates/nao-conformidades.html | 687 + templates/perfis-acesso.html | 14 + templates/portal.html | 14 + templates/ramais.html | 14 + templates/usuarios.html | 14 + 49 files changed, 71311 insertions(+), 3 deletions(-) create mode 100644 media/nao_conformidades/acoes/acoes_27082026.xls create mode 100644 media/nao_conformidades/acoes/acoes_27082026_85afN4i.xls create mode 100644 media/nao_conformidades/acoes/acoes_27082026_PneJG9w.xls create mode 100644 media/nao_conformidades/acoes/acoes_27082026_YoiiMJa.xls create mode 100644 media/nao_conformidades/acoes/acoes_27082026_u5PN6hH.xls create mode 100644 media/nao_conformidades/ocorrencias/ocorrencias_pa_27082026.xlsx create mode 100644 media/nao_conformidades/ocorrencias/ocorrencias_pa_27082026_EUaULhJ.xlsx create mode 100644 media/nao_conformidades/ocorrencias/ocorrencias_pa_27082026_Vpau3Dr.xlsx create mode 100644 media/nao_conformidades/ocorrencias/ocorrencias_pa_27082026_ZfEFal9.xlsx create mode 100644 media/nao_conformidades/ocorrencias/ocorrencias_pa_27082026_z1fpXtG.xlsx create mode 100644 portal_api/migrations/0052_naoconformidadeimportacao_ncocorrencia_ncacao_and_more.py create mode 100644 portal_api/migrations/0053_alter_ncocorrencia_assunto.py create mode 100644 portal_api/nao_conformidades/CHANGELOG.md create mode 100644 portal_api/nao_conformidades/CLAUDE.md create mode 100644 portal_api/nao_conformidades/README.md create mode 100644 portal_api/nao_conformidades/__init__.py create mode 100644 portal_api/nao_conformidades/classificacao.py create mode 100644 portal_api/nao_conformidades/diff.py create mode 100644 portal_api/nao_conformidades/leiaute_acoes.py create mode 100644 portal_api/nao_conformidades/leiaute_ocorrencias.py create mode 100644 portal_api/nao_conformidades/modelos.py create mode 100644 portal_api/nao_conformidades/pipeline.py create mode 100644 projects/Controladoria - Analise NCs/Relatorio_Qualidade_20260827.xlsx create mode 100644 projects/Controladoria - Analise NCs/acoes_27082026.xls create mode 100644 projects/Controladoria - Analise NCs/analise-ncs.skill create mode 100644 projects/Controladoria - Analise NCs/analise-ncs_SKILL.md create mode 100644 projects/Controladoria - Analise NCs/ocorrencias_pa_27082026.xlsx create mode 100644 static/css/nao-conformidades.css create mode 100644 static/js/nao-conformidades.js create mode 100644 templates/nao-conformidades.html diff --git a/CLAUDE.md b/CLAUDE.md index a260a90..c42d9c4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,6 +23,7 @@ Aplicações com pacote Python próprio (`CLAUDE.md` **carregado automaticamente | Importação de Plano de Saúde | `portal_api/planos_saude/` — `CLAUDE.md` (técnico), `README.md`, `CHANGELOG.md` | | Indicador de Desempenho | `portal_api/indicadores/` — `CLAUDE.md` (técnico), `README.md`, `CHANGELOG.md` | | 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` | 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): @@ -112,7 +113,7 @@ Duas identidades visuais coexistem **de propósito** hoje: o logo cursivo "D De ### Backend serve o frontend (mesma origem) -`config/urls.py` registra `path("api/", include("portal_api.urls"))` e, para cada página HTML do frontend (`index.html`, `portal.html`, `perfis-acesso.html`, `usuarios.html`, `calendario-individual.html`, `links-ferramentas.html`, `acessos-gerais.html`, `ramais.html`), uma rota `TemplateView` que resolve o arquivo em `templates/`. 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 página HTML do frontend (`index.html`, `portal.html`, `perfis-acesso.html`, `usuarios.html`, `calendario-individual.html`, `links-ferramentas.html`, `acessos-gerais.html`, `ramais.html`, `importacao-plano-saude.html`, `custo-contratacao.html`, `indicador-desempenho.html`, `nao-conformidades.html`), uma rota `TemplateView` que resolve o arquivo em `templates/`. 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`). @@ -219,6 +220,7 @@ Um único app, `portal_api/`: | `importacao-plano-saude.html` | Ferramenta de Utilitários: histórico + cadastro de regras de custeio por empresa (separado da execução) + nova importação (upload, só aplica uma regra já cadastrada) + revisão/geração do arquivo de lançamento de plano de saúde (ver `portal_api/planos_saude/CLAUDE.md`). | | `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`). | 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/perfis-acesso.html b/templates/perfis-acesso.html index dfc1811..c301b9a 100644 --- a/templates/perfis-acesso.html +++ b/templates/perfis-acesso.html @@ -113,6 +113,20 @@ diff --git a/templates/portal.html b/templates/portal.html index 1702972..6039ae7 100644 --- a/templates/portal.html +++ b/templates/portal.html @@ -115,6 +115,20 @@ diff --git a/templates/ramais.html b/templates/ramais.html index c6c603b..55b78c6 100644 --- a/templates/ramais.html +++ b/templates/ramais.html @@ -114,6 +114,20 @@ diff --git a/templates/usuarios.html b/templates/usuarios.html index d13d786..b5fbd4d 100644 --- a/templates/usuarios.html +++ b/templates/usuarios.html @@ -113,6 +113,20 @@