NeuroAvalia e um sistema full stack para gestao de pacientes, avaliacoes neuropsicologicas, aplicacao de testes, anamnese estruturada, documentos, evolucao clinica e laudos.
- Backend: Django
- API: Django Ninja
- Frontend: Next.js 14 (App Router)
- Banco atual: SQLite
- Dominio principal: pacientes, avaliacoes, anamnese, instrumentos psicologicos e relatorios clinicos
- Python
- Django
- Django Ninja
- ORM nativo do Django
- Migrations Django
- Envio de e-mail desacoplado por service layer
- Next.js 14
- React
- TypeScript
- Tailwind CSS
- Componentes reutilizaveis no dashboard e em formularios publicos
neuro/
├── apps/
│ ├── accounts/ # autenticacao, usuarios e permissoes
│ ├── anamnesis/ # templates, convites e respostas de anamnese
│ ├── api/ # auth e roteamento global da API
│ ├── common/ # utilitarios compartilhados
│ ├── documents/ # documentos vinculados a avaliacao
│ ├── evaluations/ # avaliacoes e evolucao clinica
│ ├── messaging/ # envio por email e WhatsApp
│ ├── patients/ # cadastro e gestao de pacientes
│ ├── reports/ # laudos estruturados
│ └── tests/ # instrumentos e aplicacoes de testes
├── config/
│ ├── settings/
│ ├── templates/
│ ├── static/
│ ├── staticfiles/
│ ├── urls.py
│ ├── asgi.py
│ ├── wsgi.py
│ └── db.sqlite3
├── neuro-frontend/
│ ├── app/
│ ├── components/
│ │ └── anamnesis/
│ └── lib/
├── theme/
├── PROJECT_ARCHITECTURE.md
└── manage.py
Responsavel por autenticacao, usuarios, papeis e permissoes.
Responsavel pelo cadastro do paciente e seus dados demograficos.
Entidade central:
Patient
Representa a avaliacao neuropsicologica vinculada a um paciente.
Entidades principais:
EvaluationEvaluationProgressEntry
Responsabilidades:
- criar avaliacao
- vincular paciente
- servir como contexto dos testes
- registrar evolucao clinica cronologica
Responsavel por anexos da avaliacao.
Entidade principal:
EvaluationDocument
Responsabilidades:
- upload de arquivos
- serializacao e listagem por avaliacao
- marcacao de relevancia para o laudo
Dominio proprio da anamnese estruturada.
Entidades principais:
AnamnesisTemplateAnamnesisInviteAnamnesisResponse
Responsabilidades:
- manter templates versionados de anamnese
- permitir preenchimento interno no dashboard
- permitir preenchimento externo por link seguro com token
- suportar rascunho, envio final e revisao
- armazenar respostas em JSON estruturado para uso clinico e futuro laudo
Estrutura resumida:
apps/anamnesis/
├── api/
│ ├── endpoints.py
│ ├── router.py
│ └── schemas.py
├── migrations/
├── templates/
│ ├── infant.py
│ ├── adolescent.py
│ └── adult.py
├── constants.py
├── models.py
├── selectors.py
└── services.py
Camada desacoplada de mensageria.
Arquivos principais:
email_service.pywhatsapp_service.pyservices.py
Responsabilidades:
- envio de convite de anamnese por e-mail
- geracao de link de WhatsApp com mensagem pronta
- permitir futura troca por integracao oficial sem alterar o dominio clinico
Modulo de laudo estruturado por secoes.
Entidades principais:
ReportReportSection
Arquivos principais:
builders.pymodels.pyselectors.pyservices.py
Responsabilidades:
- snapshot estruturado da avaliacao
- secoes geradas e editaveis
- consolidacao futura de anamnese, testes, evolucao e documentos
Nucleo funcional dos instrumentos.
Estrutura resumida:
apps/tests/
├── api/
├── age_rules.py # regras etarias centralizadas dos instrumentos
├── base/
├── models/
├── services/
├── registry.py
├── selectors.py
├── urls.py
├── views.py
├── management/commands/
│ └── create_instruments.py
├── wisc4/
├── bpa2/
├── ebadep_a/
├── ebaped_ij/
├── epq_j/
├── etdah_ad/
└── fdt/
Observacao importante:
EBADEP-IJcontinua usando a pastaapps/tests/ebaped_ij/, mas as rotas e o codigo funcional usamebadep_ij
Cada instrumento segue, em geral, a mesma organizacao:
apps/tests/<instrumento>/
├── __init__.py
├── config.py
├── schemas.py
├── validators.py
├── calculators.py
├── interpreters.py
└── classifiers.py
Fluxo interno:
- recebe dados brutos
- valida formato e limites
- calcula escores
- classifica segundo normas
- gera interpretacao textual
- persiste em
TestApplication
wisc4bpa2ebadep_aebadep_ijepq_jetdah_adfdt
As regras etarias dos instrumentos agora ficam centralizadas em apps/tests/age_rules.py e sao expostas pela API de instrumentos para o frontend.
Paciente do sistema.
Avaliacao associada a um paciente.
Registro cronologico do processo clinico da avaliacao.
Documento anexado a uma avaliacao.
Cadastro do teste disponivel no sistema.
Campos importantes:
codenamecategoryversionis_active
Aplicacao concreta de um instrumento em uma avaliacao.
Campos importantes:
evaluationinstrumentapplied_onraw_payloadcomputed_payloadclassified_payloadreviewed_payloadinterpretation_textis_validated
Template versionado de anamnese estruturada.
Campos importantes:
codenametarget_typeversionschema_payloadis_active
Convite externo para preenchimento por link seguro.
Campos importantes:
evaluationpatienttemplaterecipient_namerecipient_emailrecipient_phonechanneltokenstatussent_atopened_atcompleted_atexpires_at
Resposta estruturada da anamnese.
Campos importantes:
invite(opcional)evaluationpatienttemplateresponse_typesourcestatusanswers_payloadsummary_payloadsubmitted_by_namesubmitted_by_relationreviewed_by
Laudo estruturado vinculado a uma avaliacao.
Secao editavel e gerada do laudo.
O backend usa Django Ninja.
Rotas principais:
/api/accounts/.../api/patients/.../api/evaluations/.../api/documents/.../api/anamnesis/.../api/public/anamnesis/.../api/tests/.../api/reports/...
/api/patients//api/patients/{id}
/api/evaluations//api/evaluations/{id}/api/evaluations/{id}/progress-entries
GET /api/documents/?evaluation_id=<id>POST /api/documents/uploadPATCH /api/documents/{id}DELETE /api/documents/{id}
Templates:
GET /api/anamnesis/templates/GET /api/anamnesis/templates/{id}
Respostas internas:
POST /api/anamnesis/responses/GET /api/anamnesis/responses/?evaluation_id=<id>GET /api/anamnesis/responses/{id}PATCH /api/anamnesis/responses/{id}POST /api/anamnesis/responses/{id}/submitPATCH /api/anamnesis/responses/{id}/review
Convites externos:
POST /api/anamnesis/invites/GET /api/anamnesis/invites/?evaluation_id=<id>GET /api/anamnesis/invites/{id}POST /api/anamnesis/invites/{id}/send-emailPOST /api/anamnesis/invites/{id}/send-whatsappPOST /api/anamnesis/invites/{id}/resendPOST /api/anamnesis/invites/{id}/cancel
Publicos por token:
GET /api/public/anamnesis/{token}POST /api/public/anamnesis/{token}/save-draftPOST /api/public/anamnesis/{token}/submit
/api/tests/instruments//api/tests/applications//api/tests/<instrumento>/submit/api/tests/<instrumento>/result/<application_id>
/api/reports//api/reports/{id}/api/reports/{id}/build/api/reports/sections/{id}
O frontend usa App Router e organiza o dashboard por dominio.
Estrutura resumida:
neuro-frontend/app/
├── layout.tsx
├── page.tsx
├── login/
├── public/
│ └── anamnesis/
│ └── [token]/page.tsx
└── dashboard/
├── layout.tsx
├── page.tsx
├── accounts/
├── ai/
├── documents/
├── reports/
├── patients/
├── evaluations/
│ ├── page.tsx
│ ├── new/page.tsx
│ └── [id]/
│ ├── page.tsx
│ └── anamnesis/
│ ├── page.tsx
│ ├── new/page.tsx
│ └── [anamnesisId]/page.tsx
└── tests/
neuro-frontend/components/anamnesis/
├── FieldRenderer.tsx
├── FormStepRenderer.tsx
├── InternalAnamnesisEditor.tsx
├── ProgressHeader.tsx
├── RepeaterField.tsx
├── ReviewSummary.tsx
└── types.ts
neuro-frontend/app/dashboard/tests/<instrumento>/
├── page.tsx
└── [id]/result/page.tsx
Usuario cria ou edita paciente.
Avaliacao e vinculada ao paciente.
Na avaliacao, o sistema passa a suportar:
- anamnese interna estruturada
- convite externo de anamnese por token
- upload de documentos
- evolucao clinica
Frontend abre formulario do instrumento e submete para a API.
Backend calcula, classifica e persiste resultado em TestApplication.
Profissional revisa:
- anamnese
- testes
- evolucao
- documentos
Laudo estruturado consome snapshot da avaliacao sem recalcular testes.
raw_payloadcomputed_payloadclassified_payloadreviewed_payload
answers_payloadsummary_payloadstatussource
snapshot_payloadgenerated_textedited_textfinal_text
O backend continua sendo a fonte da verdade para:
- regras de negocio
- normas e idade dos testes
- estados de convite/resposta
- snapshot estrutural do laudo
O sistema agora possui uma base unica de formulario configuravel, compartilhada entre preenchimento interno e externo.
Cada template possui:
titledescriptionsteps
Cada step possui:
idtitledescriptionfields
Cada field pode ter:
idlabeltyperequiredplaceholderhelp_textoptionsconditionalitem_fieldspararepeater
Tipos suportados atualmente:
texttextareanumberdateselectradiocheckboxmultiselectphoneemailrepeateryes_no
Modelos implementados:
- anamnese infantil
- anamnese adolescente
- anamnese adulta
O modulo reports ja foi preparado para consumir dados estruturados.
Atualmente o snapshot do laudo inclui:
- dados da avaliacao
- dados do paciente
- documentos
- evolucao
- testes validados
Base preparada para proxima integracao:
- respostas estruturadas de anamnese
Arquivo chave:
apps/reports/builders.py
uv run python manage.py check
uv run python manage.py migrate
uv run python manage.py makemigrations --check
uv run python manage.py create_instruments
uv run python manage.py testnpm run lint
npm run buildJa implementado:
- pacientes
- avaliacoes
- testes com resultados
- regras etarias centralizadas dos instrumentos
- documentos vinculados a avaliacao
- evolucao clinica
- laudo estruturado por secoes
- anamnese interna e externa por token
- envio por email e WhatsApp via camada de mensageria
Preparado para expansao:
- integracao completa da anamnese no snapshot do laudo
- resumos clinicos automáticos em
summary_payload - integracao oficial futura de WhatsApp
NeuroAvalia e um sistema full stack de avaliacao neuropsicologica com Django + Django Ninja no backend e Next.js 14 no frontend. O dominio central envolve pacientes, avaliacoes, anamnese estruturada, documentos, evolucao clinica, testes psicologicos e laudos. Cada teste vive em um modulo proprio em
apps/tests/<instrumento>/. A anamnese vive emapps/anamnesis/com templates configuraveis porstepsefields, convites externos por token e respostas internas/externas persistidas em JSON. O laudo estruturado emapps/reports/consome snapshot de avaliacao, documentos, evolucao e testes, e esta preparado para incorporar a anamnese nas proximas iteracoes.