File size: 4,565 Bytes
07f2b08 827ac15 07f2b08 827ac15 07f2b08 827ac15 07f2b08 ef5523c 827ac15 07f2b08 827ac15 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | 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()
|