export type Priority = 'critico' | 'alto' | 'medio' | 'bajo'; export type AgeGroup = 'adulto' | 'pediatrico' | 'neonatal' | 'todos'; export type Category = 'soporte_vital' | 'patologias' | 'escena'; export interface Procedure { id: string; title: string; shortTitle: string; category: Category; subcategory?: string; priority: Priority; ageGroup: AgeGroup; steps: string[]; warnings: string[]; keyPoints?: string[]; equipment?: string[]; drugs?: string[]; } export const procedures: Procedure[] = [ { id: 'rcp-adulto-svb', title: 'RCP Adulto - Soporte Vital Básico', shortTitle: 'RCP Adulto SVB', category: 'soporte_vital', subcategory: 'rcp', priority: 'critico', ageGroup: 'adulto', steps: [ 'Garantizar seguridad de la escena', 'Comprobar consciencia: estimular y preguntar "¿Se encuentra bien?"', 'Si no responde, gritar pidiendo ayuda', 'Abrir vía aérea: maniobra frente-mentón', 'Comprobar respiración: VER-OÍR-SENTIR (máx. 10 segundos)', 'Si no respira normal: llamar 112 y pedir DEA', 'Iniciar compresiones torácicas: 30 compresiones', 'Dar 2 ventilaciones de rescate', 'Continuar ciclos 30:2 sin interrupción', 'Cuando llegue DEA: encenderlo y seguir instrucciones', ], warnings: [ 'Profundidad compresiones: 5-6 cm', 'Frecuencia: 100-120 compresiones/min', 'Permitir descompresión completa', 'Minimizar interrupciones (<10 seg)', 'Cambiar reanimador cada 2 min', ], keyPoints: [ 'Compresiones de calidad salvan vidas', 'No interrumpir para pulso hasta que haya signos de vida', 'La desfibrilación precoz aumenta supervivencia', ], equipment: ['DEA', 'Bolsa-mascarilla', 'Cánula orofaríngea'], drugs: ['Adrenalina 1mg'], }, { id: 'rcp-adulto-sva', title: 'RCP Adulto - Soporte Vital Avanzado', shortTitle: 'RCP Adulto SVA', category: 'soporte_vital', subcategory: 'rcp', priority: 'critico', ageGroup: 'adulto', steps: [ 'Continuar RCP 30:2 mientras se prepara monitorización', 'Colocar monitor/desfibrilador y analizar ritmo', 'Ritmo desfibrilable (FV/TVSP): descarga 150-200J bifásico', 'Reiniciar RCP inmediatamente 2 minutos', 'Obtener acceso IV/IO', 'Administrar adrenalina 1mg IV cada 3-5 min (tras 3ª descarga si DF)', 'Considerar amiodarona 300mg IV si FV/TVSP refractaria', 'Asegurar vía aérea avanzada cuando sea posible', 'Buscar y tratar causas reversibles (4H y 4T)', 'Si ROSC: cuidados post-parada', ], warnings: [ 'Minimizar interrupciones de compresiones', 'Adrenalina en ritmos no DF: lo antes posible', 'Amiodarona: 150mg adicionales si persiste FV/TVSP', 'Capnografía: objetivo ETCO2 >10 mmHg', ], keyPoints: [ '4H: Hipoxia, Hipovolemia, Hipo/Hiperpotasemia, Hipotermia', '4T: Neumotórax a Tensión, Taponamiento, Tóxicos, TEP', ], equipment: ['Monitor/Desfibrilador', 'Material IOT', 'Acceso venoso'], drugs: ['Adrenalina', 'Amiodarona', 'Atropina'], }, { id: 'rcp-pediatrico', title: 'RCP Pediátrico - SVB', shortTitle: 'RCP Pediátrico', category: 'soporte_vital', subcategory: 'rcp', priority: 'critico', ageGroup: 'pediatrico', steps: [ 'Garantizar seguridad', 'Comprobar consciencia', 'Abrir vía aérea: maniobra frente-mentón', 'Comprobar respiración (máx. 10 segundos)', 'Dar 5 ventilaciones de rescate iniciales', 'Comprobar signos de vida/pulso (máx. 10 seg)', 'Si no hay signos de vida: 15 compresiones torácicas', 'Continuar con ciclos 15:2', 'Si está solo: RCP 1 minuto antes de llamar 112', ], warnings: [ 'Lactante (<1 año): compresiones con 2 dedos', 'Niño (1-8 años): talón de una mano', 'Profundidad: 1/3 del tórax (4cm lactante, 5cm niño)', 'Frecuencia: 100-120/min', ], keyPoints: [ 'La causa más frecuente es respiratoria', 'Las 5 ventilaciones iniciales son cruciales', 'Ratio 15:2 para profesionales', ], }, { id: 'obstruccion-via-aerea', title: 'Obstrucción de Vía Aérea - OVACE', shortTitle: 'OVACE', category: 'soporte_vital', subcategory: 'via_aerea', priority: 'critico', ageGroup: 'todos', steps: [ 'Valorar gravedad: ¿Puede toser, hablar, respirar?', 'OBSTRUCCIÓN LEVE: animar a toser, vigilar', 'OBSTRUCCIÓN GRAVE consciente: 5 golpes interescapulares', 'Si no se resuelve: 5 compresiones abdominales (Heimlich)', 'Alternar 5 golpes + 5 compresiones hasta resolución', 'Si pierde consciencia: iniciar RCP', 'Antes de ventilar: revisar boca y extraer objeto visible', ], warnings: [ 'En embarazadas y obesos: compresiones torácicas', 'Lactantes: 5 golpes en espalda + 5 compresiones torácicas', 'NO hacer barrido digital a ciegas', 'Derivar siempre tras maniobras de Heimlich', ], keyPoints: [ 'La tos es el mecanismo más efectivo', 'No interferir si la tos es efectiva', ], }, { id: 'shock-hemorragico', title: 'Shock Hemorrágico', shortTitle: 'Shock Hemorrágico', category: 'soporte_vital', subcategory: 'shock', priority: 'critico', ageGroup: 'adulto', steps: [ 'Control de hemorragia externa: presión directa', 'Torniquete si hemorragia en extremidad no controlable', 'Oxigenoterapia alto flujo', 'Canalizar 2 vías IV gruesas (14-16G)', 'Fluidos: cristaloides tibios (objetivo TAS 80-90 mmHg)', 'Posición Trendelenburg si no hay TCE', 'Evitar hipotermia: mantas térmicas', 'Traslado urgente a hospital útil', 'Considerar ácido tranexámico 1g IV', ], warnings: [ 'Hipotensión permisiva: TAS 80-90 mmHg', 'Excepto en TCE: mantener TAS >90 mmHg', 'Evitar sobrecarga de fluidos', 'Torniquete: anotar hora de colocación', ], keyPoints: [ 'Clase I: <15% pérdida, FC normal, TA normal', 'Clase II: 15-30%, taquicardia, TA normal', 'Clase III: 30-40%, taquicardia, hipotensión', 'Clase IV: >40%, bradicardia, shock severo', ], equipment: ['Torniquete', 'Agentes hemostáticos', 'Mantas térmicas'], drugs: ['Ácido tranexámico', 'Cristaloides'], }, ]; export const getProceduresByCategory = (category: Category): Procedure[] => { return procedures.filter((p) => p.category === category); }; export const getProcedureById = (id: string): Procedure | undefined => { return procedures.find((p) => p.id === id); }; export const searchProcedures = (query: string): Procedure[] => { const lowerQuery = query.toLowerCase(); return procedures.filter( (p) => p.title.toLowerCase().includes(lowerQuery) || p.shortTitle.toLowerCase().includes(lowerQuery) || p.steps.some((s) => s.toLowerCase().includes(lowerQuery)) ); };