[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