[SPRINT-6] docs: Agregar documentacion y reportes
- Epicas documentadas - Reporte de ejecucion Sprint 6 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
a290bd564a
commit
0cb74ec2c1
235
docs/01-epicas/DENTAL-001-odontograma.md
Normal file
235
docs/01-epicas/DENTAL-001-odontograma.md
Normal file
@ -0,0 +1,235 @@
|
||||
# DENTAL-001: Odontograma Digital
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** DENTAL-001
|
||||
- **Modulo:** Odontograma
|
||||
- **Prioridad:** P0
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 1 - Core
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de odontograma digital interactivo que permite registrar y visualizar el estado de cada pieza dental del paciente, siguiendo la nomenclatura FDI (Federation Dentaire Internationale).
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Representacion grafica de dentadura completa
|
||||
2. Registro de estado por pieza dental
|
||||
3. Registro de afectaciones por cara dental
|
||||
4. Historial de cambios por fecha
|
||||
5. Comparativa entre odontogramas
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Vista grafica interactiva (32 piezas adulto + 20 deciduos)
|
||||
- Estados por pieza: sano, caries, obturacion, endodoncia, corona, etc.
|
||||
- Caras dentales: Mesial, Distal, Oclusal, Vestibular, Lingual
|
||||
- Colores por estado (verde=sano, rojo=caries, gris=ausente)
|
||||
- Historial cronologico
|
||||
- Notas por pieza
|
||||
|
||||
### Excluido
|
||||
- Edicion de imagen (dibujo libre)
|
||||
- Generacion 3D
|
||||
- Integracion directa con camaras intraorales
|
||||
|
||||
## Nomenclatura FDI
|
||||
|
||||
### Sistema de Numeracion (Adultos)
|
||||
|
||||
```
|
||||
SUPERIOR
|
||||
Derecho | Izquierdo
|
||||
18-11 | 21-28
|
||||
---------|----------
|
||||
48-41 | 31-38
|
||||
Derecho | Izquierdo
|
||||
INFERIOR
|
||||
|
||||
Cuadrante 1: Superior derecho (11-18)
|
||||
Cuadrante 2: Superior izquierdo (21-28)
|
||||
Cuadrante 3: Inferior izquierdo (31-38)
|
||||
Cuadrante 4: Inferior derecho (41-48)
|
||||
```
|
||||
|
||||
### Dientes Deciduos (Ninos)
|
||||
|
||||
```
|
||||
Cuadrante 5: Superior derecho deciduo (51-55)
|
||||
Cuadrante 6: Superior izquierdo deciduo (61-65)
|
||||
Cuadrante 7: Inferior izquierdo deciduo (71-75)
|
||||
Cuadrante 8: Inferior derecho deciduo (81-85)
|
||||
```
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tablas
|
||||
|
||||
**dental.piezas_dentales** (Catalogo)
|
||||
- id, numero, nombre, cuadrante, es_temporal
|
||||
|
||||
**dental.odontogramas**
|
||||
- id, tenant_id, patient_id
|
||||
- fecha_creacion, fecha_actualizacion
|
||||
- notas
|
||||
|
||||
**dental.odontograma_piezas**
|
||||
- id, tenant_id, odontograma_id, pieza_id
|
||||
- estado (ENUM: sano, caries, obturacion, etc.)
|
||||
- caras_afectadas (JSONB)
|
||||
- observaciones
|
||||
|
||||
### Estados de Pieza (ENUM)
|
||||
|
||||
| Estado | Color | Descripcion |
|
||||
|--------|-------|-------------|
|
||||
| sano | Verde | Pieza sin alteraciones |
|
||||
| caries | Rojo | Caries activa |
|
||||
| obturacion | Azul | Restauracion existente |
|
||||
| endodoncia | Morado | Tratamiento de conductos |
|
||||
| corona | Dorado | Corona protesica |
|
||||
| puente | Naranja | Parte de puente |
|
||||
| implante | Plateado | Implante dental |
|
||||
| ausente | Gris | Pieza faltante |
|
||||
| extraccion_indicada | Rojo oscuro | Pendiente de extraccion |
|
||||
|
||||
### Caras Dentales
|
||||
|
||||
| Abreviatura | Nombre | Descripcion |
|
||||
|-------------|--------|-------------|
|
||||
| M | Mesial | Hacia el centro de la arcada |
|
||||
| D | Distal | Alejandose del centro |
|
||||
| O | Oclusal | Superficie de masticacion |
|
||||
| V | Vestibular | Hacia labios/mejillas |
|
||||
| L | Lingual | Hacia la lengua |
|
||||
| P | Palatino | Hacia el paladar |
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /patients/:id/odontograma | Odontograma actual |
|
||||
| GET | /patients/:id/odontogramas | Historial de odontogramas |
|
||||
| POST | /patients/:id/odontograma | Crear nuevo odontograma |
|
||||
| PUT | /odontogramas/:id | Actualizar odontograma |
|
||||
| GET | /odontogramas/:id/piezas | Listar piezas |
|
||||
| PUT | /odontogramas/:id/piezas/:piezaId | Actualizar pieza |
|
||||
| GET | /odontogramas/:id/historial | Historial de cambios |
|
||||
| GET | /odontogramas/comparar | Comparar dos fechas |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface OdontogramaService {
|
||||
getByPatient(patientId: string): Promise<Odontograma>;
|
||||
create(patientId: string): Promise<Odontograma>;
|
||||
updatePieza(odontogramaId: string, piezaId: string, data: PiezaUpdate): Promise<Pieza>;
|
||||
getHistorial(patientId: string): Promise<Odontograma[]>;
|
||||
compare(patientId: string, fecha1: Date, fecha2: Date): Promise<OdontogramaComparison>;
|
||||
}
|
||||
|
||||
interface PiezaUpdate {
|
||||
estado: EstadoPieza;
|
||||
carasAfectadas?: Record<CaraDental, EstadoPieza>;
|
||||
observaciones?: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Componente Frontend
|
||||
|
||||
### OdontogramaViewer
|
||||
|
||||
```typescript
|
||||
interface OdontogramaViewerProps {
|
||||
patientId: string;
|
||||
editable: boolean;
|
||||
onPiezaClick: (pieza: Pieza) => void;
|
||||
showDeciduo: boolean;
|
||||
}
|
||||
|
||||
// Colores por estado
|
||||
const ESTADO_COLORS = {
|
||||
sano: '#22c55e', // green-500
|
||||
caries: '#ef4444', // red-500
|
||||
obturacion: '#3b82f6', // blue-500
|
||||
endodoncia: '#a855f7', // purple-500
|
||||
corona: '#f59e0b', // amber-500
|
||||
ausente: '#9ca3af', // gray-400
|
||||
implante: '#64748b' // slate-500
|
||||
};
|
||||
```
|
||||
|
||||
### PiezaEditor (Modal)
|
||||
|
||||
```typescript
|
||||
interface PiezaEditorProps {
|
||||
pieza: Pieza;
|
||||
onSave: (data: PiezaUpdate) => void;
|
||||
onClose: () => void;
|
||||
}
|
||||
|
||||
// Vista de caras (5 cuadrados)
|
||||
// [V]
|
||||
// [M] [O] [D]
|
||||
// [L]
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Ver Odontograma
|
||||
|
||||
```
|
||||
1. Odontologo abre expediente de paciente
|
||||
2. Sistema carga odontograma activo
|
||||
3. Renderiza vista grafica con colores
|
||||
4. Click en pieza muestra detalle
|
||||
5. Puede ver historial de cambios
|
||||
```
|
||||
|
||||
### Actualizar Estado
|
||||
|
||||
```
|
||||
1. Odontologo hace click en pieza
|
||||
2. Abre modal de edicion
|
||||
3. Selecciona nuevo estado
|
||||
4. Marca caras afectadas (si aplica)
|
||||
5. Agrega observaciones
|
||||
6. Guarda cambios
|
||||
7. Sistema actualiza vista y registra historial
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL odontogramas | Completado | `database/schemas/01-dental-schema-ddl.sql` |
|
||||
| Seeds piezas | Completado | 52 piezas FDI |
|
||||
| odontograma.module.ts | Pendiente | `backend/modules/odontograma/` |
|
||||
| odontograma.service.ts | Pendiente | `backend/services/` |
|
||||
| OdontogramaViewer.tsx | Pendiente | `frontend/components/` |
|
||||
| PiezaEditor.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- clinica.patients (erp-clinicas)
|
||||
- Auth/Tenants (erp-core)
|
||||
|
||||
### Bloquea a
|
||||
- DENTAL-002 (Tratamientos - asociacion a pieza)
|
||||
- DENTAL-006 (Presupuestos - lineas por pieza)
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] Vista grafica de 32 piezas adulto
|
||||
- [ ] Vista grafica de 20 piezas deciduo
|
||||
- [ ] Click en pieza abre editor
|
||||
- [ ] Estados se reflejan en colores
|
||||
- [ ] Caras afectadas se registran
|
||||
- [ ] Historial muestra cambios
|
||||
- [ ] Comparativa entre fechas funciona
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
212
docs/01-epicas/DENTAL-002-tratamientos.md
Normal file
212
docs/01-epicas/DENTAL-002-tratamientos.md
Normal file
@ -0,0 +1,212 @@
|
||||
# DENTAL-002: Tratamientos Dentales
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** DENTAL-002
|
||||
- **Modulo:** Tratamientos
|
||||
- **Prioridad:** P0
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 2 - Tratamientos
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion de tratamientos odontologicos: catalogo de procedimientos, planes de tratamiento personalizados, seguimiento de citas, asociacion a piezas dentales y costos.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Catalogo de procedimientos dentales
|
||||
2. Planes de tratamiento por paciente
|
||||
3. Asociacion tratamiento-pieza dental
|
||||
4. Seguimiento de estado
|
||||
5. Registro de costos
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Catalogo de tratamientos por tenant
|
||||
- Categorias: prevencion, restauracion, endodoncia, etc.
|
||||
- Asociacion a pieza y caras especificas
|
||||
- Estados: pendiente, en_proceso, completado, cancelado
|
||||
- Duracion estimada y real
|
||||
- Precios y descuentos
|
||||
- Vinculacion con citas
|
||||
|
||||
### Excluido
|
||||
- Generacion automatica de presupuestos (ver DENTAL-006)
|
||||
- Integracion con inventario de materiales
|
||||
- Consentimientos informados digitales
|
||||
|
||||
## Catalogo de Procedimientos
|
||||
|
||||
### Prevencion
|
||||
| Codigo | Procedimiento | Duracion | Precio Base |
|
||||
|--------|---------------|----------|-------------|
|
||||
| PREV-001 | Limpieza dental (profilaxis) | 30 min | $500 |
|
||||
| PREV-002 | Aplicacion de fluor | 15 min | $200 |
|
||||
| PREV-003 | Selladores de fosetas | 20 min | $350 |
|
||||
| PREV-004 | Detartraje | 45 min | $800 |
|
||||
|
||||
### Restauracion
|
||||
| Codigo | Procedimiento | Duracion | Precio Base |
|
||||
|--------|---------------|----------|-------------|
|
||||
| REST-001 | Resina simple (1 cara) | 30 min | $600 |
|
||||
| REST-002 | Resina compuesta (2+ caras) | 45 min | $900 |
|
||||
| REST-003 | Incrustacion inlay | 60 min | $2,500 |
|
||||
| REST-004 | Incrustacion onlay | 60 min | $3,000 |
|
||||
| REST-005 | Reconstruccion | 60 min | $1,500 |
|
||||
|
||||
### Endodoncia
|
||||
| Codigo | Procedimiento | Duracion | Precio Base |
|
||||
|--------|---------------|----------|-------------|
|
||||
| ENDO-001 | Conductos unirradicular | 60 min | $2,500 |
|
||||
| ENDO-002 | Conductos birradicular | 90 min | $3,500 |
|
||||
| ENDO-003 | Conductos multirradicular | 120 min | $4,500 |
|
||||
| ENDO-004 | Retratamiento | 90 min | $3,000 |
|
||||
|
||||
### Cirugia
|
||||
| Codigo | Procedimiento | Duracion | Precio Base |
|
||||
|--------|---------------|----------|-------------|
|
||||
| CIR-001 | Extraccion simple | 30 min | $600 |
|
||||
| CIR-002 | Extraccion quirurgica | 45 min | $1,200 |
|
||||
| CIR-003 | Tercer molar retenido | 60 min | $2,500 |
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tablas
|
||||
|
||||
**dental.tratamientos_catalogo**
|
||||
- id, tenant_id, codigo, nombre
|
||||
- categoria, descripcion
|
||||
- duracion_minutos, precio_base
|
||||
- requiere_rx, requiere_anestesia
|
||||
- active
|
||||
|
||||
**dental.tratamientos_paciente**
|
||||
- id, tenant_id, patient_id
|
||||
- odontograma_id, tratamiento_id
|
||||
- odontologo_id, consultation_id
|
||||
- pieza_id, caras_tratadas[]
|
||||
- fecha_inicio, fecha_fin
|
||||
- estado, precio, descuento, precio_final
|
||||
- notas
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /tratamientos/catalogo | Listar catalogo |
|
||||
| POST | /tratamientos/catalogo | Crear procedimiento |
|
||||
| PUT | /tratamientos/catalogo/:id | Actualizar |
|
||||
| DELETE | /tratamientos/catalogo/:id | Desactivar |
|
||||
| GET | /patients/:id/tratamientos | Tratamientos de paciente |
|
||||
| POST | /patients/:id/tratamientos | Crear tratamiento |
|
||||
| PUT | /tratamientos/:id | Actualizar tratamiento |
|
||||
| PUT | /tratamientos/:id/estado | Cambiar estado |
|
||||
| GET | /tratamientos/pendientes | Tratamientos pendientes |
|
||||
| GET | /tratamientos/hoy | Tratamientos del dia |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface TratamientosService {
|
||||
// Catalogo
|
||||
getCatalogo(filters?: CatalogoFilters): Promise<Tratamiento[]>;
|
||||
createProcedimiento(data: CreateProcedimiento): Promise<Tratamiento>;
|
||||
|
||||
// Tratamientos paciente
|
||||
getByPatient(patientId: string): Promise<TratamientoPaciente[]>;
|
||||
create(data: CreateTratamientoPaciente): Promise<TratamientoPaciente>;
|
||||
updateEstado(id: string, estado: EstadoTratamiento): Promise<TratamientoPaciente>;
|
||||
|
||||
// Reportes
|
||||
getPendientes(odontologoId?: string): Promise<TratamientoPaciente[]>;
|
||||
getCompletadosHoy(): Promise<TratamientoPaciente[]>;
|
||||
}
|
||||
|
||||
interface CreateTratamientoPaciente {
|
||||
patientId: string;
|
||||
tratamientoId: string;
|
||||
odontologoId: string;
|
||||
piezaId?: string;
|
||||
carasTratadas?: CaraDental[];
|
||||
precio?: number;
|
||||
descuento?: number;
|
||||
notas?: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Registrar Tratamiento
|
||||
|
||||
```
|
||||
1. Odontologo en consulta del paciente
|
||||
2. Revisa odontograma actual
|
||||
3. Identifica pieza a tratar
|
||||
4. Selecciona procedimiento del catalogo
|
||||
5. Especifica caras afectadas (si aplica)
|
||||
6. Confirma precio (puede aplicar descuento)
|
||||
7. Guarda tratamiento como "pendiente" o "en_proceso"
|
||||
8. Sistema actualiza estado del odontograma
|
||||
```
|
||||
|
||||
### Completar Tratamiento
|
||||
|
||||
```
|
||||
1. Odontologo abre tratamiento en curso
|
||||
2. Registra notas del procedimiento
|
||||
3. Cambia estado a "completado"
|
||||
4. Sistema registra fecha de finalizacion
|
||||
5. Actualiza odontograma automaticamente
|
||||
6. Tratamiento listo para facturacion
|
||||
```
|
||||
|
||||
## Estados de Tratamiento
|
||||
|
||||
```
|
||||
pendiente ──► en_proceso ──► completado
|
||||
│ │
|
||||
└──────────────┴──► cancelado
|
||||
```
|
||||
|
||||
| Estado | Descripcion | Facturar |
|
||||
|--------|-------------|----------|
|
||||
| pendiente | Agendado, no iniciado | No |
|
||||
| en_proceso | En ejecucion | Parcial |
|
||||
| completado | Finalizado | Si |
|
||||
| cancelado | No se realizara | No |
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL tratamientos | Completado | `database/schemas/01-dental-schema-ddl.sql` |
|
||||
| tratamientos.module.ts | Pendiente | `backend/modules/tratamientos/` |
|
||||
| tratamientos.service.ts | Pendiente | `backend/services/` |
|
||||
| Seeds catalogo | Pendiente | `database/seeds/` |
|
||||
| TratamientosList.tsx | Pendiente | `frontend/components/` |
|
||||
| TratamientoForm.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- DENTAL-001 (Odontograma)
|
||||
- clinica.patients (erp-clinicas)
|
||||
- clinica.consultations (erp-clinicas)
|
||||
|
||||
### Bloquea a
|
||||
- DENTAL-006 (Presupuestos)
|
||||
- Facturacion
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] Catalogo de procedimientos por tenant
|
||||
- [ ] CRUD de tratamientos por paciente
|
||||
- [ ] Asociacion a pieza dental
|
||||
- [ ] Estados se actualizan correctamente
|
||||
- [ ] Historial de tratamientos visible
|
||||
- [ ] Precio final calcula con descuento
|
||||
- [ ] Integracion con citas funciona
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
249
docs/01-epicas/DENTAL-003-ortodoncia.md
Normal file
249
docs/01-epicas/DENTAL-003-ortodoncia.md
Normal file
@ -0,0 +1,249 @@
|
||||
# DENTAL-003: Ortodoncia
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** DENTAL-003
|
||||
- **Modulo:** Ortodoncia
|
||||
- **Prioridad:** P1
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 3 - Especialidades
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion de tratamientos de ortodoncia: registro de casos, tipos de aparatologia, seguimiento de citas de ajuste, control de progreso, planes de pago, y finalizacion con retenedores.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Registro de casos de ortodoncia
|
||||
2. Tipos de aparatologia (brackets, alineadores)
|
||||
3. Citas de ajuste mensuales
|
||||
4. Seguimiento de progreso
|
||||
5. Plan de pagos (enganche + mensualidades)
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Tipos: brackets metalicos, esteticos, linguales, alineadores
|
||||
- Registro de fecha inicio/fin estimada
|
||||
- Citas de control con detalles de ajuste
|
||||
- Fotos de progreso (vinculo a storage)
|
||||
- Control de arcos, ligas, elasticos
|
||||
- Plan de pago con financiamiento
|
||||
|
||||
### Excluido
|
||||
- Cefalometria digital
|
||||
- Simulacion de resultados
|
||||
- Analisis de modelos 3D
|
||||
|
||||
## Tipos de Ortodoncia
|
||||
|
||||
| Tipo | Descripcion | Duracion Tipica |
|
||||
|------|-------------|-----------------|
|
||||
| brackets_metalicos | Brackets tradicionales | 18-24 meses |
|
||||
| brackets_esteticos | Brackets ceramicos/zafiro | 18-24 meses |
|
||||
| brackets_linguales | Brackets en cara interna | 18-30 meses |
|
||||
| alineadores | Alineadores transparentes | 12-18 meses |
|
||||
| removible | Aparatos removibles | Variable |
|
||||
| retenedor | Post-tratamiento | Indefinido |
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tablas
|
||||
|
||||
**dental.ortodoncia**
|
||||
- id, tenant_id, patient_id, odontologo_id
|
||||
- tipo (ENUM), marca
|
||||
- fecha_inicio, fecha_estimada_fin, fecha_real_fin
|
||||
- estado, meses_estimados
|
||||
- costo_total, enganche, mensualidad
|
||||
- notas
|
||||
|
||||
**dental.ortodoncia_citas**
|
||||
- id, tenant_id, ortodoncia_id
|
||||
- appointment_id
|
||||
- fecha, numero_cita
|
||||
- procedimiento
|
||||
- arco_superior, arco_inferior, ligas
|
||||
- observaciones, proxima_cita
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /ortodoncia | Listar casos activos |
|
||||
| GET | /ortodoncia/:id | Detalle de caso |
|
||||
| POST | /ortodoncia | Crear caso |
|
||||
| PUT | /ortodoncia/:id | Actualizar caso |
|
||||
| PUT | /ortodoncia/:id/finalizar | Finalizar tratamiento |
|
||||
| GET | /ortodoncia/:id/citas | Historial de citas |
|
||||
| POST | /ortodoncia/:id/citas | Registrar cita |
|
||||
| GET | /patients/:id/ortodoncia | Casos del paciente |
|
||||
| GET | /ortodoncia/proximas-citas | Citas proximas |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface OrtodonticService {
|
||||
getCasosActivos(): Promise<CasoOrtodoncia[]>;
|
||||
getById(id: string): Promise<CasoOrtodoncia>;
|
||||
create(data: CreateCasoOrtodoncia): Promise<CasoOrtodoncia>;
|
||||
registrarCita(casoId: string, data: CitaOrtodoncia): Promise<CitaOrtodoncia>;
|
||||
finalizar(id: string, data: FinalizarOrtodoncia): Promise<CasoOrtodoncia>;
|
||||
getProximasCitas(dias: number): Promise<CitaOrtodoncia[]>;
|
||||
}
|
||||
|
||||
interface CreateCasoOrtodoncia {
|
||||
patientId: string;
|
||||
odontologoId: string;
|
||||
tipo: TipoOrtodoncia;
|
||||
marca?: string;
|
||||
fechaInicio: Date;
|
||||
mesesEstimados: number;
|
||||
costoTotal: number;
|
||||
enganche?: number;
|
||||
mensualidad?: number;
|
||||
}
|
||||
|
||||
interface CitaOrtodoncia {
|
||||
fecha: Date;
|
||||
numeroCita: number;
|
||||
procedimiento: string;
|
||||
arcoSuperior?: string;
|
||||
arcoInferior?: string;
|
||||
ligas?: string;
|
||||
observaciones?: string;
|
||||
proximaCita?: Date;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Iniciar Caso de Ortodoncia
|
||||
|
||||
```
|
||||
1. Consulta de valoracion ortodontica
|
||||
2. Estudios iniciales (Rx panoramica, fotos, modelos)
|
||||
3. Diagnostico y plan de tratamiento
|
||||
4. Presentar presupuesto al paciente
|
||||
5. Paciente acepta y paga enganche
|
||||
6. Crear caso de ortodoncia en sistema
|
||||
7. Agendar cita de colocacion
|
||||
8. Colocar aparatologia
|
||||
9. Registrar primera cita
|
||||
```
|
||||
|
||||
### Cita de Ajuste Mensual
|
||||
|
||||
```
|
||||
1. Paciente llega a cita programada
|
||||
2. Revision de aparatologia
|
||||
3. Cambio de arcos/ligas si necesario
|
||||
4. Registrar procedimiento realizado
|
||||
5. Tomar fotos de progreso (opcional)
|
||||
6. Agendar proxima cita
|
||||
7. Cobrar mensualidad
|
||||
```
|
||||
|
||||
### Finalizacion
|
||||
|
||||
```
|
||||
1. Tratamiento activo completo
|
||||
2. Retiro de aparatologia
|
||||
3. Colocacion de retenedores
|
||||
4. Marcar caso como "finalizado"
|
||||
5. Crear nuevo caso tipo "retenedor"
|
||||
6. Programar citas de revision (3, 6, 12 meses)
|
||||
```
|
||||
|
||||
## Plan de Pagos
|
||||
|
||||
```typescript
|
||||
interface PlanPagoOrtodoncia {
|
||||
costoTotal: number; // $45,000
|
||||
enganche: number; // $10,000
|
||||
saldoPendiente: number; // $35,000
|
||||
numeroPagos: number; // 18
|
||||
montoPago: number; // $1,944.44
|
||||
fechaInicio: Date;
|
||||
pagosRealizados: number;
|
||||
saldoActual: number;
|
||||
}
|
||||
```
|
||||
|
||||
## Componentes Frontend
|
||||
|
||||
### OrtodonciaTimeline
|
||||
|
||||
```typescript
|
||||
// Visualizacion de progreso del tratamiento
|
||||
interface OrtodonciaTimelineProps {
|
||||
caso: CasoOrtodoncia;
|
||||
citas: CitaOrtodoncia[];
|
||||
}
|
||||
|
||||
// Muestra:
|
||||
// - Linea de tiempo con citas
|
||||
// - Progreso vs estimado
|
||||
// - Proxima cita destacada
|
||||
// - Fotos de progreso
|
||||
```
|
||||
|
||||
### CitaOrtodonticaForm
|
||||
|
||||
```typescript
|
||||
interface CitaOrtodonticaFormProps {
|
||||
casoId: string;
|
||||
numeroCita: number;
|
||||
onSave: (data: CitaOrtodoncia) => void;
|
||||
}
|
||||
|
||||
// Campos:
|
||||
// - Procedimiento realizado
|
||||
// - Arco superior/inferior
|
||||
// - Ligas/elasticos
|
||||
// - Observaciones
|
||||
// - Fecha proxima cita
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL ortodoncia | Completado | `database/schemas/01-dental-schema-ddl.sql` |
|
||||
| ortodoncia.module.ts | Pendiente | `backend/modules/ortodoncia/` |
|
||||
| ortodoncia.service.ts | Pendiente | `backend/services/` |
|
||||
| OrtodonciaTimeline.tsx | Pendiente | `frontend/components/` |
|
||||
| CitaOrtodonticaForm.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- clinica.patients (erp-clinicas)
|
||||
- clinica.appointments (erp-clinicas)
|
||||
- DENTAL-006 (Presupuestos - para plan de pago)
|
||||
|
||||
### Bloquea a
|
||||
- Reportes de ortodoncia
|
||||
- Recordatorios automaticos
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] CRUD de casos de ortodoncia
|
||||
- [ ] Tipos de aparatologia correctos
|
||||
- [ ] Citas de ajuste se registran
|
||||
- [ ] Progreso visual en timeline
|
||||
- [ ] Plan de pago funciona
|
||||
- [ ] Finalizacion crea caso retenedor
|
||||
- [ ] Proximas citas se listan
|
||||
|
||||
## Metricas
|
||||
|
||||
| Metrica | Descripcion |
|
||||
|---------|-------------|
|
||||
| Casos activos | Tratamientos en curso |
|
||||
| Tasa finalizacion | % que completan tratamiento |
|
||||
| Duracion promedio | Meses reales vs estimados |
|
||||
| Desercion | Pacientes que abandonan |
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
227
docs/01-epicas/DENTAL-004-protesis.md
Normal file
227
docs/01-epicas/DENTAL-004-protesis.md
Normal file
@ -0,0 +1,227 @@
|
||||
# DENTAL-004: Protesis Dentales
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** DENTAL-004
|
||||
- **Modulo:** Protesis
|
||||
- **Prioridad:** P1
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 3 - Especialidades
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion de trabajos protesicos: coronas, puentes, dentaduras, implantes. Incluye ordenes de trabajo a laboratorio, seguimiento de estatus, materiales, colores, y garantias.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Registro de trabajos protesicos
|
||||
2. Ordenes a laboratorio dental
|
||||
3. Seguimiento de estatus
|
||||
4. Control de materiales y colores
|
||||
5. Gestion de garantias
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Tipos: corona, puente, parcial removible, total, implante
|
||||
- Piezas involucradas en el trabajo
|
||||
- Integracion con laboratorios externos
|
||||
- Fechas: impresion, envio lab, recepcion, colocacion
|
||||
- Material y color (guia VITA)
|
||||
- Garantias configurables
|
||||
- Costo laboratorio vs precio paciente
|
||||
|
||||
### Excluido
|
||||
- Diseno CAD/CAM propio
|
||||
- Impresion 3D in-house
|
||||
- Inventario de protesis prefabricadas
|
||||
|
||||
## Tipos de Protesis
|
||||
|
||||
| Tipo | Descripcion | Piezas |
|
||||
|------|-------------|--------|
|
||||
| corona | Corona unitaria | 1 |
|
||||
| puente | Puente fijo | 3+ |
|
||||
| parcial | Dentadura parcial removible | Variable |
|
||||
| total | Dentadura completa | 14/16 |
|
||||
| implante | Implante con corona | 1 |
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tabla: dental.protesis
|
||||
|
||||
| Campo | Tipo | Descripcion |
|
||||
|-------|------|-------------|
|
||||
| id | UUID | PK |
|
||||
| tenant_id | UUID | FK tenants |
|
||||
| patient_id | UUID | FK patients |
|
||||
| odontologo_id | UUID | FK doctors |
|
||||
| tipo | VARCHAR(50) | corona, puente, etc. |
|
||||
| piezas_involucradas | TEXT[] | ['11', '12', '13'] |
|
||||
| laboratorio_id | UUID | FK proveedores |
|
||||
| fecha_envio_lab | DATE | Envio de impresion |
|
||||
| fecha_recepcion_lab | DATE | Recepcion del trabajo |
|
||||
| material | VARCHAR(100) | Zirconia, metal-porcelana |
|
||||
| color | VARCHAR(50) | A2, B1, etc. |
|
||||
| estado | ENUM | en_proceso, completado |
|
||||
| fecha_colocacion | DATE | Fecha de cementado |
|
||||
| tiene_garantia | BOOLEAN | |
|
||||
| meses_garantia | INTEGER | 12, 24, etc. |
|
||||
| costo_laboratorio | NUMERIC | Costo del lab |
|
||||
| precio_paciente | NUMERIC | Precio cobrado |
|
||||
|
||||
## Estados del Trabajo
|
||||
|
||||
```
|
||||
impresion ──► laboratorio ──► prueba ──► ajuste ──► cementado ──► entregado
|
||||
│
|
||||
└──► devolucion (si hay problemas)
|
||||
```
|
||||
|
||||
| Estado | Descripcion |
|
||||
|--------|-------------|
|
||||
| impresion | Toma de impresion/escaneo |
|
||||
| laboratorio | Enviado al laboratorio |
|
||||
| prueba | Prueba en boca |
|
||||
| ajuste | Requiere ajustes |
|
||||
| cementado | Cementado definitivo |
|
||||
| entregado | Finalizado |
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /protesis | Listar trabajos |
|
||||
| GET | /protesis/:id | Detalle de trabajo |
|
||||
| POST | /protesis | Crear trabajo |
|
||||
| PUT | /protesis/:id | Actualizar trabajo |
|
||||
| PUT | /protesis/:id/estado | Cambiar estado |
|
||||
| GET | /patients/:id/protesis | Trabajos del paciente |
|
||||
| GET | /protesis/laboratorio | Pendientes en lab |
|
||||
| GET | /protesis/garantias | Garantias activas |
|
||||
| POST | /protesis/:id/garantia | Reclamacion garantia |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface ProtesisService {
|
||||
getAll(filters?: ProtesisFilters): Promise<TrabajoProtesico[]>;
|
||||
getById(id: string): Promise<TrabajoProtesico>;
|
||||
create(data: CreateProtesis): Promise<TrabajoProtesico>;
|
||||
updateEstado(id: string, estado: EstadoProtesis): Promise<TrabajoProtesico>;
|
||||
getPendientesLab(): Promise<TrabajoProtesico[]>;
|
||||
getGarantiasActivas(): Promise<TrabajoProtesico[]>;
|
||||
reclamarGarantia(id: string, motivo: string): Promise<TrabajoProtesico>;
|
||||
}
|
||||
|
||||
interface CreateProtesis {
|
||||
patientId: string;
|
||||
odontologoId: string;
|
||||
tipo: TipoProtesis;
|
||||
piezasInvolucradas: string[];
|
||||
laboratorioId?: string;
|
||||
material: string;
|
||||
color: string;
|
||||
tieneGarantia: boolean;
|
||||
mesesGarantia?: number;
|
||||
costoLaboratorio: number;
|
||||
precioPaciente: number;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Crear Trabajo Protesico
|
||||
|
||||
```
|
||||
1. Paciente requiere corona/puente
|
||||
2. Preparacion dental (tallado)
|
||||
3. Toma de impresion o escaneo digital
|
||||
4. Seleccion de material y color
|
||||
5. Crear registro en sistema (estado: impresion)
|
||||
6. Generar orden de laboratorio
|
||||
7. Enviar al laboratorio (estado: laboratorio)
|
||||
```
|
||||
|
||||
### Recepcion y Colocacion
|
||||
|
||||
```
|
||||
1. Laboratorio entrega trabajo
|
||||
2. Registrar recepcion (estado: prueba)
|
||||
3. Prueba en boca del paciente
|
||||
4. Si ajustes necesarios: devolver a lab
|
||||
5. Si ok: cementar (estado: cementado)
|
||||
6. Dar indicaciones al paciente
|
||||
7. Marcar como entregado
|
||||
8. Registrar garantia
|
||||
```
|
||||
|
||||
### Reclamacion de Garantia
|
||||
|
||||
```
|
||||
1. Paciente reporta problema
|
||||
2. Verificar periodo de garantia
|
||||
3. Evaluar tipo de falla
|
||||
4. Si aplica garantia:
|
||||
- Crear nuevo trabajo sin costo
|
||||
- Enviar a laboratorio para refaccion
|
||||
5. Si no aplica: presupuesto normal
|
||||
```
|
||||
|
||||
## Guia de Colores VITA
|
||||
|
||||
| Codigo | Nombre | Descripcion |
|
||||
|--------|--------|-------------|
|
||||
| A1 | Muy claro | Blanquecino |
|
||||
| A2 | Claro | Ligeramente amarillo |
|
||||
| A3 | Medio | Amarillo medio |
|
||||
| A3.5 | Medio-oscuro | Amarillo intenso |
|
||||
| A4 | Oscuro | Amarillo oscuro |
|
||||
| B1 | Claro | Ligeramente naranja |
|
||||
| B2 | Medio | Naranja claro |
|
||||
| C1, C2 | Gris | Tonos grisaceos |
|
||||
| D2, D3 | Rojizo | Tonos rojizos |
|
||||
|
||||
## Materiales Comunes
|
||||
|
||||
| Material | Uso | Durabilidad |
|
||||
|----------|-----|-------------|
|
||||
| Metal-porcelana | Posterior | Alta |
|
||||
| Zirconia | Anterior/Posterior | Muy alta |
|
||||
| Disilicato litio | Anterior | Alta |
|
||||
| Resina | Provisional | Baja |
|
||||
| Acrilico | Dentaduras | Media |
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL protesis | Completado | `database/schemas/01-dental-schema-ddl.sql` |
|
||||
| protesis.module.ts | Pendiente | `backend/modules/protesis/` |
|
||||
| protesis.service.ts | Pendiente | `backend/services/` |
|
||||
| OrdenLaboratorio.tsx | Pendiente | `frontend/components/` |
|
||||
| ProtesisTracker.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- clinica.patients (erp-clinicas)
|
||||
- DENTAL-001 (Odontograma - piezas)
|
||||
- Catalogo proveedores (laboratorios)
|
||||
|
||||
### Bloquea a
|
||||
- Reportes de protesis
|
||||
- Integracion con laboratorios digitales
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] CRUD de trabajos protesicos
|
||||
- [ ] Estados se actualizan correctamente
|
||||
- [ ] Piezas involucradas se registran
|
||||
- [ ] Orden a laboratorio se genera
|
||||
- [ ] Color y material se guardan
|
||||
- [ ] Garantias se controlan
|
||||
- [ ] Costos lab vs paciente
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
250
docs/01-epicas/DENTAL-005-radiografias.md
Normal file
250
docs/01-epicas/DENTAL-005-radiografias.md
Normal file
@ -0,0 +1,250 @@
|
||||
# DENTAL-005: Radiografias Dentales
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** DENTAL-005
|
||||
- **Modulo:** Radiografias
|
||||
- **Prioridad:** P2
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 4 - Optimizacion
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion de radiografias dentales: registro de diferentes tipos de Rx, asociacion a piezas y consultas, almacenamiento de imagenes, e interpretacion diagnostica.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Registro de radiografias por tipo
|
||||
2. Asociacion a pieza dental
|
||||
3. Almacenamiento de imagenes
|
||||
4. Interpretacion diagnostica
|
||||
5. Historial por paciente
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Tipos: periapical, panoramica, cefalometrica, oclusal, bitewing
|
||||
- Asociacion a pieza especifica (periapicales)
|
||||
- Vinculo a consulta donde se tomo
|
||||
- URL a imagen almacenada
|
||||
- Campo de interpretacion (texto)
|
||||
- Historial cronologico
|
||||
|
||||
### Excluido
|
||||
- Captura directa desde sensor RVG
|
||||
- Analisis automatico con IA
|
||||
- Visor DICOM integrado
|
||||
- Cefalometria digital
|
||||
|
||||
## Tipos de Radiografias
|
||||
|
||||
| Tipo | Descripcion | Uso Comun |
|
||||
|------|-------------|-----------|
|
||||
| periapical | Rx de 1-2 piezas | Diagnostico de caries, endodoncia |
|
||||
| bitewing | Interproximal | Caries interproximales |
|
||||
| oclusal | Vista oclusal | Piso de boca, paladar |
|
||||
| panoramica | Ortopantomografia | Vision general, ortodoncia |
|
||||
| cefalometrica | Lateral de craneo | Ortodoncia |
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tabla: dental.radiografias
|
||||
|
||||
| Campo | Tipo | Descripcion |
|
||||
|-------|------|-------------|
|
||||
| id | UUID | PK |
|
||||
| tenant_id | UUID | FK tenants |
|
||||
| patient_id | UUID | FK patients |
|
||||
| consultation_id | UUID | FK consultations (opcional) |
|
||||
| tipo | VARCHAR(50) | periapical, panoramica, etc. |
|
||||
| pieza_id | UUID | FK piezas_dentales (opcional) |
|
||||
| fecha | DATE | Fecha de la toma |
|
||||
| url_imagen | VARCHAR(255) | URL en storage |
|
||||
| interpretacion | TEXT | Hallazgos |
|
||||
| created_at | TIMESTAMPTZ | Timestamp creacion |
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /patients/:id/radiografias | Radiografias del paciente |
|
||||
| GET | /radiografias/:id | Detalle de radiografia |
|
||||
| POST | /radiografias | Registrar radiografia |
|
||||
| PUT | /radiografias/:id | Actualizar (interpretacion) |
|
||||
| DELETE | /radiografias/:id | Eliminar |
|
||||
| POST | /radiografias/:id/upload | Subir imagen |
|
||||
| GET | /radiografias/:id/imagen | Obtener URL imagen |
|
||||
| GET | /radiografias/pieza/:piezaId | Rx de una pieza |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface RadiografiasService {
|
||||
getByPatient(patientId: string): Promise<Radiografia[]>;
|
||||
getById(id: string): Promise<Radiografia>;
|
||||
create(data: CreateRadiografia): Promise<Radiografia>;
|
||||
updateInterpretacion(id: string, interpretacion: string): Promise<Radiografia>;
|
||||
uploadImage(id: string, file: File): Promise<string>;
|
||||
getByPieza(piezaId: string): Promise<Radiografia[]>;
|
||||
}
|
||||
|
||||
interface CreateRadiografia {
|
||||
patientId: string;
|
||||
consultationId?: string;
|
||||
tipo: TipoRadiografia;
|
||||
piezaId?: string;
|
||||
fecha: Date;
|
||||
interpretacion?: string;
|
||||
}
|
||||
|
||||
interface Radiografia {
|
||||
id: string;
|
||||
patientId: string;
|
||||
tipo: TipoRadiografia;
|
||||
pieza?: PiezaDental;
|
||||
fecha: Date;
|
||||
urlImagen?: string;
|
||||
interpretacion?: string;
|
||||
createdAt: Date;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Registrar Radiografia
|
||||
|
||||
```
|
||||
1. Durante consulta, odontologo solicita Rx
|
||||
2. Tecnico toma la radiografia
|
||||
3. Exporta imagen del sensor/equipo
|
||||
4. En sistema, crear registro de radiografia
|
||||
5. Subir imagen al storage
|
||||
6. Asociar a pieza (si periapical)
|
||||
7. Odontologo escribe interpretacion
|
||||
8. Guardar registro
|
||||
```
|
||||
|
||||
### Consultar Historial
|
||||
|
||||
```
|
||||
1. Odontologo abre expediente del paciente
|
||||
2. Navega a seccion "Radiografias"
|
||||
3. Ve listado cronologico
|
||||
4. Filtra por tipo o pieza
|
||||
5. Click en miniatura abre visor
|
||||
6. Puede comparar con Rx anteriores
|
||||
```
|
||||
|
||||
## Interpretacion Estructurada
|
||||
|
||||
```typescript
|
||||
interface InterpretacionRadiografia {
|
||||
hallazgos: string[]; // Lista de hallazgos
|
||||
diagnostico?: string; // Diagnostico principal
|
||||
recomendaciones?: string; // Tratamiento sugerido
|
||||
comparativaAnterior?: string; // Cambios vs Rx previa
|
||||
}
|
||||
|
||||
// Ejemplo:
|
||||
{
|
||||
hallazgos: [
|
||||
"Lesion radiolucida apical en pieza 36",
|
||||
"Obturacion deficiente en conducto distal",
|
||||
"Ensanchamiento del ligamento periodontal"
|
||||
],
|
||||
diagnostico: "Periodontitis apical cronica",
|
||||
recomendaciones: "Retratamiento de conductos + corona"
|
||||
}
|
||||
```
|
||||
|
||||
## Almacenamiento de Imagenes
|
||||
|
||||
```typescript
|
||||
// Estructura de paths
|
||||
// storage/
|
||||
// └── {tenant_id}/
|
||||
// └── radiografias/
|
||||
// └── {patient_id}/
|
||||
// └── {radiografia_id}.jpg
|
||||
|
||||
// Integracion con modulo Storage
|
||||
async uploadImage(radiografiaId: string, file: File): Promise<string> {
|
||||
const radiografia = await this.getById(radiografiaId);
|
||||
|
||||
const path = `radiografias/${radiografia.patientId}/${radiografiaId}`;
|
||||
const url = await this.storageService.upload(file, path);
|
||||
|
||||
await this.update(radiografiaId, { urlImagen: url });
|
||||
return url;
|
||||
}
|
||||
```
|
||||
|
||||
## Visor de Radiografias
|
||||
|
||||
```typescript
|
||||
interface RadiogViewer {
|
||||
// Funcionalidades basicas
|
||||
zoom: (factor: number) => void;
|
||||
pan: (x: number, y: number) => void;
|
||||
rotate: (degrees: number) => void;
|
||||
|
||||
// Ajustes de imagen
|
||||
brightness: (value: number) => void;
|
||||
contrast: (value: number) => void;
|
||||
invert: () => void;
|
||||
|
||||
// Herramientas
|
||||
ruler: () => void; // Medir distancias
|
||||
annotate: () => void; // Agregar notas
|
||||
}
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL radiografias | Completado | `database/schemas/01-dental-schema-ddl.sql` |
|
||||
| radiografias.module.ts | Pendiente | `backend/modules/radiografias/` |
|
||||
| radiografias.service.ts | Pendiente | `backend/services/` |
|
||||
| RadiografiasGrid.tsx | Pendiente | `frontend/components/` |
|
||||
| RadiogViewer.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- clinica.patients (erp-clinicas)
|
||||
- clinica.consultations (erp-clinicas)
|
||||
- DENTAL-001 (Odontograma - piezas)
|
||||
- Storage service (para imagenes)
|
||||
|
||||
### Bloquea a
|
||||
- Exportacion a PACS
|
||||
- Analisis con IA
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] Registro de Rx por tipo
|
||||
- [ ] Asociacion a pieza funciona
|
||||
- [ ] Upload de imagen funciona
|
||||
- [ ] Visor basico (zoom, pan)
|
||||
- [ ] Interpretacion se guarda
|
||||
- [ ] Historial por paciente
|
||||
- [ ] Filtros funcionan
|
||||
|
||||
## Consideraciones
|
||||
|
||||
### Formatos Soportados
|
||||
- JPEG (comprimido)
|
||||
- PNG (sin perdida)
|
||||
- DICOM (futuro)
|
||||
|
||||
### Tamano Maximo
|
||||
- 10 MB por imagen
|
||||
- Resolucion recomendada: 1024x768 min
|
||||
|
||||
### Retencion
|
||||
- Minimo 5 anos (regulatorio)
|
||||
- Backup automatico
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
261
docs/01-epicas/DENTAL-006-presupuestos.md
Normal file
261
docs/01-epicas/DENTAL-006-presupuestos.md
Normal file
@ -0,0 +1,261 @@
|
||||
# DENTAL-006: Presupuestos
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** DENTAL-006
|
||||
- **Modulo:** Presupuestos
|
||||
- **Prioridad:** P0
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 2 - Tratamientos
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de presupuestos dentales: creacion de planes de tratamiento con costos, lineas de presupuesto por procedimiento y pieza, descuentos, planes de pago, y seguimiento de aceptacion.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Presupuestos detallados por paciente
|
||||
2. Lineas por procedimiento y pieza
|
||||
3. Descuentos globales y por linea
|
||||
4. Opciones de financiamiento
|
||||
5. Seguimiento de estado
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Presupuestos con numero correlativo
|
||||
- Lineas con tratamiento, pieza, cantidad, precio
|
||||
- Descuentos porcentuales y en monto
|
||||
- Fecha de vencimiento
|
||||
- Estados: pendiente, aprobado, rechazado, vencido
|
||||
- Plan de pago (enganche + mensualidades)
|
||||
- Impresion/PDF del presupuesto
|
||||
|
||||
### Excluido
|
||||
- Firma electronica
|
||||
- Consentimiento informado integrado
|
||||
- Generacion automatica desde odontograma
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tablas
|
||||
|
||||
**dental.presupuestos**
|
||||
- id, tenant_id, patient_id, odontologo_id
|
||||
- numero (correlativo)
|
||||
- fecha, fecha_vencimiento
|
||||
- estado (pendiente, aprobado, rechazado, vencido)
|
||||
- subtotal, descuento_porcentaje, descuento_monto, total
|
||||
- requiere_financiamiento, enganche, numero_pagos, monto_pago
|
||||
- notas
|
||||
|
||||
**dental.presupuesto_lineas**
|
||||
- id, tenant_id, presupuesto_id
|
||||
- tratamiento_id, pieza_id
|
||||
- descripcion
|
||||
- cantidad, precio_unitario, descuento, subtotal
|
||||
- sequence
|
||||
|
||||
## Estados del Presupuesto
|
||||
|
||||
```
|
||||
pendiente ──► aprobado ──► en_tratamiento ──► completado
|
||||
│
|
||||
├──► rechazado
|
||||
│
|
||||
└──► vencido (automatico por fecha)
|
||||
```
|
||||
|
||||
| Estado | Descripcion |
|
||||
|--------|-------------|
|
||||
| pendiente | Presentado, esperando decision |
|
||||
| aprobado | Aceptado por el paciente |
|
||||
| rechazado | Rechazado por el paciente |
|
||||
| vencido | Expiro la vigencia |
|
||||
| en_tratamiento | Tratamientos en curso |
|
||||
| completado | Todos los tratamientos finalizados |
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /presupuestos | Listar presupuestos |
|
||||
| GET | /presupuestos/:id | Detalle |
|
||||
| POST | /presupuestos | Crear presupuesto |
|
||||
| PUT | /presupuestos/:id | Actualizar |
|
||||
| DELETE | /presupuestos/:id | Eliminar (solo pendientes) |
|
||||
| PUT | /presupuestos/:id/aprobar | Aprobar |
|
||||
| PUT | /presupuestos/:id/rechazar | Rechazar |
|
||||
| GET | /patients/:id/presupuestos | Presupuestos del paciente |
|
||||
| GET | /presupuestos/:id/pdf | Generar PDF |
|
||||
| POST | /presupuestos/:id/lineas | Agregar linea |
|
||||
| PUT | /presupuestos/:id/lineas/:lineaId | Actualizar linea |
|
||||
| DELETE | /presupuestos/:id/lineas/:lineaId | Eliminar linea |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface PresupuestosService {
|
||||
getAll(filters?: PresupuestoFilters): Promise<Presupuesto[]>;
|
||||
getById(id: string): Promise<Presupuesto>;
|
||||
create(data: CreatePresupuesto): Promise<Presupuesto>;
|
||||
addLinea(presupuestoId: string, linea: CreateLinea): Promise<PresupuestoLinea>;
|
||||
removeLinea(presupuestoId: string, lineaId: string): Promise<void>;
|
||||
aprobar(id: string): Promise<Presupuesto>;
|
||||
rechazar(id: string, motivo?: string): Promise<Presupuesto>;
|
||||
generarPDF(id: string): Promise<Buffer>;
|
||||
calcularTotales(id: string): Promise<PresupuestoTotales>;
|
||||
}
|
||||
|
||||
interface CreatePresupuesto {
|
||||
patientId: string;
|
||||
odontologoId: string;
|
||||
fechaVencimiento?: Date;
|
||||
descuentoPorcentaje?: number;
|
||||
requiereFinanciamiento?: boolean;
|
||||
enganche?: number;
|
||||
numeroPagos?: number;
|
||||
notas?: string;
|
||||
}
|
||||
|
||||
interface CreateLinea {
|
||||
tratamientoId: string;
|
||||
piezaId?: string;
|
||||
descripcion?: string;
|
||||
cantidad: number;
|
||||
precioUnitario: number;
|
||||
descuento?: number;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Crear Presupuesto
|
||||
|
||||
```
|
||||
1. Odontologo realiza exploracion
|
||||
2. Identifica tratamientos necesarios
|
||||
3. Crear nuevo presupuesto
|
||||
4. Agregar lineas:
|
||||
- Seleccionar tratamiento del catalogo
|
||||
- Asociar pieza dental (si aplica)
|
||||
- Ajustar precio si es diferente al base
|
||||
- Aplicar descuento por linea
|
||||
5. Aplicar descuento global (si aplica)
|
||||
6. Configurar plan de pago (si requiere)
|
||||
7. Guardar presupuesto
|
||||
8. Presentar al paciente (imprimir o enviar)
|
||||
```
|
||||
|
||||
### Aprobar Presupuesto
|
||||
|
||||
```
|
||||
1. Paciente acepta presupuesto
|
||||
2. Marcar como "aprobado"
|
||||
3. Si requiere financiamiento:
|
||||
- Registrar enganche recibido
|
||||
- Generar calendario de pagos
|
||||
4. Crear tratamientos a partir de lineas
|
||||
5. Agendar primera cita
|
||||
```
|
||||
|
||||
## Calculo de Totales
|
||||
|
||||
```typescript
|
||||
function calcularTotales(presupuesto: Presupuesto): PresupuestoTotales {
|
||||
// Sumar lineas
|
||||
const subtotal = presupuesto.lineas.reduce((sum, linea) => {
|
||||
const lineaTotal = linea.cantidad * linea.precioUnitario;
|
||||
const lineaDescuento = lineaTotal * (linea.descuento / 100);
|
||||
return sum + (lineaTotal - lineaDescuento);
|
||||
}, 0);
|
||||
|
||||
// Descuento global
|
||||
let descuentoMonto = 0;
|
||||
if (presupuesto.descuentoPorcentaje > 0) {
|
||||
descuentoMonto = subtotal * (presupuesto.descuentoPorcentaje / 100);
|
||||
}
|
||||
|
||||
const total = subtotal - descuentoMonto;
|
||||
|
||||
// Plan de pago
|
||||
let montoPago = 0;
|
||||
if (presupuesto.requiereFinanciamiento && presupuesto.numeroPagos > 0) {
|
||||
const saldo = total - (presupuesto.enganche || 0);
|
||||
montoPago = saldo / presupuesto.numeroPagos;
|
||||
}
|
||||
|
||||
return { subtotal, descuentoMonto, total, montoPago };
|
||||
}
|
||||
```
|
||||
|
||||
## Formato PDF
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ [LOGO] CLINICA DENTAL XYZ │
|
||||
│ RFC: ABC123456789 │
|
||||
│ Direccion: Calle 123, Ciudad │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ PRESUPUESTO No. PRE-2026-0001 │
|
||||
│ Fecha: 07/01/2026 Vigencia: 07/02/2026 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ PACIENTE: Juan Perez Garcia │
|
||||
│ ODONTOLOGO: Dr. Maria Lopez │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ # │ Tratamiento │ Pieza │ Cant │ P.U. │Total │
|
||||
│────┼──────────────────────┼───────┼──────┼───────┼──────│
|
||||
│ 1 │ Limpieza dental │ - │ 1 │ $500 │ $500 │
|
||||
│ 2 │ Resina simple │ 36 │ 1 │ $600 │ $600 │
|
||||
│ 3 │ Endodoncia unirrad. │ 16 │ 1 │$2,500 │$2,500│
|
||||
│ 4 │ Corona zirconia │ 16 │ 1 │$6,000 │$6,000│
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Subtotal: $9,600 │
|
||||
│ Descuento (10%): -$960 │
|
||||
│ TOTAL: $8,640 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ PLAN DE PAGO: │
|
||||
│ Enganche: $2,640 12 pagos de: $500 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Notas: │
|
||||
│ - Vigencia de 30 dias │
|
||||
│ - Precios incluyen materiales │
|
||||
│ - No incluye radiografias adicionales │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL presupuestos | Completado | `database/schemas/01-dental-schema-ddl.sql` |
|
||||
| presupuestos.module.ts | Pendiente | `backend/modules/presupuestos/` |
|
||||
| presupuestos.service.ts | Pendiente | `backend/services/` |
|
||||
| pdf.generator.ts | Pendiente | `backend/services/` |
|
||||
| PresupuestoForm.tsx | Pendiente | `frontend/components/` |
|
||||
| PresupuestoViewer.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- clinica.patients (erp-clinicas)
|
||||
- DENTAL-001 (Odontograma - piezas)
|
||||
- DENTAL-002 (Tratamientos - catalogo)
|
||||
|
||||
### Bloquea a
|
||||
- Facturacion
|
||||
- Reportes financieros
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] CRUD de presupuestos
|
||||
- [ ] Agregar/quitar lineas
|
||||
- [ ] Calculos correctos
|
||||
- [ ] Descuentos funcionan
|
||||
- [ ] Estados se actualizan
|
||||
- [ ] Plan de pago se configura
|
||||
- [ ] PDF se genera correctamente
|
||||
- [ ] Vencimiento automatico
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
209
orchestration/trazas/REPORTE-EJECUCION-SPRINT6-2026-01-07.md
Normal file
209
orchestration/trazas/REPORTE-EJECUCION-SPRINT6-2026-01-07.md
Normal file
@ -0,0 +1,209 @@
|
||||
# Reporte de Ejecucion - Sprint 6
|
||||
## Clinica Dental Documentation
|
||||
|
||||
**Fecha:** 2026-01-07
|
||||
**Ejecutor:** Claude Opus 4.5 (Orquestador Workspace)
|
||||
**Framework:** NEXUS v4.0 + SIMCO v2.5
|
||||
|
||||
---
|
||||
|
||||
## Resumen Ejecutivo
|
||||
|
||||
Sprint 6 completado exitosamente. Se documentaron los 6 modulos especializados del sistema de clinica dental con especificaciones tecnicas completas, modelo de datos, endpoints API, flujos, y criterios de aceptacion.
|
||||
|
||||
## Tareas Ejecutadas
|
||||
|
||||
| ID | Tarea | Estado | Resultado |
|
||||
|----|-------|--------|-----------|
|
||||
| S6.1 | Explorar estructura | ✅ Completado | Proyecto analizado |
|
||||
| S6.2 | Crear inventarios | ✅ Completado | DATABASE_INVENTORY.yml |
|
||||
| S6.3 | Crear epicas modulos | ✅ Completado | 6 epicas |
|
||||
| S6.4 | Validar Sprint 6 | ✅ Completado | Este reporte |
|
||||
|
||||
## Proyecto Analizado
|
||||
|
||||
### Informacion General
|
||||
|
||||
| Campo | Valor |
|
||||
|-------|-------|
|
||||
| Proyecto | clinica-dental |
|
||||
| Tipo | ERP Especializado (Vertical) |
|
||||
| Base | erp-clinicas |
|
||||
| Suite Core | erp-core |
|
||||
| Estado | Database completado, Backend pendiente |
|
||||
|
||||
### Herencia
|
||||
|
||||
```
|
||||
erp-core
|
||||
└── erp-clinicas
|
||||
└── clinica-dental (DENTAL-001 a DENTAL-006)
|
||||
```
|
||||
|
||||
**Modulos heredados:**
|
||||
- auth, users, tenants, roles (erp-core)
|
||||
- patients, doctors, appointments, consultations (erp-clinicas)
|
||||
|
||||
## Archivos Creados
|
||||
|
||||
### Inventarios (1 archivo)
|
||||
|
||||
| Archivo | Ubicacion | Contenido |
|
||||
|---------|-----------|-----------|
|
||||
| DATABASE_INVENTORY.yml | orchestration/inventarios/ | 4 ENUMs, 2 catalogos, 10 tablas |
|
||||
|
||||
### Epicas (6 archivos)
|
||||
|
||||
| Archivo | Modulo | Estado DDL | Fase |
|
||||
|---------|--------|------------|------|
|
||||
| DENTAL-001-odontograma.md | Odontograma Digital | Completado | 1 - Core |
|
||||
| DENTAL-002-tratamientos.md | Tratamientos Dentales | Completado | 2 - Tratamientos |
|
||||
| DENTAL-003-ortodoncia.md | Ortodoncia | Completado | 3 - Especialidades |
|
||||
| DENTAL-004-protesis.md | Protesis Dentales | Completado | 3 - Especialidades |
|
||||
| DENTAL-005-radiografias.md | Radiografias | Completado | 4 - Optimizacion |
|
||||
| DENTAL-006-presupuestos.md | Presupuestos | Completado | 2 - Tratamientos |
|
||||
|
||||
## Modelo de Datos Documentado
|
||||
|
||||
### Schema: dental
|
||||
|
||||
**ENUMs:**
|
||||
| Nombre | Valores |
|
||||
|--------|---------|
|
||||
| estado_pieza | sano, caries, obturacion, endodoncia, corona, puente, implante, ausente, etc. |
|
||||
| cara_dental | mesial, distal, oclusal, incisal, vestibular, bucal, lingual, palatino |
|
||||
| estado_tratamiento | pendiente, en_proceso, completado, cancelado |
|
||||
| tipo_ortodoncia | brackets_metalicos, brackets_esteticos, brackets_linguales, alineadores, removible, retenedor |
|
||||
|
||||
**Tablas:**
|
||||
| Tabla | Descripcion | RLS |
|
||||
|-------|-------------|-----|
|
||||
| piezas_dentales | Catalogo 52 piezas FDI | No (catalogo) |
|
||||
| tratamientos_catalogo | Procedimientos por tenant | Si |
|
||||
| odontogramas | Odontogramas de pacientes | Si |
|
||||
| odontograma_piezas | Estado por pieza | Si |
|
||||
| tratamientos_paciente | Tratamientos realizados | Si |
|
||||
| ortodoncia | Casos de ortodoncia | Si |
|
||||
| ortodoncia_citas | Citas de seguimiento | Si |
|
||||
| protesis | Trabajos protesicos | Si |
|
||||
| radiografias | Radiografias dentales | Si |
|
||||
| presupuestos | Presupuestos de tratamiento | Si |
|
||||
| presupuesto_lineas | Lineas de presupuesto | Si |
|
||||
|
||||
## Nomenclatura FDI Documentada
|
||||
|
||||
```
|
||||
SUPERIOR
|
||||
Derecho | Izquierdo
|
||||
18-11 | 21-28
|
||||
---------|----------
|
||||
48-41 | 31-38
|
||||
Derecho | Izquierdo
|
||||
INFERIOR
|
||||
|
||||
Dientes permanentes: 32 (cuadrantes 1-4)
|
||||
Dientes deciduos: 20 (cuadrantes 5-8)
|
||||
Total piezas catalogadas: 52
|
||||
```
|
||||
|
||||
## Endpoints Documentados
|
||||
|
||||
| Modulo | Endpoints |
|
||||
|--------|-----------|
|
||||
| Odontograma | 8 endpoints |
|
||||
| Tratamientos | 10 endpoints |
|
||||
| Ortodoncia | 9 endpoints |
|
||||
| Protesis | 9 endpoints |
|
||||
| Radiografias | 8 endpoints |
|
||||
| Presupuestos | 12 endpoints |
|
||||
| **Total** | **56 endpoints** |
|
||||
|
||||
## Cobertura por Fase
|
||||
|
||||
```
|
||||
Fase 1 - Core: 1 modulo (DENTAL-001)
|
||||
Fase 2 - Tratamientos: 2 modulos (DENTAL-002, DENTAL-006)
|
||||
Fase 3 - Especialidades: 2 modulos (DENTAL-003, DENTAL-004)
|
||||
Fase 4 - Optimizacion: 1 modulo (DENTAL-005)
|
||||
```
|
||||
|
||||
## Dependencias Entre Modulos
|
||||
|
||||
```
|
||||
clinica.patients (erp-clinicas)
|
||||
│
|
||||
├── DENTAL-001 (Odontograma)
|
||||
│ │
|
||||
│ ├── DENTAL-002 (Tratamientos)
|
||||
│ │ │
|
||||
│ │ └── DENTAL-006 (Presupuestos)
|
||||
│ │
|
||||
│ ├── DENTAL-003 (Ortodoncia)
|
||||
│ │
|
||||
│ ├── DENTAL-004 (Protesis)
|
||||
│ │
|
||||
│ └── DENTAL-005 (Radiografias)
|
||||
│
|
||||
└── clinica.consultations
|
||||
└── (vinculo a tratamientos y radiografias)
|
||||
```
|
||||
|
||||
## Validacion de Calidad
|
||||
|
||||
### Checklist SIMCO
|
||||
|
||||
| Criterio | Status |
|
||||
|----------|--------|
|
||||
| Metadata completa | ✅ |
|
||||
| Objetivos definidos | ✅ |
|
||||
| Alcance claro | ✅ |
|
||||
| Modelo de datos | ✅ |
|
||||
| Endpoints documentados | ✅ |
|
||||
| Interfaz de servicio | ✅ |
|
||||
| Flujos principales | ✅ |
|
||||
| Dependencias mapeadas | ✅ |
|
||||
| Criterios de aceptacion | ✅ |
|
||||
|
||||
### Consistencia
|
||||
- Formato uniforme en todas las epicas
|
||||
- Nomenclatura DENTAL-XXX consistente
|
||||
- Estados de tratamiento uniformes
|
||||
- Nomenclatura FDI correcta (52 piezas)
|
||||
|
||||
## Archivos DDL Existentes
|
||||
|
||||
| Archivo | Lineas | Estado |
|
||||
|---------|--------|--------|
|
||||
| database/schemas/01-dental-schema-ddl.sql | 503 | Completado |
|
||||
| database/seeds/fase8/01-dental-catalogos.sql | (pendiente) | Referenciado |
|
||||
|
||||
## Metricas del Sprint
|
||||
|
||||
| Metrica | Valor |
|
||||
|---------|-------|
|
||||
| Archivos creados | 7 (1 inventario + 6 epicas) |
|
||||
| Lineas documentadas | ~2,800 |
|
||||
| Endpoints especificados | 56 |
|
||||
| Tablas documentadas | 11 |
|
||||
| ENUMs documentados | 4 |
|
||||
| Piezas dentales FDI | 52 |
|
||||
|
||||
## Proximos Pasos
|
||||
|
||||
1. **Sprint 7:** Documentar clinica-veterinaria
|
||||
2. **Sprint 8:** Consolidacion y validacion final
|
||||
3. **Implementacion:** Backend modulos DENTAL-001 a DENTAL-006
|
||||
4. **Frontend:** Componente OdontogramaViewer como prioridad
|
||||
|
||||
## Observaciones
|
||||
|
||||
- Proyecto hereda correctamente de erp-clinicas
|
||||
- DDL ya implementado y funcional
|
||||
- Documentacion alineada con VISION.md existente
|
||||
- Nomenclatura FDI completamente catalogada
|
||||
- 10 de 11 tablas con RLS habilitado
|
||||
|
||||
---
|
||||
|
||||
**Sprint 6 Completado:** 2026-01-07
|
||||
**Validado por:** Orquestador Workspace (NEXUS v4.0)
|
||||
Loading…
Reference in New Issue
Block a user