import gradio as gr farmacos = { "Paracetamol": { "dosis": "10-15 mg/kg", "frecuencia": "cada 6-8 horas", "max": "60 mg/kg/día", "observaciones": "" }, "Ibuprofeno": { "dosis": "5-10 mg/kg", "frecuencia": "cada 6-8 horas", "max": "30-40 mg/kg/día", "observaciones": "" }, "Amoxicilina": { "dosis": "25-50 mg/kg/día en 2–3 dosis", "frecuencia": "cada 8-12 horas", "max": "En infecciones graves hasta 90 mg/kg/día", "observaciones": "" }, "Acenocumarol": { "dosis": "0,04 mg/kg/día v.o.", "max": "3 mg/día (inicio)", "frecuencia": "Individualizar según INR", "observaciones": "Antídoto: vitamina K 2,5-5 mg i.v. lenta" }, "Acetazolamida": { "dosis": "5 mg/kg/12-48 h v.o. o i.v.", "frecuencia": "12-48 horas", "observaciones": "Alcalinización orina: 5 mg/kg/día cada 8-12 h", "max": "" }, "Acetilcisteína (IV)": { "dosis": "150 mg/kg dosis inicial", "frecuencia": "Luego 50 mg/kg en 4 h + 10-20 mg/kg/h 72 h", "observaciones": "Intoxicación paracetamol. Dosis oral: 140 mg/kg luego 70 mg/kg/4h (17 dosis oral o 12 IV)", "max": "" }, "Acetilsalicílico": { "dosis": "10-15 mg/kg/4-6 h v.o.", "frecuencia": "4-6 horas", "max": "60-80 mg/kg/día", "observaciones": "Antiinflamatorio: 60-100 mg/kg/día cada 4-6 h" }, "Aciclovir": { "dosis": "20 mg/kg/6 h v.o.", "frecuencia": "Cada 6 horas", "max": "", "observaciones": "5-7 días VVZ, 10 días VHS. IV: RN 15 mg/kg/12 h, resto 10 mg/kg/8 h" }, "Activador tisular recombinante del plasminógeno (rtPA)": { "dosis": "0,1-0,5 mg/kg inicial i.v.", "frecuencia": "Luego 0,01-0,6 mg/kg/h durante 6-24 h", "max": "", "observaciones": "Oclusión catéter: 0,5-2 mg en 1-2 ml" }, "Adenosina": { "dosis": "0,05-0,1 mg/kg i.v. rápida", "frecuencia": "Repetir cada 2 min hasta 0,25 mg/kg o 12 mg", "max": "12 mg por dosis", "observaciones": "" }, "Adrenalina": { "dosis": "PCR: 0,01 mg/kg/dosis i.v.", "frecuencia": "Neonatos: 0,01-0,03 mg/kg. Inotrópico: 0,1-2 μg/kg/min", "max": "", "observaciones": "Obstrucción vía aérea: 0,5 mL/kg 1/1.000 en 5-10 mL SSF" }, "Albúmina": { "dosis": "0,5-2 g/kg/24-48 h (sol. 5 y 20%)", "frecuencia": "", "max": "120 mL/kg/día", "observaciones": "Hipovolemia: 10-20 mL/kg/dosis (5%)" }, "Alfentanilo": { "dosis": "Bolo: 10-50 μg/kg i.v.", "frecuencia": "Perfusión: 0,5-1,5 μg/kg/min", "max": "", "observaciones": "" } } def calcular_dosis(farmaco, peso): if not farmaco or not peso: return "Selecciona un fármaco e introduce el peso." info = farmacos[farmaco] try: peso = float(peso) except Exception: return "Introduce un valor numérico válido para el peso." # Intenta calcular dosis mínima y máxima si la fórmula lo permite texto = f"{farmaco}
" if "mg/kg" in info["dosis"]: import re match = re.findall(r"(\d+)[-–](\d+)\s*mg/kg", info["dosis"]) if match: min_mg, max_mg = map(float, match[0]) texto += f"Dosis: {min_mg*peso:.2f}–{max_mg*peso:.2f} mg por toma.
" else: match = re.search(r"(\d+)\s*mg/kg", info["dosis"]) if match: dosis = float(match.group(1)) texto += f"Dosis: {dosis*peso:.2f} mg por toma.
" else: texto += f"Dosis: {info['dosis']}
" else: texto += f"Dosis: {info['dosis']}
" texto += f"Frecuencia: {info['frecuencia']}
" if info.get("max"): texto += f"Máximo: {info['max']}
" if info.get("observaciones"): texto += f"Observaciones: {info['observaciones']}
" return texto demo = gr.Interface( fn=calcular_dosis, inputs=[ gr.Dropdown(list(farmacos.keys()), label="Fármaco"), gr.Number(label="Peso del paciente (kg)") ], outputs=gr.HTML(label="Resultado"), title="Calculadora de dosis pediátricas (SEDAR)", description="Introduce el fármaco y el peso del paciente para calcular la dosis recomendada según el Manual de Anestesiología SEDAR." ) if __name__ == "__main__": demo.launch()