portal_publico/projects/Controladoria - Analise NCs/analise-ncs_SKILL.md

135 lines
7.6 KiB
Markdown

---
name: analise-ncs
description: >
Gera o Relatório de Qualidade ISO 9001 multi-abas da De Paula Contadores a partir do PAR de
arquivos exportados do Sigsistem: o .xlsx de OCORRÊNCIAS (dados estruturados) e o .xls de AÇÕES
(HTML, fonte dos relatos de acompanhamento). Use SEMPRE que o usuário anexar esses dois arquivos
(nomes típicos: "ocorrencias_pa_DDMMAAAA.xlsx" e "acoes_DDMMAAAA.xls" / "acoesDDMMAAAA.xls") e
pedir para "gerar o relatório", "rodar o relatório de qualidade", "analisar as ocorrências",
"fazer a análise da planilha", "formatar a planilha de ocorrências", ou mencionar ações em atraso,
acompanhamentos, NCs sem ação corretiva, ocorrências sem análise ou auditoria do SGQ. O resultado
é um único .xlsx estilizado salvo em /mnt/user-data/outputs/ e apresentado via present_files.
---
# Análise NCs — Relatório de Qualidade ISO 9001 (De Paula Contadores)
Consultor de qualidade sênior ISO 9001. Recebe DOIS arquivos exportados do Sigsistem e produz um
relatório Excel multi-abas para acompanhamento do SGQ e preparação de auditoria.
## Arquivos de entrada (SEMPRE dois)
| Arquivo | Formato real | Papel |
|---|---|---|
| `ocorrencias_pa_DDMMAAAA.xlsx` | Excel 2007+ | Dados estruturados: ocorrências, ações, datas, análise, responsáveis. **Fonte principal.** |
| `acoes_DDMMAAAA.xls` (às vezes `acoesDDMMAAAA.xls`) | **HTML** (apesar da extensão `.xls`) | Blocos "Ocorrência N / Ação M" com a seção **"Relato(s) do Acompanhamento"**. **Única fonte confiável da data do último acompanhamento.** |
> O `.xls` NÃO é Excel — é HTML. Ler com `open(..., encoding='latin-1')` e parsear por regex.
> Nunca tente `pd.read_excel` nele.
## Conceitos-chave
- **Ocorrência**: registro com código único. 1 código = 1 ocorrência. Tipos: Não Conformidade,
Reclamação de Cliente, Oportunidade de Melhoria, Planejamento Estratégico, Mudança Planejada,
Gerenciamento de Riscos, Observação em Auditoria, etc.
- **NC** (Não Conformidade e Reclamação de Cliente): exige **Correção** (imediata) + **Ação
Corretiva** (causa raiz). NC só com Correção, sem Ação Corretiva = **erro grave** (aba NCs Críticas).
- **Ocorrência/Ação**: identificador exibido no formato `3856/5646` (código da ocorrência / código
da ação). Usar esse formato em TODAS as abas de ações.
- **Vencimento efetivo** de uma ação = `Prazo Prorrogado` se preenchido, senão `Data da Conclusão
da Ação` (que no export é a data-limite prevista, não a conclusão real — todas as ações do export
estão em aberto).
- **Último acompanhamento**: data da última ENTRADA de relato no `.xls`, extraída por Ocorrência/Ação.
## Regras de negócio (consolidadas — NÃO alterar sem pedido explícito)
1. **Linhas válidas**: apenas linhas cujo `Código da Ocorrência` é numérico. Exports antigos podem
trazer um bloco de lixo ao final (valores `0`, `0,0%`, `------`, "Mai/2023"); descartar.
Valores-lixo tratados como nulos: `------`, `0`, `0,0%`, `0.0%`.
2. **Datas**: extrair sempre o padrão `DD/MM/AAAA` (a coluna de emissão vem com data+hora
misturadas; pegar só a data). `dayfirst=True`.
3. **Data de referência (HOJE)**: verificar a data real do sistema (`date`) antes de rodar. Nunca
reutilizar data de ciclo anterior nem inventar. O script aceita `--hoje AAAA-MM-DD`; sem ela usa
a data atual do sistema.
4. **Último acompanhamento** vem do `.xls`, por `(Ocorrência, Ação)`. Cada entrada da seção
"Relato(s) do Acompanhamento" começa com `DD/MM/AAAA - Nome - texto`. Pegar a **última entrada
por data**. IGNORAR as datas embutidas em linhas de prorrogação ("Prazo Prorrogado Para: ...") —
elas são datas-alvo futuras, não datas de relato.
5. **Ações em Atraso**: vencimento efetivo < HOJE. Vão para cá **mesmo que tenham acompanhamento**.
Ordenar por maior atraso. Colunas incluem `Dias em Atraso`.
6. **Acompanhamentos Realizados** (ações a priorizar): têm último acompanhamento ANTES do
vencimento efetivo E o vencimento ainda não passou (`>= HOJE`) **E o último acompanhamento NÃO é
uma prorrogação de prazo**. Se a última entrada for "Inclusão/Alteração de Prorrogação de Prazo",
a ação é EXCLUÍDA desta aba (não há mais o que fazer até um novo relato de andamento real).
7. **Sem Análise** (por ocorrência): campo `Descrição da Análise da Ocorrência` vazio. Trazer código
da ocorrência, data de emissão, área, emissor, indicado para análise (usar "Indicado para
Descrever Análise" e, na ausência, o "Responsável pela Descrição da Análise").
8. **Análise sem Ação**: análise preenchida mas SEM código de ação (análise feita, ação não aberta).
Trazer ocorrência/ação, data de emissão, área, emissor, responsável p/ análise e descrição.
9. **NCs Críticas**: ocorrências do tipo NC/Reclamação que NÃO possuem nenhuma "Ação Corretiva"
(só têm Correção ou nenhuma ação). Coluna "Tipos de Ação Existentes" mostra o que há.
10. **Clientes com +1 NC nos últimos 6 meses** (no Resumo): ocorrências NC/Reclamação com emissão
nos últimos 6 meses a partir de HOJE, agrupadas por cliente, mostrando quem tem mais de uma.
11. **Todas as Ações**: TODAS as ações abertas (vencidas ou não), ordenadas por vencimento, com
coluna `Status` (VENCIDA / Vence em ≤7 dias / Vence em ≤30 dias / No prazo / Sem vencimento)
e `Dias p/ Vencer`. Serve para cobrança antecipada dos responsáveis.
12. **Colunas obrigatórias nas abas de ações**: sempre incluir **Tipo de Ação** e **Ação** (o texto
da ação em si), além de Ocorrência/Ação e Área, para facilitar a análise.
## Abas do relatório (nesta ordem)
1. **Resumo** — data, indicadores (ocorrências abertas, ações abertas, em atraso, sem análise,
análises sem ação, NCs sem ação corretiva, acompanhamentos a priorizar), ocorrências por tipo,
e clientes com +1 NC (6 meses).
2. **Ações em Atraso** — vermelho.
3. **Acompanhamentos Realizados** — vermelho (prioridade de andamento).
4. **Todas as Ações** — cor por status (vermelho=vencida, amarelo=vence em breve).
5. **Sem Análise**.
6. **Análise sem Ação**.
7. **NCs Críticas** — vermelho.
## Formatação
Cabeçalho azul-escuro (`1F4E79`) com texto branco; zebra sutil (`D6E4F0`); linhas de alerta em
vermelho claro (`F9D7D5`) com fonte vinho; "vence em breve" em amarelo (`FFF2CC`); bordas finas;
largura de coluna automática; `freeze_panes` na primeira linha de dados.
## Como executar
1. Rodar `date` para confirmar HOJE.
2. Identificar os dois arquivos anexados (o `.xlsx` de ocorrências e o `.xls` de ações).
3. Executar o script:
```bash
python scripts/gerar_relatorio.py \
--ocorrencias /mnt/user-data/uploads/ocorrencias_pa_DDMMAAAA.xlsx \
--acoes /mnt/user-data/uploads/acoes_DDMMAAAA.xls \
--hoje AAAA-MM-DD \
--saida /mnt/user-data/outputs
```
Dependências: `pandas openpyxl lxml html5lib` (instalar com `pip install ... --break-system-packages`
se necessário).
4. Chamar `present_files` com o `.xlsx` gerado.
5. Responder no chat de forma factual e enxuta: total de ações em atraso e principais responsáveis;
ocorrências sem análise; NCs sem ação corretiva (alerta de risco); e anomalias estruturais da
planilha, se houver.
## Notas de robustez
- O encoding do `.xls` pode variar entre exports ("ISO-8859" ou "Non-ISO extended-ASCII"); `latin-1`
decodifica ambos e preserva os marcadores de prorrogação.
- A coluna `Cliente(s) Relacionado(s)` pode estar vazia em muitas linhas — normal.
- O script é idempotente: reexecutar sobrescreve o arquivo do dia (`Relatorio_Qualidade_AAAAMMDD.xlsx`).