| # Pendências — CCO Apoena |
|
|
| Estado: réplica funcional (todos os endpoints respondem 200, dados reais jan–jun/2026). |
| Itens abaixo são melhorias/decisões que ficaram para uma próxima rodada. |
|
|
| ## Dados / cadastros |
|
|
| - **API REST de cadastros (F2M_BEARER_TOKEN)** — as tabelas `liberacoes_lavra` e |
| `teores_ouro` (cadastro de liberações + teor de Au por liberação) vêm da API REST |
| `*-ws.miningcontrol.cloud/webservice` com Bearer JWT. Não temos o token da Apoena nem |
| a URL confirmada. Sem isso, `/api/liberacoes` retorna painel vazio (degrada gracioso, |
| campo `indisponivel`). **Obter o token e confirmar `F2M_API_BASE`** no tenant Apoena. |
| Obs: o teor de Au já vem na base 7 (`pivot_qualidade.AU`) — o cadastro REST acrescenta |
| o cruzamento liberação×bancada×validade. |
|
|
| ## LLM (OpenRouter) |
|
|
| - **`OPENROUTER_KEY` inválida** — a key herdada do cco (`sk-or-v1...`) retorna |
| `401 "User not found"` (revogada/conta inexistente). Afeta `/api/analise` (análise |
| textual) e o chat LLM — **degrada gracioso** (fallback heurístico cobre, o painel |
| ainda gera o snapshot). Para reativar a análise por LLM: gerar uma key nova em |
| openrouter.ai e atualizar o secret `OPENROUTER_KEY` do Space (e o `.env.local`). |
| |
| ## Artefatos calibrados (gerados a partir do DB Apoena) |
| |
| - `dashboard_apn/equipment_categories.json` — classificação produção/marginal/infra |
| (gerado por `scripts/classify_equipments.py`). |
| - `viagens_baseline.duckdb` — baseline 90d de saúde de viagens |
| (gerado por `scripts/build_viagens_baseline.py`). Sem ele, `/api/viagens_saude` = "indisponível". |
| - `dashboard_apn/thresholds_calibrados.json` — percentis de fila/viagens/ciclo p/ recomendações |
| (gerado por `dashboard_apn/calibrar_thresholds.py`). Há fallbacks embutidos enquanto ausente. |
| - `cycle_benchmarks.json` — regressão cota×dmt×ciclo. O de Almas (`50.8-0.111*cota+1.017*dmt`) |
| **não vale** para Apoena. Recalibrar. Atenção: em Apoena `cota` extraída de `LIB_<NNNN>` |
| é id de liberação, não cota métrica — a regressão precisa de outra variável ou recalibração. |
|
|
| ## Não portados (decisão de escopo) |
|
|
| - ~~**Deploy HF**~~ — feito: Space `gabrielsapucaia02/cco-apn` (público, RUNNING) via |
| `scripts/deploy_hf.py`. Writer autossuficiente (DB embutido + poll F2M). |
| - **GPS / câmeras**: removidos por escopo (Sorteio de Pesagem depende de GPS — removido junto). |
| - **`seed_equipamento_perfil.py`**: as listas nominais (cemitério/quadrantes/reincidentes) são |
| conhecimento manual de Almas. `equipamento_perfil` fica vazio → enriquecimento de relatórios |
| apenas não adiciona tags (sem quebrar). Repovoar com radiografia da Apoena se desejado. |
| - **Tests** (`tests/`): suíte do cco não portada (fixtures dependem de schema/dados Almas). |
|
|
| ## Limpezas opcionais |
|
|
| - `dashboard_apn/static/index.html`: as views ocultas (Mapa, Viagens, Câmeras, Pesagem) ainda |
| têm DOM morto com `onclick` para funções removidas. São inalcançáveis (sem aba) e protegidas |
| por type-guards — não chamam endpoints mortos. Remover num passo de limpeza se quiser. |
| - `dashboard_apn/recomendacoes_*.py`: alguns comentários/docstrings ilustrativos ainda citam |
| nomes de equipamento de Almas ('EH 087'). Não afeta execução. |
| - `scout_apoena.py` (raiz): probe inicial de descoberta das bases. Pode ser removido |
| (`scripts/validate_schema.py` cobre o profiling). |
|
|