feat: termina separação Core/EEG no frontend + requisitos vinculados na Biblioteca #77

Merged
jhony75 merged 3 commits from feature/eeg-frontend-separation-linked-requirements into develop 2026-09-22 09:14:29 -03:00
Owner

Implementa dois itens do backlog (P2 "vazamento EEG residual no frontend" e o item adiado "requisitos vinculados na Biblioteca").

1. Separação Core/EEG no frontend -- equivalente do vazamento de backend já fechado anteriormente (Report.eeg_profile fora do extension point). ReportForm.tsx/ReportDetail.tsx/ReportList.tsx embutiam direto o vocabulário EEG (patient code, canais Photic/Cardio/Vídeo). Extraído pra frontend/src/components/EegProfileFields.tsx:

  • EegProfileFields (campos editáveis) e EegProfileReadFields (modo leitura)
  • eegChannelSummary (resumo textual, reaproveitado por ReportList e ReportDetail)
  • emptyEegProfile/normalizeEegProfile (construção do objeto de formulário)

Os 3 componentes genéricos passam a só receber/repassar o objeto eeg adiante, sem interpretar nome de campo nenhum -- mesmo espírito do eeg_extension do backend (modules/eeg_reports/report_profile.py), sem precisar de injeção de dependência formal (único consumidor por enquanto, então um componente React reaproveitado basta).

2. Requisitos vinculados na Biblioteca -- estava deliberadamente adiado (RequirementDetail já geria o vínculo dos dois lados via API, só não aparecia na UI da Biblioteca). ScenarioTemplateOut ganhou requirements: List[ScenarioRequirementRef], populado de graça via o backref que já existia (Requirement.scenario_templates, backref="requirements" em modules/traceability/models.py) -- nenhuma migration, nenhuma mudança no vínculo em si, só exposição. Library.tsx mostra os requisitos vinculados como chips clicáveis, navegando pra /requisitos/:id. Gestão do vínculo continua só via RequirementDetail, como já era (read-only na Biblioteca por enquanto).

Verificação: 263/263 testes de backend (1 novo cobrindo o campo requirements em GET/listagem/desvínculo), 163/163 de frontend (1 novo arquivo de teste pro EegProfileFields, 2 novos casos em Library.test.tsx). tsc/lint/build limpos. Verificado manualmente ponta a ponta no dev server local: criar/editar report com canais EEG (checkboxes + patient code persistindo corretamente em edição e leitura), listagem mostrando "Photic · Vídeo" na coluna Canais, cenário vinculado a um requisito aparecendo na Biblioteca com navegação funcionando até RequirementDetail.

🤖 Generated with Claude Code

