# ✅ CHECKLIST DE VALIDACIÓN - FASE 4: BASE DE CONTENIDO **Versión:** 1.0.0 **Fecha:** 2025-01-06 **Estado:** Validación Pendiente --- ## 🎯 OBJETIVO Validar que la FASE 4 (Base de Contenido Canónica) está completa y lista para FASE 2 (Integración). --- ## 📋 CHECKLIST DE VALIDACIÓN ### 1. MODELO DE DATOS CANÓNICO #### 1.1 Interfaces TypeScript - [ ] `ContentItem` definida con todos los campos obligatorios - [ ] `ProtocolContent` definida con estructura completa - [ ] `GuideContent` definida con 8 secciones - [ ] `ManualContent` definida - [ ] `DrugContent` definida - [ ] `ChecklistContent` definida - [ ] `MediaResource` definida (image y video) - [ ] `ContentResourceAssociation` definida - [ ] `ContentVersion` definida - [ ] `AuditLog` definida - [ ] Todos los enums definidos (ContentType, UsageType, Priority, etc.) - [ ] Tipos exportados correctamente - [ ] Sin errores de TypeScript **Archivo:** `admin-panel/shared/types/content-canonical.ts` #### 1.2 Validación de Modelo - [ ] Campos obligatorios marcados correctamente - [ ] Tipos de datos correctos (UUID, string, number, boolean, array, JSONB) - [ ] Constraints lógicos definidos (ej: version semver) - [ ] Relaciones entre entidades claras - [ ] Ejemplos reales incluidos (RCP, OVACE, ABCDE) --- ### 2. BASE DE DATOS (SUPABASE) #### 2.1 Schema SQL - [ ] Tabla `content_items` creada - [ ] Tabla `media_resources` creada - [ ] Tabla `content_resource_associations` creada - [ ] Tabla `content_versions` creada - [ ] Tabla `audit_logs` creada - [ ] Todos los ENUMs creados - [ ] Foreign keys definidas correctamente - [ ] Constraints aplicados (UNIQUE, CHECK, NOT NULL) - [ ] Índices creados (B-tree, GIN) - [ ] Triggers creados (updated_at, audit_log) - [ ] Vistas útiles creadas **Archivo:** `docs/SUPABASE_SCHEMA.sql` #### 2.2 Validación de Schema - [ ] Schema ejecutable sin errores - [ ] Todas las relaciones funcionan - [ ] Índices optimizados para búsqueda - [ ] Triggers funcionan correctamente - [ ] Vistas devuelven datos correctos #### 2.3 Supabase Configuración - [ ] Proyecto Supabase creado - [ ] Base de datos configurada - [ ] Storage bucket creado (`infografias`, `videos`) - [ ] Políticas de Storage configuradas (público para lectura) - [ ] API REST habilitada - [ ] Row Level Security (RLS) configurado (si aplica) --- ### 3. CONTENT PACK #### 3.1 Especificación - [ ] Estructura del pack definida - [ ] Metadata completa - [ ] Sección `content` definida - [ ] Sección `media` definida - [ ] Sección `links` definida - [ ] Verificación de integridad (hash) definida - [ ] Ejemplo completo incluido (RCP Adulto SVB) **Archivo:** `docs/CONTENT_PACK_SPEC.md` #### 3.2 Validación de Pack - [ ] Formato JSON válido - [ ] Estructura cumple especificación - [ ] Hash calculado correctamente - [ ] Solo contenido `published` incluido - [ ] Solo última versión incluida - [ ] Recursos asociados existen - [ ] Enlaces bidireccionales correctos --- ### 4. DOCUMENTACIÓN #### 4.1 Documentación Completa - [ ] `CONTENT_MODEL.md` creado y completo - [ ] `SUPABASE_SCHEMA.sql` creado y completo - [ ] `CONTENT_PACK_SPEC.md` creado y completo - [ ] `CHECKLIST_VALIDACION_FASE_4.md` creado (este documento) - [ ] Diagramas incluidos (textuales o visuales) - [ ] Ejemplos reales incluidos (RCP, OVACE, ABCDE) - [ ] Referencias cruzadas correctas #### 4.2 Calidad de Documentación - [ ] Lenguaje claro y técnico - [ ] Ejemplos comprensibles - [ ] Sin ambigüedades - [ ] Pensado para TES (no solo desarrolladores) - [ ] Pensado para durabilidad (10+ años) --- ### 5. DESACOPLAMIENTO #### 5.1 Sin Modificaciones a Código Existente - [ ] NO se modificó `src/data/procedures.ts` - [ ] NO se modificó `src/data/drugs.ts` - [ ] NO se modificaron rutas existentes - [ ] NO se modificó Service Worker - [ ] NO se modificaron componentes existentes - [ ] Modelo es completamente independiente #### 5.2 Compatibilidad - [ ] Modelo puede coexistir con código actual - [ ] No hay conflictos de tipos - [ ] No hay conflictos de nombres - [ ] Preparado para migración gradual --- ### 6. EJEMPLOS REALES #### 6.1 Protocolo RCP Adulto SVB - [ ] Ejemplo completo en Content Pack Spec - [ ] Todos los campos presentes - [ ] Pasos operativos completos - [ ] Checklist integrado - [ ] Recursos asociados (imágenes, vídeo) - [ ] Fuentes clínicas (ERC) #### 6.2 Guía ABCDE Formativa - [ ] Ejemplo en Content Model - [ ] 8 secciones definidas - [ ] Relación con protocolo operativo - [ ] Recursos por sección #### 6.3 Fármaco Adrenalina - [ ] Ejemplo en Content Model - [ ] Dosis adulto/pediátrica - [ ] Indicaciones y contraindicaciones - [ ] Puntos críticos TES --- ### 7. VALIDACIONES Y CONSTRAINTS #### 7.1 Validaciones Definidas - [ ] Validaciones de ContentItem documentadas - [ ] Validaciones de ProtocolContent documentadas - [ ] Validaciones de GuideContent documentadas - [ ] Validaciones de MediaResource documentadas - [ ] Validaciones de Association documentadas #### 7.2 Constraints SQL - [ ] Constraints UNIQUE aplicados - [ ] Constraints CHECK aplicados - [ ] Constraints NOT NULL aplicados - [ ] Foreign keys con CASCADE apropiado --- ### 8. PREPARACIÓN PARA FASE 2 #### 8.1 Contratos Definidos - [ ] Interfaces TypeScript listas para usar - [ ] Schema SQL listo para migración - [ ] Content Pack spec listo para implementación - [ ] Documentación completa #### 8.2 Sin Dependencias Faltantes - [ ] Todas las entidades definidas - [ ] Todas las relaciones claras - [ ] Sin referencias circulares problemáticas - [ ] Extensible sin breaking changes --- ## 🧪 PRUEBAS RECOMENDADAS ### Prueba 1: Schema SQL ```sql -- Ejecutar schema completo \i docs/SUPABASE_SCHEMA.sql -- Verificar tablas creadas SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name; -- Verificar enums creados SELECT typname FROM pg_type WHERE typtype = 'e' ORDER BY typname; ``` ### Prueba 2: Insertar Ejemplo RCP ```sql -- Insertar protocolo RCP Adulto SVB INSERT INTO content_items ( id, type, slug, title, clinical_context, usage_type, priority, status, source_guideline, version, latest_version, content, tags, created_by, created_at, updated_at ) VALUES ( '550e8400-e29b-41d4-a716-446655440000', 'protocol', 'rcp-adulto-svb', 'RCP Adulto - Soporte Vital Básico', 'RCP', 'operativo', 'critica', 'published', 'ERC', '1.0.0', '1.0.0', '{"steps": [...]}'::jsonb, ARRAY['rcp', 'svb', 'adulto'], 'system', NOW(), NOW() ); -- Verificar inserción SELECT * FROM content_items WHERE slug = 'rcp-adulto-svb'; ``` ### Prueba 3: Content Pack JSON ```typescript // Validar estructura del pack const pack: ContentPack = { metadata: { ... }, content: { ... }, media: { ... }, links: { ... } }; // Verificar hash const hash = calculatePackHash(pack); console.assert(hash === pack.metadata.hash, 'Hash incorrecto'); // Verificar JSON válido JSON.parse(JSON.stringify(pack)); ``` --- ## ✅ CRITERIOS DE APROBACIÓN ### Mínimos Requeridos: - ✅ Todas las interfaces TypeScript definidas - ✅ Schema SQL completo y ejecutable - ✅ Content Pack spec completo con ejemplos - ✅ Documentación completa - ✅ Sin modificaciones a código existente - ✅ Ejemplos reales incluidos ### Calidad Esperada: - ✅ Código sin errores de TypeScript - ✅ Schema sin errores SQL - ✅ Documentación clara y completa - ✅ Ejemplos comprensibles - ✅ Preparado para durabilidad (10+ años) --- ## 📝 NOTAS DE VALIDACIÓN **Validador:** _________________ **Fecha:** _________________ **Resultado:** ☐ Aprobado ☐ Pendiente ☐ Rechazado **Comentarios:** ``` [Espacio para comentarios del validador] ``` --- ## 🚀 PRÓXIMOS PASOS (FASE 2) Una vez validada FASE 4: 1. **Implementar ContentAdapter** - LocalContentAdapter (fallback) - PackContentAdapter (desde Content Pack) 2. **Integrar en App** - Hooks (useProtocol, useDrug) - Componentes de visualización - Enlaces bidireccionales 3. **Testing** - Testing de adaptadores - Testing de fallback - Testing de integración --- **Fin del Checklist**