EHR ligero para consultas médicas privadas en España — documentación clínica, templates de tratamiento y recetas PDF en un solo flujo.
- Registro de pacientes con reutilización de datos demográficos
- Templates de tratamiento por diagnóstico
- Generación de receta PDF con un clic (WeasyPrint)
- Autenticación JWT + bcrypt
- Tipos TypeScript auto-generados desde OpenAPI
- CI con lint, type-check y tests en cada push/PR
| Componente | Estado | Nota |
|---|---|---|
| Backend API (FastAPI) | ✅ Completo | Endpoints core operativos |
| Frontend (Next.js 14) | ✅ Completo | UI desktop integrada |
| Autenticación | ✅ Funcional | bcrypt + JWT |
| Flujo clínico MVP | ✅ Funcional | Pacientes, consultas, templates, recetas PDF |
| Tipos API | ✅ Automáticos | OpenAPI → TypeScript |
| Gate local + CI | ✅ Verde | Backend (pytest/ruff/mypy) + frontend (lint/type-check/test) |
- Python 3.11+ · Node.js 20+ · Docker (Engine + Compose) · WeasyPrint (
brew install weasyprinten macOS)
./scripts/setup-local-db.shLevanta PostgreSQL 17 en localhost:15432 y aplica de forma idempotente el SQL neutral de database/migrations/.
cd backend
python3.11 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # edita DATABASE_URL si es necesario
uvicorn app.main:app --reload --port 8000.env mínimo:
DATABASE_URL=postgresql+asyncpg://postgres:password@localhost:15432/consultamed
JWT_SECRET_KEY=tu-secreto-super-seguro-cambialo
JWT_ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=480
FRONTEND_URL=http://localhost:3000
ENVIRONMENT=development
DEBUG=trueRuta recomendada: PostgreSQL local en
localhost:15432.
cd frontend
npm install
npm run devOpcional — frontend/.env.local:
NEXT_PUBLIC_API_URL=http://localhost:8000| Campo | Valor |
|---|---|
sara@consultamed.es |
|
| Password | piloto2026 |
| Servicio | URL |
|---|---|
| Frontend | http://localhost:3000 |
| API / Docs OpenAPI | http://localhost:8000 · http://localhost:8000/docs |
flowchart LR
FE["Frontend\nNext.js 14 + TypeScript"]
API["Backend\nFastAPI · source of truth"]
DB["PostgreSQL 17\noperacional"]
PDF["WeasyPrint\nRecetas PDF"]
FE <--> API
API <--> DB
API --> PDF
- FastAPI es la API principal y fuente de verdad para writes, auth y lógica clínica.
- PostgreSQL 17 (Docker) es la única base de datos del runtime; backend y frontend corren nativos.
├── backend/
│ ├── app/ # API, modelos, schemas, servicios, validators, FHIR mapping
│ ├── tests/ # unit/, contracts/, integration/
│ └── scripts/ # export-openapi, migrations
├── frontend/
│ ├── src/app/ # Next.js App Router pages
│ ├── src/components/
│ ├── src/lib/ # API client, hooks, utils
│ └── src/types/ # Tipos auto-generados + manuales
├── database/
│ └── migrations/ # SQL neutral usado por setup-local-db
├── scripts/ # repo-tool.mjs (orquestador) + wrappers (setup-local-db, test_gate)
├── docs/ # Arquitectura, specs, playbooks, compliance, release
└── .github/workflows/ # CI (backend + frontend)
| Control | Estado |
|---|---|
| bcrypt password hashing | ✅ Activo |
| JWT autenticación (1h prod / 8h dev) | ✅ Activo |
| Validación DNI/NIE | ✅ Activo |
| Input validation en backend | ✅ Activo |
| HTTPS obligatorio | ⏳ Producción |
| RLS completo | ⏳ V2 |
Entorno canónico backend:
backend/.venv(no uses.venven raíz).
# Gate completo (recomendado antes de commit)
./scripts/test_gate.sh
# Backend
cd backend && source .venv/bin/activate
pytest tests/unit tests/contracts -v --tb=short
ruff check .
# Frontend
cd frontend
npm test && npm run lint && npm run type-check| Recurso | Enlace |
|---|---|
| Índice de docs | docs/README.md |
| Contratos de API | docs/API.md |
| Guía de uso clínico | docs/USER_GUIDE.md |
| Arquitectura implementada | docs/architecture/overview.md |
| Specs activas | docs/specs/README.md |
| Ejecución manual en Windows | docs/playbooks/windows-local-manual-run.md |
| Despliegue | docs/release/DEPLOYMENT_GUIDE.md |
| DeepWiki (setup dev) | deepwiki.com/AIOjPINEDA/EHR_Local |
Proyecto privado · ConsultaMed