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()