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
- Registro de radiografias por tipo
- Asociacion a pieza dental
- Almacenamiento de imagenes
- Interpretacion diagnostica
- 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
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
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
// 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
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
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