File size: 10,184 Bytes
a2ec728
 
 
 
 
 
 
b09975b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2ec728
b09975b
 
 
 
 
 
 
 
 
a2ec728
 
b09975b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2ec728
 
b09975b
 
 
 
 
 
a2ec728
cb5a6a6
b09975b
 
0320610
 
 
 
 
 
 
a2ec728
 
b09975b
 
 
 
 
 
 
 
 
 
 
 
 
 
a2ec728
 
b09975b
 
 
 
 
 
 
 
 
a2ec728
 
b09975b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb5a6a6
a2ec728
b09975b
 
 
 
 
 
 
 
 
 
 
 
a2ec728
 
b09975b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb5a6a6
b09975b
 
a2ec728
 
1825e9b
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Algoritmo DM2 – Guía Clínica</title>
  <script src="https://cdn.tailwindcss.com"></script>
  <link
    rel="stylesheet"
    href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
  />
  <link
    href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap"
    rel="stylesheet"
  />
  <style>
    body {
      background-color: #f8fafc;
      font-family: "Montserrat", sans-serif;
    }
    .custom-select {
      background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
      background-position: right 0.5rem center;
      background-repeat: no-repeat;
      background-size: 1.5em 1.5em;
      -webkit-appearance: none;
      -moz-appearance: none;
      appearance: none;
      padding-right: 2.5rem;
      width: 100%;
      padding-top: 0.5rem;
      padding-bottom: 0.5rem;
      padding-left: 0.75rem;
      border-radius: 0.375rem;
      border: 1px solid #d1d5db;
      box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
      transition: border-color 0.2s, box-shadow 0.2s;
      font-size: 0.875rem;
      line-height: 1.25rem;
    }
    .custom-select:focus {
      outline: none;
      border-color: #3b82f6;
      box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.25);
    }
    #algo-display {
      background-color: white;
      border: 1px solid #e5e7eb;
      border-radius: 0.5rem;
      padding: 1.5rem;
      margin-top: 1rem;
      min-height: 300px;
      box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.05);
      overflow-y: auto;
      line-height: 1.6;
    }
  </style>
</head>
<body class="min-h-screen bg-gray-50">
  <div class="mx-auto max-w-2xl p-6 my-8 bg-white rounded-xl shadow-md">
    <div class="text-center mb-6">
      <h1 class="text-xl font-bold text-pink-800 flex items-center justify-center">
        <i class="fas fa-syringe mr-3 text-teal-600"></i>Algoritmo Tratamiento DM2
      </h1>
      <p class="text-gray-600 mt-2 text-sm leading-relaxed">
        Basado en redGDPS 2023 | Hospital de Alcañiz
      </p>
    </div>

    <div
      class="bg-pink-50 p-6 rounded-lg mb-6 border border-pink-100 shadow-inner space-y-4"
    >
      <!-- Condición clínica predominante -->
      <div>
        <label
          for="conditionSelector"
          class="block text-xs font-medium text-gray-600 mb-1"
          >Condición clínica predominante (prioritario)</label
        >
        <select id="conditionSelector" class="custom-select text-sm">
          <option value="">-- Ninguna / No aplica --</option>
          <option value="ECV">Enfermedad cardiovascular (ASCVD)</option>
          <option value="IC">Insuficiencia cardiaca</option>
          <option value="ERC">Enfermedad renal crónica</option>
          <option value="RCV">Elevado riesgo cardiovascular (&ge;3 FRCV)</option>
          <option value="OB">Obesidad (IMC &gt;35 kg/m<sup>2</sup>)</option>
          <option value="FR">Fragilidad geriátrica</option>
        </select>
      </div>

      <!-- Control glucémico -->
      <div>
        <label
          for="controlSelector"
          class="block text-xs font-medium text-gray-600 mb-1"
          >Grado de control glucémico (HbA1c&nbsp;/ GME)</label
        >
        <select id="controlSelector" class="custom-select text-sm">
          <option value="">-- Seleccione HbA1c --</option>
          <option value="&lt;7">HbA1c &lt;7 % (&lt;154 mg/dl)</option>
          <option value="7-9">HbA1c 7–9 % (154‑212 mg/dl)</option>
          <option value="&gt;9">HbA1c &gt;9 % (&gt;212 mg/dl)</option>
          <option value="SYM">Hiperglucemia sintomática</option>
        </select>
      </div>
    </div>

    <!-- Resultado -->
    <div id="algo-display" class="text-gray-800">
      <div class="text-center py-10 text-gray-400">
        <i class="fas fa-notes-medical text-4xl mb-3"></i>
        <p>Seleccione una situación clínica y el grado de control.</p>
      </div>
    </div>

    <!-- Enlace al PDF completo -->
    <div class="text-center mt-6">
  <a
    href="https://www.redgdps.org/gestor/upload/2023/Algoritmo_DM2_ESP_2023.pdf"
    target="_blank"
    class="text-sm text-pink-700 hover:underline"
    ><i class="fas fa-file-pdf mr-1"></i>Ver algoritmo completo (PDF)</a
  >
