--- 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`).