Test / app.py
dreamnato's picture
fix
ef5523c
Raw History Blame Contribute Delete
4.57 kB
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"<b>{farmaco}</b><br>"
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: <b>{min_mg*peso:.2f}–{max_mg*peso:.2f} mg</b> por toma.<br>"
else:
match = re.search(r"(\d+)\s*mg/kg", info["dosis"])
if match:
dosis = float(match.group(1))
texto += f"Dosis: <b>{dosis*peso:.2f} mg</b> por toma.<br>"
else:
texto += f"Dosis: {info['dosis']}<br>"
else:
texto += f"Dosis: {info['dosis']}<br>"
texto += f"Frecuencia: {info['frecuencia']}<br>"
if info.get("max"):
texto += f"Máximo: {info['max']}<br>"
if info.get("observaciones"):
texto += f"Observaciones: {info['observaciones']}<br>"
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()