</div>

  <script type="module">
    // Mapas simplificados basados en redGDPS 2023
    const conditionMap = {
      ECV:
        "Añada <span class=\"font-semibold\">iSGLT2</span> y/o <span class=\"font-semibold\">arGLP‑1</span> con evidencia en reducción de eventos cardiovasculares, independientemente de HbA1c. Considere mantener metformina si se tolera.",
      IC:
        "Priorice <span class=\"font-semibold\">iSGLT2</span> (dapagliflozina, empagliflozina) con o sin metformina. Evite tiazolidinedionas si IC avanzada. Valore añadir arGLP‑1 si HbA1c fuera de objetivo.",
      ERC:
        "Indique <span class=\"font-semibold\">iSGLT2</span> (FG ≥20 ml/min) y/o <span class=\"font-semibold\">arGLP‑1</span> (FG ≥15 ml/min). Ajuste/retire metformina si FG &lt;45 ml/min.",
      RCV:
        "Si riesgo cardiovascular elevado, utilice <span class=\"font-semibold\">iSGLT2</span> y/o <span class=\"font-semibold\">arGLP‑1</span> con metformina como base.",
      OB:
        "Para IMC &gt;35 kg/m<sup>2</sup> prefiera <span class=\"font-semibold\">arGLP‑1</span>; considere cirugía bariátrica. Valore iSGLT2 si esteatosis hepática.",
      FR:
        "Desintensifique o simplifique. Evite hipoglucemias. Prefiera <span class=\"font-semibold\">iDPP‑4</span>; considere retirar SU y repaglinida."
    };

    const controlMap = {
      "<7":
        "Refuerce medidas no farmacológicas (alimentación, ejercicio, sueño) y mantenga <span class=\"font-semibold\">metformina</span> si se tolera. Reevaluar en 3–6 meses.",
      "7-9":
        "Inicie <span class=\"font-semibold\">terapia dual</span>: Metformina + otro ADNI según perfil (iSGLT2, arGLP‑1, iDPP‑4, pioglitazona o SU).",
      ">9":
        "Considere <span class=\"font-semibold\">terapia triple</span> o <span class=\"font-semibold\">insulinización basal</span> si HbA1c &gt;9 % pese a doble terapia.",
      SYM:
        "Ante síntomas cardinales (poliuria, polidipsia, pérdida de peso), inicie <span class=\"font-semibold\">insulina</span> ± metformina y añada arGLP‑1 o iSGLT2 según tolerancia."
    };

    // Diccionario de nombres de fármacos por familia
    const drugFamilyNames = {
      iSGLT2: [
        "Dapagliflozina",
        "Empagliflozina",
        "Canagliflozina",
        "Ertugliflozina"
      ],
      "arGLP‑1": [
        "Semaglutida",
        "Liraglutida",
        "Dulaglutida",
        "Exenatida XR"
      ],
      metformina: ["Metformina"],
      "iDPP‑4": [
        "Sitagliptina",
        "Saxagliptina",
        "Linagliptina",
        "Alogliptina"
      ],
      insulina: [
        "Insulina glargina",
        "Insulina degludec",
        "Insulina detemir"
      ],
      pioglitazona: ["Pioglitazona"],
      SU: ["Gliclazida", "Glimepirida", "Glibenclamida"],
      repaglinida: ["Repaglinida"]
    };

    const conditionSelector = document.getElementById("conditionSelector");
    const controlSelector = document.getElementById("controlSelector");
    const display = document.getElementById("algo-display");

    function extractFamilies(text) {
      const familiesFound = new Set();
      Object.keys(drugFamilyNames).forEach((family) => {
        // Buscar la palabra exacta (ignorando mayúsculas/minúsculas y signos especiales)
        const regex = new RegExp(family.replace(/[-‑]/g, "[-‑]"), "i");
        if (regex.test(text)) familiesFound.add(family);
      });
      return familiesFound;
    }

    function buildDrugListHTML(families) {
      let list = "<ul class='list-disc ml-4'>";
      families.forEach((f) => {
        const names = drugFamilyNames[f];
        if (!names) return;
        list += `<li><span class='font-semibold'>${f}:</span> ${names.join(", ")}</li>`;
      });
      list += "</ul>";
      return list;
    }

    function updateDisplay() {
      const cond = conditionSelector.value;
      const ctrl = controlSelector.value;

      console.log("Condición seleccionada:", cond);
      console.log("Grado de control seleccionado:", ctrl);

      let html = "";
      let combinedText = ""; // Para extraer familias

      if (cond && conditionMap[cond]) {
        html += `<h2 class='text-base font-bold mb-2 text-pink-700'><i class='fas fa-stethoscope mr-2'></i>Manejo según condición clínica</h2><p class='mb-4'>${conditionMap[cond]}</p>`;
        combinedText += conditionMap[cond] + " ";
        console.log("Recomendación condición:", conditionMap[cond]);
      }

      if (ctrl && controlMap[ctrl]) {
        html += `<h2 class='text-base font-bold mb-2 text-pink-700'><i class='fas fa-vials mr-2'></i>Manejo según HbA1c / GME</h2><p class='mb-4'>${controlMap[ctrl]}</p>`;
        combinedText += controlMap[ctrl] + " ";
        console.log("Recomendación HbA1c:", controlMap[ctrl]);
      }

      // Tercer bloque: lista de fármacos sugeridos
      const families = extractFamilies(combinedText);
      console.log("Familias detectadas:", Array.from(families));
      if (families.size) {
        html += `<h2 class='text-base font-bold mb-2 text-pink-700'><i class='fas fa-pills mr-2'></i>Fármacos sugeridos</h2>${buildDrugListHTML(families)}`;
      }

      if (!html) {
        html =
          "<div class='text-center py-10 text-gray-400'><i class='fas fa-notes-medical text-4xl mb-3'></i><p>Seleccione una situación clínica y el grado de control.</p></div>";
      }

      display.innerHTML = html;
    }

    conditionSelector.addEventListener("change", updateDisplay);
    controlSelector.addEventListener("change", updateDisplay);
  </script>
</body>
</html>