Implementa dois itens do backlog (P2 "vazamento EEG residual no frontend" e o item adiado "requisitos vinculados na Biblioteca"). **1. Separação Core/EEG no frontend** -- equivalente do vazamento de backend já fechado anteriormente (`Report.eeg_profile` fora do extension point). `ReportForm.tsx`/`ReportDetail.tsx`/`ReportList.tsx` embutiam direto o vocabulário EEG (patient code, canais Photic/Cardio/Vídeo). Extraído pra `frontend/src/components/EegProfileFields.tsx`: - `EegProfileFields` (campos editáveis) e `EegProfileReadFields` (modo leitura) - `eegChannelSummary` (resumo textual, reaproveitado por `ReportList` e `ReportDetail`) - `emptyEegProfile`/`normalizeEegProfile` (construção do objeto de formulário) Os 3 componentes genéricos passam a só receber/repassar o objeto `eeg` adiante, sem interpretar nome de campo nenhum -- mesmo espírito do `eeg_extension` do backend (`modules/eeg_reports/report_profile.py`), sem precisar de injeção de dependência formal (único consumidor por enquanto, então um componente React reaproveitado basta). **2. Requisitos vinculados na Biblioteca** -- estava deliberadamente adiado (`RequirementDetail` já geria o vínculo dos dois lados via API, só não aparecia na UI da Biblioteca). `ScenarioTemplateOut` ganhou `requirements: List[ScenarioRequirementRef]`, populado de graça via o backref que já existia (`Requirement.scenario_templates`, `backref="requirements"` em `modules/traceability/models.py`) -- **nenhuma migration, nenhuma mudança no vínculo em si**, só exposição. `Library.tsx` mostra os requisitos vinculados como chips clicáveis, navegando pra `/requisitos/:id`. Gestão do vínculo continua só via `RequirementDetail`, como já era (read-only na Biblioteca por enquanto). **Verificação**: 263/263 testes de backend (1 novo cobrindo o campo `requirements` em `GET`/listagem/desvínculo), 163/163 de frontend (1 novo arquivo de teste pro `EegProfileFields`, 2 novos casos em `Library.test.tsx`). `tsc`/lint/build limpos. Verificado manualmente ponta a ponta no dev server local: criar/editar report com canais EEG (checkboxes + patient code persistindo corretamente em edição e leitura), listagem mostrando "Photic · Vídeo" na coluna Canais, cenário vinculado a um requisito aparecendo na Biblioteca com navegação funcionando até `RequirementDetail`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat: termina separacao Core/EEG no frontend + requisitos vinculados na Biblioteca
All checks were successful
EEG QA CI / Frontend (pull_request) Successful in 3m28s
EEG QA CI / Build e publicação de imagens (pull_request) Successful in 3m0s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
EEG QA CI / Detectar o que mudou (pull_request) Successful in 12s
EEG QA CI / Backend (pull_request) Successful in 1m52s
19e6caba82
Vazamento EEG residual no frontend (equivalente do que ja foi fechado no
backend): ReportForm/ReportDetail/ReportList embutiam direto patient code
e canais Photic/Cardio/Video. Extraido pra EegProfileFields.tsx (campos
editaveis, modo leitura, resumo textual, normalizacao) -- os 3 componentes
genericos so repassam o objeto `eeg` adiante agora, sem interpretar nome de
campo nenhum. Mesmo espirito do eeg_extension do backend, sem precisar de
injecao de dependencia formal (unico consumidor por enquanto).

Requisitos vinculados agora aparecem tambem em Library.tsx (chips
clicaveis, navegam pra /requisitos/:id) -- estava deliberadamente adiado.
ScenarioTemplateOut ganhou requirements: List[ScenarioRequirementRef], de
graca via o backref que ja existia (Requirement.scenario_templates) --
nenhuma migration, nenhuma mudanca no vinculo em si, so exposicao. Gestao
do vinculo continua só via RequirementDetail.

Verificado manualmente na UI (dev server local): criar/editar report com
canais EEG, listagem mostrando canais, cenario vinculado a requisito
aparecendo na Biblioteca e navegacao ate RequirementDetail -- tudo
funcionando ponta a ponta.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge remote-tracking branch 'origin/develop' into feature/eeg-frontend-separation-linked-requirements
All checks were successful
EEG QA CI / Detectar o que mudou (pull_request) Successful in 9s
EEG QA CI / Frontend (pull_request) Successful in 4m17s
EEG QA CI / Build e publicação de imagens (pull_request) Successful in 3m7s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
EEG QA CI / Backend (pull_request) Successful in 1m58s
df2fb82448
# Conflicts:
#	docs/BACKLOG.md
Merge remote-tracking branch 'origin/develop' into feature/eeg-frontend-separation-linked-requirements
All checks were successful
EEG QA CI / Build e publicação de imagens (pull_request) Successful in 1m1s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
EEG QA CI / Backend (pull_request) Successful in 1m57s
EEG QA CI / Detectar o que mudou (pull_request) Successful in 7s
EEG QA CI / Frontend (pull_request) Successful in 3m20s
f00ede3721
# Conflicts:
#	docs/BACKLOG.md
jhony75 merged commit 28a7fe4dcf into develop 2026-09-22 09:14:29 -03:00
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!77
No description provided.