feat: Issue vira entidade própria (N:N com Report) + nota geral calculada #24

Closed
jhony75 wants to merge 2 commits from feature/issue-first-class-and-score into develop
Owner

Achado deixa de pertencer a um único report — o mesmo defeito reaparecendo em builds/reports diferentes agora é o mesmo Issue sendo reanexado, não uma cópia. Status (Aberto/Em correção/Verificado/Fechado) e severidade ficam num lugar só, compartilhados por todo report que o referencia.

  • Migration 9f3d2a1c7b44: tabela report_issues (N:N), backfill sem perda de dado, origin_report_id como proveniência (não dono).
  • API: PUT/DELETE /api/reports/{id}/issues/{issue_id} (anexar/desanexar sem duplicar), GET /api/issues (listagem global com filtros), GET /api/issues/{id} (detalhe + traceability — reports que referenciam o achado), PATCH /api/issues/{id} (edição, com closed_at automático).
  • Report.overall_score deixa de ser preenchido à mão — vira calculado (severidade dos achados abertos + status) em services.reports.compute_overall_score.
  • Frontend: telas /achados e /achados/:id, IssuePicker pra anexar achado existente em vez de duplicar, nota geral exibida como somente leitura.
  • CI: --expect-alembic atualizado pro novo head.
  • 13 testes novos (test_issues.py) + suíte completa (59) passando; verificado manualmente end-to-end (criar achado, anexar em 2 reports, fechar o achado e ver as duas notas recalcularem, detach preserva o achado, delete global remove de todos).
Achado deixa de pertencer a um único report — o mesmo defeito reaparecendo em builds/reports diferentes agora é o mesmo Issue sendo reanexado, não uma cópia. Status (Aberto/Em correção/Verificado/Fechado) e severidade ficam num lugar só, compartilhados por todo report que o referencia. - Migration `9f3d2a1c7b44`: tabela `report_issues` (N:N), backfill sem perda de dado, `origin_report_id` como proveniência (não dono). - API: `PUT`/`DELETE /api/reports/{id}/issues/{issue_id}` (anexar/desanexar sem duplicar), `GET /api/issues` (listagem global com filtros), `GET /api/issues/{id}` (detalhe + traceability — reports que referenciam o achado), `PATCH /api/issues/{id}` (edição, com `closed_at` automático). - `Report.overall_score` deixa de ser preenchido à mão — vira calculado (severidade dos achados abertos + status) em `services.reports.compute_overall_score`. - Frontend: telas `/achados` e `/achados/:id`, `IssuePicker` pra anexar achado existente em vez de duplicar, nota geral exibida como somente leitura. - CI: `--expect-alembic` atualizado pro novo head. - 13 testes novos (`test_issues.py`) + suíte completa (59) passando; verificado manualmente end-to-end (criar achado, anexar em 2 reports, fechar o achado e ver as duas notas recalcularem, detach preserva o achado, delete global remove de todos).
Achado deixa de pertencer a um único report: o mesmo defeito reaparecendo
em builds/reports diferentes agora é o mesmo Issue sendo reanexado, não
uma cópia — status (Aberto/Em correção/Verificado/Fechado) e severidade
ficam num lugar só, compartilhados por todo report que o referencia.

- Migration 9f3d2a1c7b44: tabela report_issues (N:N), backfill sem perda
  de dado, origin_report_id como proveniência (não dono).
- API: PUT/DELETE /api/reports/{id}/issues/{issue_id} (anexar/desanexar
  sem duplicar), GET /api/issues (listagem global com filtros), GET
  /api/issues/{id} (detalhe + traceability — reports que o referenciam),
  PATCH /api/issues/{id} (edição, com closed_at automático).
- Report.overall_score deixa de ser preenchido à mão — vira calculado
  (severidade dos achados abertos + status) em compute_overall_score.
- Frontend: telas /achados e /achados/:id, IssuePicker pra anexar achado
  existente em vez de duplicar, nota geral exibida como somente leitura.
- CI: --expect-alembic atualizado pro novo head.
docs: corrigir BACKLOG.md (item de lock Python tinha sumido, react-router não é desta branch)
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 2m23s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
3ecc54b20e
jhony75 closed this pull request 2026-09-05 02:46:18 -03:00
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 2m23s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
jhony75/eeg-qa!24
No description provided.