Jose Salazar Claude Sonnet 4.6 commited on
Commit
a50e2a1
·
1 Parent(s): d90e9a6

Expand analyzer coverage: coagulation, blood gas, full urinalysis panels

Browse files

Add 33 new parameters from Catalyst ONE, VetScan VS2 and VCHECK V200:
- Biochemistry: AMY, LDH, cPLI/fPLI, Mg, Fe, UA, CRP, SAA, TDM (phenobarbital, cyclosporine)
- Endocrine: fT4, TSH, progesterone, cTnI, NT-proBNP
- Urinalysis (VetScan UA): ketones, blood, bilirubin, urobilinogen, nitrites, leukocyte esterase, RBC/WBC sediment, UPC
- Coagulation: PT, aPTT, ACT, fibrinogen, D-dimer, FDP, AT-III, vWF
- Blood gas (iStat Alinity): pH, pCO2, pO2, HCO3, BE, SO2, iCa, lactate, anion gap

Add 38 new clinical patterns in alteraciones.json with full acid-base
interpretation logic (respiratory/metabolic acidosis and alkalosis),
DIC detection, coagulopathy classification, cardiac biomarkers,
acute phase response, drug monitoring thresholds and urinary sediment patterns.

Add Factores de Coagulación and Gasometría collapsible panels to the UI.
Update CSS grid (4 rows) to place new panels between Endo/Uri and Flujo.
Fix .htaccess: switch JS/CSS/JSON to no-cache for instant dev reloads.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Files changed (8) hide show
  1. .htaccess +16 -23
  2. css/styles.css +4 -1
  3. data/alteraciones.json +173 -0
  4. data/valores_referencia.json +72 -2
  5. index.html +314 -1
  6. js/analisis.js +323 -0
  7. js/main.js +3 -2
  8. js/ui.js +9 -8
.htaccess CHANGED
@@ -8,32 +8,25 @@
8
  AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript application/json font/ttf font/woff font/woff2
9
  </IfModule>
10
 
11
- # Cache-Control headers
12
- <IfModule mod_expires.c>
13
- ExpiresActive On
14
-
15
- # HTML short cache, content can change
16
- ExpiresByType text/html "access plus 1 hour"
17
-
18
- # CSS and JS — 1 year (use ?v= query param on deploys to bust cache)
19
- ExpiresByType text/css "access plus 1 year"
20
- ExpiresByType application/javascript "access plus 1 year"
21
- ExpiresByType text/javascript "access plus 1 year"
22
 
23
- # Fonts1 year
24
- ExpiresByType font/ttf "access plus 1 year"
25
- ExpiresByType font/woff "access plus 1 year"
26
- ExpiresByType font/woff2 "access plus 1 year"
27
 
28
- # JSON data files
29
- ExpiresByType application/json "access plus 1 day"
30
- </IfModule>
 
31
 
32
- <IfModule mod_headers.c>
33
- <FilesMatch "\.(css|js|ttf|woff|woff2)$">
34
  Header set Cache-Control "public, max-age=31536000, immutable"
35
  </FilesMatch>
36
- <FilesMatch "\.json$">
37
- Header set Cache-Control "public, max-age=86400"
38
- </FilesMatch>
39
  </IfModule>
 
8
  AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript application/json font/ttf font/woff font/woff2
9
  </IfModule>
10
 
11
+ <IfModule mod_headers.c>
12
+ # JS and HTML — always revalidate so code changes are visible immediately.
13
+ # The script tag ?v= param busts the cache on intentional deploys.
14
+ <FilesMatch "\.(js|html)$">
15
+ Header set Cache-Control "no-cache, must-revalidate"
16
+ </FilesMatch>
 
 
 
 
 
17
 
18
+ # JSON data files same: revalidate on every request
19
+ <FilesMatch "\.json$">
20
+ Header set Cache-Control "no-cache, must-revalidate"
21
+ </FilesMatch>
22
 
23
+ # CSS revalidate (style changes need to show immediately too)
24
+ <FilesMatch "\.css$">
25
+ Header set Cache-Control "no-cache, must-revalidate"
26
+ </FilesMatch>
27
 
28
+ # Fonts — truly immutable; safe to cache for 1 year
29
+ <FilesMatch "\.(ttf|woff|woff2)$">
30
  Header set Cache-Control "public, max-age=31536000, immutable"
31
  </FilesMatch>
 
 
 
32
  </IfModule>
css/styles.css CHANGED
@@ -328,10 +328,11 @@ textarea::placeholder {
328
  main {
329
  display: grid;
330
  grid-template-columns: 1fr 1fr 40rem 30rem;
331
- grid-template-rows: 1fr auto auto;
332
  grid-template-areas:
333
  "hema bioquim col3 resultados"
334
  "endo uri col3 resultados"
 
335
  "flujo flujo col3 resultados";
336
  gap: 1px;
337
  background: var(--border-1);
@@ -344,6 +345,8 @@ main {
344
  #panel-bioquim { grid-area: bioquim; }
345
  #panel-endo { grid-area: endo; }
346
  #panel-uri { grid-area: uri; }
 
 
347
  #panel-resultados { grid-area: resultados; }
348
  .panel-flujo { grid-area: flujo; }
349
 
 
328
  main {
329
  display: grid;
330
  grid-template-columns: 1fr 1fr 40rem 30rem;
331
+ grid-template-rows: 1fr auto auto auto;
332
  grid-template-areas:
333
  "hema bioquim col3 resultados"
334
  "endo uri col3 resultados"
335
+ "coag gas col3 resultados"
336
  "flujo flujo col3 resultados";
337
  gap: 1px;
338
  background: var(--border-1);
 
345
  #panel-bioquim { grid-area: bioquim; }
346
  #panel-endo { grid-area: endo; }
347
  #panel-uri { grid-area: uri; }
348
+ #panel-coag { grid-area: coag; }
349
+ #panel-gas { grid-area: gas; }
350
  #panel-resultados { grid-area: resultados; }
351
  .panel-flujo { grid-area: flujo; }
352
 
data/alteraciones.json CHANGED
@@ -67,6 +67,21 @@
67
  "nombre": "Hiperbilirrubinemia",
68
  "descripcion": "Clasificar en prehepática (hemólisis — suele acompañarse de anemia y esferocitosis), hepática (hepatopatía grave, lipidosis) o posthepática (obstrucción biliar — colelitiasis, colangiocarcinoma, pancreatitis compresiva). Correlacionar con bilirrubina directa/indirecta y hallazgos ecográficos."
69
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  "azotemia": {
71
  "nombre": "Azotemia",
72
  "descripcion": "Elevación de BUN y creatinina. Clasificar en prerrenal (deshidratación, hipoperfusión), renal (ERC o IRA) o posrenal (obstrucción, rotura urinaria). Estadificar según criterios IRIS si se sospecha ERC. Correlacionar con densidad urinaria, urianálisis y presión arterial."
@@ -138,6 +153,22 @@
138
  "nombre": "Hiperfosforemia",
139
  "descripcion": "Frecuente en enfermedad renal crónica (ERC); la retención de fósforo contribuye al hiperparatiroidismo renal secundario y acelera la progresión del daño tubular. Considerar también hipoparatiroidismo, hipervitaminosis D, lisis tumoral o hemólisis artefactual. Clave en estadiaje IRIS y planificación dietética (restricción de fósforo en ERC estadio ≥ II)."
140
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  "hiposthenuria": {
142
  "nombre": "Hiposthenuria (USG < 1.008) — concentración muy disminuida",
143
  "descripcion": "Densidad urinaria muy baja. Compatible con diabetes insípida central o nefrogénica, hiperadrenocorticismo (HAC), hipercalcemia, hipopotasemia o administración de diuréticos. En felinos, considerar acromegalia y HAC. Requiere prueba de privación de agua o test de vasopresina para diferenciar los subtipos de diabetes insípida."
@@ -152,6 +183,27 @@
152
  "canino": "T4 total disminuida. El hipotiroidismo canino es la endocrinopatía más frecuente en perros adultos de mediana edad. Signos clásicos: letargia, obesidad, alopecia bilateral simétrica, intolerancia al frío. Confirmar con T4 libre por diálisis de equilibrio. Los fármacos (glucocorticoides, fenobarbital, sulfonamidas) y la enfermedad sistémica pueden suprimir T4 falsamente (síndrome del enfermo eutiroideo)."
153
  }
154
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  "hipertiroidismo": {
156
  "nombre": "Hipertiroidismo — T4 elevada",
157
  "descripcion": {
@@ -174,8 +226,129 @@
174
  "nombre": "Cortisol basal bajo — posible hipoadrenocorticismo",
175
  "descripcion": "Cortisol basal disminuido. Un valor < 1 μg/dL (canino) o < 0,5 μg/dL (felino) es altamente sugestivo de hipoadrenocorticismo; confirmar con test de estimulación con ACTH. Valores basales < 2 μg/dL justifican la realización del test. Evaluar junto a electrolitos y ratio Na:K."
176
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  "deficit_insulina": {
178
  "nombre": "Posible déficit de insulina — hiperglucemia con insulina baja",
179
  "descripcion": "Insulinemia baja en presencia de hiperglucemia sugiere déficit insulínico relativo o absoluto compatible con diabetes mellitus tipo 1 (destrucción de células β) o pancreatitis crónica con afectación exocrina y endocrina. Correlacionar con fructosamina para confirmar cronicidad. En felinos, la diabetes mellitus tipo 2 (resistencia insulínica) es más frecuente y puede cursar con insulina normal o alta."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  }
181
  }
 
67
  "nombre": "Hiperbilirrubinemia",
68
  "descripcion": "Clasificar en prehepática (hemólisis — suele acompañarse de anemia y esferocitosis), hepática (hepatopatía grave, lipidosis) o posthepática (obstrucción biliar — colelitiasis, colangiocarcinoma, pancreatitis compresiva). Correlacionar con bilirrubina directa/indirecta y hallazgos ecográficos."
69
  },
70
+ "hiperamylasemia": {
71
+ "nombre": "Hiperamylasemia",
72
+ "descripcion": "Amilasa elevada. En perros tiene baja especificidad diagnóstica para pancreatitis (se produce en riñón, intestino, hígado y músculo). En gatos tiene especificidad ligeramente superior pero sigue siendo inespecífica. Correlacionar con PLI específica (cPLI/fPLI), signos clínicos y ecografía abdominal para confirmar pancreatitis. También puede elevarse en insuficiencia renal (reducción de aclaramiento) y enfermedades intestinales."
73
+ },
74
+ "ldh_elevada": {
75
+ "nombre": "LDH elevada",
76
+ "descripcion": "La lactatodeshidrogenasa es un marcador de daño tisular inespecífico presente en músculo (cardíaco y esquelético), eritrocitos, hígado, riñón y pulmón. Su elevación orienta hacia necrosis tisular, hemólisis, miopatías, hepatopatía o neoplasia activa. Tiene escaso valor diagnóstico aislada; interpretar siempre junto al resto del perfil bioquímico y CK para diferenciar daño muscular de otras causas."
77
+ },
78
+ "pancreatitis": {
79
+ "nombre": "Pancreatitis — PLI elevada",
80
+ "descripcion": {
81
+ "canino": "cPLI (Spec cPL) elevada compatible con pancreatitis aguda o crónica activa. Valores 200–400 μg/L constituyen zona gris (indeterminada); > 400 μg/L son consistentes con pancreatitis. Correlacionar con signos clínicos (vómito, dolor abdominal, anorexia), hallazgos ecográficos (hipoecogenicidad pancreática, efusión peripancreática) y elevación de lipasa y amilasa. Monitorear glucosa y calcio por riesgo de diabetes mellitus e hipocalcemia secundarias.",
82
+ "felino": "fPLI (Spec fPL) elevada compatible con pancreatitis felina. Valores 3.5–5.3 μg/L constituyen zona gris; > 5.3 μg/L son consistentes con pancreatitis. La pancreatitis felina frecuentemente forma parte de triaditis (colangiohepatitis + pancreatitis + EII concurrentes). Correlacionar con ALT, GGT, bilirrubina y ecografía abdominal. Los signos clínicos en gatos suelen ser más sutiles (letargia, anorexia) que en perros."
83
+ }
84
+ },
85
  "azotemia": {
86
  "nombre": "Azotemia",
87
  "descripcion": "Elevación de BUN y creatinina. Clasificar en prerrenal (deshidratación, hipoperfusión), renal (ERC o IRA) o posrenal (obstrucción, rotura urinaria). Estadificar según criterios IRIS si se sospecha ERC. Correlacionar con densidad urinaria, urianálisis y presión arterial."
 
153
  "nombre": "Hiperfosforemia",
154
  "descripcion": "Frecuente en enfermedad renal crónica (ERC); la retención de fósforo contribuye al hiperparatiroidismo renal secundario y acelera la progresión del daño tubular. Considerar también hipoparatiroidismo, hipervitaminosis D, lisis tumoral o hemólisis artefactual. Clave en estadiaje IRIS y planificación dietética (restricción de fósforo en ERC estadio ≥ II)."
155
  },
156
+ "hipomagnesemia": {
157
+ "nombre": "Hipomagnesemia",
158
+ "descripcion": "Magnesio sérico disminuido. Compatible con malabsorción intestinal (enteropatías crónicas), pérdidas renales (diuréticos de asa, tubulonefropatías), vómito/diarrea prolongados, cetoacidosis diabética o síndrome de realimentación. La hipomagnesemia perpetúa la hipocalcemia e hipopotasemia refractarias (el magnesio es cofactor de la PTH y la bomba Na/K-ATPasa). Sospechar en pacientes con hipocalcemia resistente a tratamiento."
159
+ },
160
+ "hipermagnesemia": {
161
+ "nombre": "Hipermagnesemia",
162
+ "descripcion": "Magnesio sérico elevado. Compatible con insuficiencia renal (causa más frecuente — reducción de aclaramiento), hipoadrenocorticismo o administración iatrogénica de sales de magnesio. Puede causar hipotensión, depresión neuromuscular y, en concentraciones graves (> 5 mg/dL), bloqueo de conducción cardíaca. Monitorear ECG en casos moderados-graves."
163
+ },
164
+ "ferropenia_hierro": {
165
+ "nombre": "Déficit de hierro sérico",
166
+ "descripcion": "Hierro sérico disminuido. Compatible con hemorragia crónica (parasitosis, úlcera gastrointestinal, neoplasia hemorrágica, pulgas en cachorros), malabsorción o dieta deficiente. Correlacionar con MCV (microcitosis), MCHC (hipocromia), RDW aumentado y reticulocitos. El hierro sérico aislado tiene limitaciones; valorar TIBC o ferritina sérica para confirmar depleción de reservas. En cachorros de razas toy con anemia microcítica hipocrómica, la ferropenia es la etiología más frecuente."
167
+ },
168
+ "ac_urico_elevado": {
169
+ "nombre": "Hiperuricemia",
170
+ "descripcion": "Ácido úrico sérico elevado. En perros y gatos, el ácido úrico se metaboliza normalmente a alantoína por la uricasa, por lo que la hiperuricemia es infrecuente en estas especies. Descartar hepatopatía grave con disfunción del ciclo de la urea (incluido shunt portosistémico), enfermedad renal o raza con déficit parcial de uricasa (Dálmata, Bulldog inglés, Bulldog americano — predispostos a urolitiasis por urato). En Dálmatas, valores > 2 mg/dL son relevantes clínicamente y justifican acidificación de orina y dieta baja en purinas."
171
+ },
172
  "hiposthenuria": {
173
  "nombre": "Hiposthenuria (USG < 1.008) — concentración muy disminuida",
174
  "descripcion": "Densidad urinaria muy baja. Compatible con diabetes insípida central o nefrogénica, hiperadrenocorticismo (HAC), hipercalcemia, hipopotasemia o administración de diuréticos. En felinos, considerar acromegalia y HAC. Requiere prueba de privación de agua o test de vasopresina para diferenciar los subtipos de diabetes insípida."
 
183
  "canino": "T4 total disminuida. El hipotiroidismo canino es la endocrinopatía más frecuente en perros adultos de mediana edad. Signos clásicos: letargia, obesidad, alopecia bilateral simétrica, intolerancia al frío. Confirmar con T4 libre por diálisis de equilibrio. Los fármacos (glucocorticoides, fenobarbital, sulfonamidas) y la enfermedad sistémica pueden suprimir T4 falsamente (síndrome del enfermo eutiroideo)."
184
  }
185
  },
186
+ "t4_libre_baja": {
187
+ "nombre": "T4 libre (fT4) disminuida",
188
+ "descripcion": {
189
+ "canino": "T4 libre por diálisis de equilibrio disminuida. Es la prueba de mayor especificidad para confirmar hipotiroidismo verdadero en caninos, especialmente cuando la T4 total se encuentra en zona limítrofe o ante sospecha de síndrome del enfermo eutiroideo. Un valor bajo de fT4 junto con TSH elevado constituye el gold standard diagnóstico para hipotiroidismo primario canino. Iniciar levotiroxina a 0.02 mg/kg/12h y reevaluar T4 post-dosis a las 4 semanas.",
190
+ "felino": "T4 libre disminuida en felinos sugiere hipotiroidismo iatrogénico (post-tiroidectomía, tratamiento con radioyodo o metimazol) o síndrome del enfermo eutiroideo. El hipotiroidismo espontáneo primario es raro en gatos; descartar siempre causa secundaria a tratamiento de hipertiroidismo. Correlacionar con signos clínicos de hipotiroidismo y reevaluar función renal."
191
+ }
192
+ },
193
+ "tsh_elevado": {
194
+ "nombre": "TSH elevado — hipotiroidismo primario",
195
+ "descripcion": {
196
+ "canino": "TSH canino (cTSH) elevado compatible con hipotiroidismo primario (tiroiditis linfocítica idiopática o atrofia tiroidea idiopática — causas más frecuentes). La combinación de TSH elevado + T4 total y/o fT4 bajos tiene sensibilidad del 60–85% y especificidad > 95% para hipotiroidismo canino. Un TSH elevado con T4 normal puede indicar hipotiroidismo subclínico compensado; repetir en 3–6 meses. Los fármacos como las sulfonamidas pueden causar hipotiroidismo iatrogénico reversible.",
197
+ "felino": "TSH elevado en felinos es inusual; el hipotiroidismo espontáneo primario es infrecuente. Si se confirma con T4 y fT4 bajos, sospechar tiroiditis linfocítica, aplasia tiroidea (congénita) o hipotiroidismo iatrogénico. Correlacionar con signos clínicos (letargia, ganancia de peso, mixedema, bradicardia)."
198
+ }
199
+ },
200
+ "tsh_suprimido": {
201
+ "nombre": "TSH suprimido — posible hipertiroidismo",
202
+ "descripcion": {
203
+ "canino": "TSH canino suprimido (< 0.01 ng/mL). En caninos un TSH indetectable con T4 normal puede ser hallazgo sin significado clínico. Si acompaña a T4 elevada, considerar hipertiroidismo (carcinoma tiroideo funcional, suplementación exógena). Evaluar masa cervical palpable y ecografía tiroidea.",
204
+ "felino": "TSH suprimido (< 0.03 ng/mL) en felinos es altamente sugestivo de hipertiroidismo. La supresión de TSH precede a la elevación de T4 total, siendo útil como marcador temprano o en casos borderline. Correlacionar con T4 total y fT4. Si TSH indetectable con T4 en zona limítrofe, la T4 libre confirma el diagnóstico. La supresión de TSH es casi universal en gatos hipertiroideos no tratados."
205
+ }
206
+ },
207
  "hipertiroidismo": {
208
  "nombre": "Hipertiroidismo — T4 elevada",
209
  "descripcion": {
 
226
  "nombre": "Cortisol basal bajo — posible hipoadrenocorticismo",
227
  "descripcion": "Cortisol basal disminuido. Un valor < 1 μg/dL (canino) o < 0,5 μg/dL (felino) es altamente sugestivo de hipoadrenocorticismo; confirmar con test de estimulación con ACTH. Valores basales < 2 μg/dL justifican la realización del test. Evaluar junto a electrolitos y ratio Na:K."
228
  },
229
+ "progesterona_elevada": {
230
+ "nombre": "Progesterona elevada",
231
+ "descripcion": {
232
+ "canino": "Progesterona sérica elevada (> 1 ng/mL en contexto basal). Valores de 2–5 ng/mL coinciden con la ovulación en hembras intactas; valores > 5 ng/mL indican fase luteal activa o gestación. En hembras clínicamente enfermas con progesterona elevada, descartar piómetra (fase luteal) o quiste luteal ovárico. En machos, valores elevados pueden indicar neoplasia testicular secretora de progesterona (tumor de células de Leydig o Sertoli). La progesterona alta sostiene el endometrio y puede favorecer infección uterina o hiperplasia endometrial quística.",
233
+ "felino": "Progesterona elevada en gatas compatibles con gestación (> 2 ng/mL), pseudogestación, quiste luteal o neoplasia ovárica funcional. La gata es ovuladora inducida; la progesterona elevada sin apareamiento sugiere ovulación espontánea o quiste. En felinos macho con progesterona elevada, considerar neoplasia testicular o adrenocortical."
234
+ }
235
+ },
236
+ "dano_miocardico": {
237
+ "nombre": "Daño miocárdico — Troponina I elevada",
238
+ "descripcion": "Troponina I cardíaca (cTnI) elevada. Marcador altamente sensible y específico de necrosis/lesión cardiomiocitaria. Compatible con cardiomiopatía dilatada (DCM — especialmente caninos de razas grandes), cardiomiopatía hipertrófica (HCM — principalmente felinos), miocarditis (viral, bacteriana, toxoplasma), trauma torácico, taquiarritmias sostenidas, contusión miocárdica o lesión isquémica perioperatoria. En perros: considerar también DCM por deficiencia de taurina/carnitina o DCM asociada a dietas grain-free. Correlacionar con NT-proBNP, radiografía torácica y ecocardiografía. La cinética de la troponina (elevación aguda vs. crónica) ayuda a diferenciar lesión aguda de cardiomiopatía establecida."
239
+ },
240
+ "cardiopatia_bnp": {
241
+ "nombre": "NT-proBNP elevado — cardiopatía",
242
+ "descripcion": {
243
+ "canino": "NT-proBNP elevado (> 900 pmol/L) compatible con cardiopatía estructural o funcional con sobrecarga de presión o volumen. La causa más frecuente en perros es la enfermedad valvular degenerativa mitral (EVDM). También compatible con cardiomiopatía dilatada (DCM), pericarditis, hipertensión pulmonar o insuficiencia cardíaca congestiva (ICC). Estadificar según criterios ACVIM (estadios A–D). Correlacionar con radiografía torácica (silueta cardíaca, patrón vascular pulmonar), ECG y ecocardiografía. Valores muy elevados (> 1500 pmol/L) predicen ICC inminente en perros con EVDM preclínica.",
244
+ "felino": "NT-proBNP elevado (> 100 pmol/L) en felinos sugestivo de cardiomiopatía hipertrófica (CMH — causa más frecuente), cardiomiopatía restrictiva o dilatada. La CMH felina es la cardiopatía más prevalente en gatos domésticos. Valores > 200 pmol/L tienen alta sensibilidad para detectar CMH clínicamente significativa. Correlacionar con ecocardiografía (grosor pared posterior del VI, ratio AI/Ao) y cTnI. Descartar hipertiroidismo e hipertensión sistémica como causas secundarias de hipertrofia ventricular."
245
+ }
246
+ },
247
+ "inflamacion_aguda": {
248
+ "nombre": "Respuesta de fase aguda — PCR/SAA elevada",
249
+ "descripcion": {
250
+ "canino": "PCR (Proteína C Reactiva) y/o SAA (Amiloide A Sérico) elevadas. Son las principales proteínas de fase aguda positivas en el perro; aumentan rápidamente (4–6 horas) ante inflamación, infección o necrosis tisular, con pico a las 24–48 horas. Valores > 10 mg/L indican respuesta inflamatoria sistémica activa; > 100 mg/L sugieren inflamación grave (sepsis, peritonitis, trauma extenso). Son marcadores sensibles para monitorizar respuesta al tratamiento y detectar recidivas. La PCR canina no distingue causa bacteriana de viral o estéril; interpretar en contexto clínico. La normalización post-tratamiento confirma resolución del proceso inflamatorio.",
251
+ "felino": "SAA (Amiloide A Sérico) felino es la principal proteína de fase aguda en gatos, siendo más sensible que la PCR. Valores > 10 mg/L indican inflamación sistémica activa; incluso aumentos leves son clínicamente relevantes. Útil para detectar infecciones subclínicas, monitorizar peritonitis infecciosa felina (PIF), pancreatitis, colangiohepatitis y trauma. La PCR felina tiene menor utilidad diagnóstica que el SAA. En el contexto de PIF, la SAA puede alcanzar valores muy elevados (> 500 mg/L)."
252
+ }
253
+ },
254
+ "fenobarbital_subterapeutico": {
255
+ "nombre": "Fenobarbital — nivel subterapéutico",
256
+ "descripcion": "Nivel sérico de fenobarbital por debajo del rango terapéutico (< 20 μg/mL). Indica dosificación insuficiente para el control de epilepsia/convulsiones. Las convulsiones mal controladas con niveles subterapéuticos requieren ajuste de dosis o revisión de la adherencia al tratamiento. Recordar que el fenobarbital induce su propio metabolismo (autoinducción enzimática del CYP450); tras iniciar o aumentar la dosis, esperar 2–4 semanas antes de remedir para obtener niveles en estado estacionario. También puede observarse con interacciones farmacológicas (rifampicina, ketoconazol) que aceleren el metabolismo."
257
+ },
258
+ "fenobarbital_toxico": {
259
+ "nombre": "Fenobarbital — nivel tóxico",
260
+ "descripcion": "Nivel sérico de fenobarbital por encima del rango terapéutico (> 40 μg/mL). Niveles elevados aumentan el riesgo de hepatotoxicidad (principal efecto adverso a largo plazo), sedación excesiva, ataxia, polifagia, poliuria/polidipsia y trombocitopenia. Monitorizar ALT, FAL y función hepática de forma periódica (cada 6 meses). Si ALT > 5× el límite superior de referencia o aparecen signos clínicos de hepatopatía, reducir dosis y considerar bromuro potásico como antiepiléptico alternativo o coadyuvante. Medir siempre niveles en el punto de mínima concentración (valle, 12–24h post-dosis)."
261
+ },
262
+ "ciclosporina_subterapeutica": {
263
+ "nombre": "Ciclosporina — nivel subterapéutico",
264
+ "descripcion": "Nivel sérico de ciclosporina por debajo del rango terapéutico (< 100 ng/mL en muestras de valle/trough). Indica biodisponibilidad o absorción insuficiente para lograr efecto inmunosupresor adecuado. En dermatología veterinaria (atopia canina, estomatitis linfocítica felina), los niveles subterapéuticos se correlacionan con falta de respuesta clínica. Verificar horario de administración (ciclosporina oral debe darse con el estómago vacío o consistentemente con/sin alimento para minimizar variabilidad), interacciones farmacológicas (ketoconazol puede aumentar significativamente los niveles) y formulación utilizada (Atopica® o genéricos)."
265
+ },
266
+ "ciclosporina_toxica": {
267
+ "nombre": "Ciclosporina — nivel potencialmente tóxico",
268
+ "descripcion": "Nivel sérico de ciclosporina por encima del rango terapéutico recomendado (> 400 ng/mL en trough). Niveles elevados aumentan el riesgo de nefrotoxicidad (principal toxicidad en perros y gatos), inmunosupresión excesiva con infecciones oportunistas, hipertrofia gingival, vómito/diarrea, hipertricosis y, raramente, neoplasias. Reducir dosis o aumentar el intervalo de dosificación. La nefrotoxicidad puede ser reversible si se detecta tempranamente; monitorizar BUN, creatinina y SDMA. El ketoconazol oral se usa deliberadamente para aumentar los niveles de ciclosporina y reducir la dosis necesaria (y el costo), pero requiere un control cuidadoso del nivel sérico."
269
+ },
270
  "deficit_insulina": {
271
  "nombre": "Posible déficit de insulina — hiperglucemia con insulina baja",
272
  "descripcion": "Insulinemia baja en presencia de hiperglucemia sugiere déficit insulínico relativo o absoluto compatible con diabetes mellitus tipo 1 (destrucción de células β) o pancreatitis crónica con afectación exocrina y endocrina. Correlacionar con fructosamina para confirmar cronicidad. En felinos, la diabetes mellitus tipo 2 (resistencia insulínica) es más frecuente y puede cursar con insulina normal o alta."
273
+ },
274
+ "coagulopatia_extrinseca": {
275
+ "nombre": "Coagulopatía — vía extrínseca (TP prolongado)",
276
+ "descripcion": "TP/PT prolongado con TTPa normal. Compatible con deficiencia del factor VII (el único factor exclusivo de la vía extrínseca y de semivida más corta — primero en agotarse en intoxicación por rodenticidas de segunda generación), hepatopatía aguda, estadio precoz de intoxicación por antagonistas de vitamina K (ADKA — brodifacoum, bromadiolona) o deficiencia dietética de vitamina K. El TTPa normal indica integridad de la vía intrínseca. En sospecha de rodenticidas, iniciar vitamina K₁ parenteral sin esperar confirmación analítica. Realizar perfil hepático completo si no hay exposición conocida."
277
+ },
278
+ "coagulopatia_intrinseca": {
279
+ "nombre": "Coagulopatía — vía intrínseca (TTPa prolongado)",
280
+ "descripcion": "TTPa/aPTT prolongado con TP normal. Compatible con hemofilia A (deficiencia de factor VIII — la coagulopatía hereditaria más frecuente en perros, ligada al X), hemofilia B (factor IX), deficiencia de factores de contacto (XII, XI — habitualmente sin sangrado clínico significativo), enfermedad de von Willebrand (deficiencia del vWF que actúa como cofactor del FVIII), heparinización sistémica o lupus anticoagulante. La hemofilia en caninos produce sangrado articular, muscular y post-quirúrgico grave. Solicitar actividad específica de factores VIII y IX; medir vWF Ag si hay sospecha de vWD."
281
+ },
282
+ "coagulopatia_mixta": {
283
+ "nombre": "Coagulopatía de vías múltiples (TP y TTPa prolongados)",
284
+ "descripcion": "TP y TTPa prolongados simultáneamente. Compatible con: (1) Intoxicación por antagonistas de vitamina K (rodenticidas de segunda generación — causa más frecuente en perros; los factores dependientes de Vit.K son II, VII, IX y X); los signos aparecen 3–5 días post-ingesta. Tratamiento: vitamina K₁ SC/oral por 4–6 semanas. (2) CID (coagulación intravascular diseminada) — consumo de factores y plaquetas. (3) Hepatopatía grave — reducción de síntesis de todos los factores excepto el VIII. (4) Deficiencia de factores comunes (X, V, II, I). Solicitar dímeros D, FDP, fibrinógeno y recuento plaquetario para descartar CID; ecografía abdominal y perfil hepático."
285
+ },
286
+ "cid": {
287
+ "nombre": "CID — Coagulación Intravascular Diseminada",
288
+ "descripcion": "Patrón compatible con CID: dímeros D elevados + FDP elevados + fibrinógeno disminuido (consumo), habitualmente acompañados de trombocitopenia y tiempos de coagulación prolongados. El CID es un síndrome secundario a activación sistémica de la coagulación. Desencadenantes frecuentes en veterinaria: sepsis/SIRS, hemangiosarcoma (principal neoplasia asociada), pancreatitis grave, trauma masivo, golpe de calor, enfermedad hemolítica inmunomediada, mordedura de serpiente y toxemia por piometra. Puede manifestarse como fase trombótica (microtrombos y fallo orgánico) o hemorrágica (hemorragias difusas). Tratamiento de la causa subyacente es prioritario; la transfusión de plasma fresco congelado (PFC), crioprecipitado y concentrado de plaquetas se indica en la fase hemorrágica grave."
289
+ },
290
+ "hiperfibrinogenemia": {
291
+ "nombre": "Hiperfibrinogenemia",
292
+ "descripcion": "Fibrinógeno elevado. El fibrinógeno es una proteína de fase aguda positiva en perros y gatos; aumenta en respuesta a inflamación sistémica, infección, trauma o neoplasia activa. En bovinos es el marcador de fase aguda más usado clínicamente. En pequeños animales su elevación confirma respuesta inflamatoria sistémica activa junto con PCR y SAA. Valores muy elevados (> 600 mg/dL) pueden aumentar la viscosidad sanguínea y el riesgo trombótico. Correlacionar con cuadro clínico, leucograma y otros marcadores inflamatorios."
293
+ },
294
+ "hipofibrinogenemia": {
295
+ "nombre": "Hipofibrinogenemia",
296
+ "descripcion": "Fibrinógeno disminuido. Compatible con: (1) CID activo — consumo por activación sistémica de la coagulación (causa más frecuente; asociar dímeros D y FDP). (2) Insuficiencia hepática grave — el fibrinógeno se sintetiza exclusivamente en el hígado; su reducción indica fallo sintético avanzado. (3) Hiperfibrinolisis primaria — rara; puede ocurrir en neoplasia esplénica (hemangiosarcoma), cirugía extensa o posttrasplante. (4) Coagulopatía dilucional post-transfusión masiva. En CID, el fibrinógeno bajo se correlaciona con gravedad del síndrome y riesgo de hemorragia incontrolable; valorar administración de crioprecipitado (rico en fibrinógeno)."
297
+ },
298
+ "deficit_vwf": {
299
+ "nombre": "Déficit de vWF — Enfermedad de von Willebrand",
300
+ "descripcion": "vWF (antígeno del factor von Willebrand) disminuido. La enfermedad de von Willebrand es la coagulopatía hereditaria más frecuente en perros. Razas predispuestas a vWD tipo I (deficiencia cuantitativa leve-moderada): Dobermann Pinscher, Pastor de Shetland, Caniche, Scottie, Golden Retriever, Labrador. Razas con vWD tipo III (ausencia total de vWF — grave): Scottish Terrier, Chesapeake Bay Retriever. Signos clínicos: epistaxis, sangrado de mucosas, hematomas, hemorragia excesiva post-quirúrgica. El TTPa puede estar prolongado en casos graves (el vWF estabiliza el FVIII). El TP es normal. Confirmar con actividad funcional del vWF (vWF:RCo). Tratamiento: desmopresina (DDAVP) en tipo I, transfusión de PFC o crioprecipitado en tipos II y III."
301
+ },
302
+ "antitrombina_baja": {
303
+ "nombre": "Antitrombina (AT-III) disminuida — estado protrombótico",
304
+ "descripcion": "Antitrombina (AT-III) reducida. La AT-III es el principal inhibidor fisiológico de la trombina, factor Xa y otros factores activados; su deficiencia crea un estado protrombótico con riesgo elevado de tromboembolismo. Compatible con: (1) Pérdida renal — síndrome nefrótico (glomerulonefritis, amiloidosis) es la causa más frecuente en perros; la AT-III se pierde junto a la albumina por proteinuria glomerular. (2) Enteropatía con pérdida de proteínas (EPP). (3) CID — consumo de anticoagulantes naturales. (4) Hepatopatía grave — síntesis reducida. (5) Sepsis. Pacientes con AT-III < 70% tienen alto riesgo de tromboembolismo pulmonar (TEP) y trombosis venosa. Monitorear UPC, albumina y función hepática. Considerar anticoagulación profiláctica (heparina de bajo peso molecular) cuando AT-III < 60–70% con hipoalbuminemia."
305
+ },
306
+ "acidosis_respiratoria": {
307
+ "nombre": "Acidosis respiratoria",
308
+ "descripcion": "pH disminuido con pCO₂ elevado (hipercarbia). La hipercapnia resulta de hipoventilación alveolar. Causas frecuentes: parálisis o debilidad muscular (miastenia gravis, polirradiculoneuritis, botulismo), obstrucción de vías aéreas superiores (cuerpo extraño, síndrome braquicefálico grave, colapso traqueal), enfermedad pulmonar grave (bronconeumonía, edema pulmonar, efusión pleural masiva), depresión del centro respiratorio (opiáceos, anestesia, encefalitis, trauma craneoencefálico) o neumotórax a tensión. La compensación metabólica (elevación de HCO₃⁻) se establece en 24–48h (forma crónica: HCO₃⁻ puede alcanzar 28–30 mEq/L). Priorizar asegurar vía aérea permeable y ventilación adecuada; si pCO₂ > 60 mmHg con pH < 7.25 → ventilación mecánica urgente."
309
+ },
310
+ "alcalosis_respiratoria": {
311
+ "nombre": "Alcalosis respiratoria",
312
+ "descripcion": "pH elevado con pCO₂ disminuido (hipocarbia/hipocapnia). Resulta de hiperventilación alveolar. Causas: dolor agudo, ansiedad/estrés, fiebre alta, hipoxemia grave (hiperventilación compensatoria — buscar pO₂ bajo), sepsis/SIRS en fase inicial, trastornos del SNC (lesión en centro respiratorio), hiperventilación mecánica iatrogénica o anemia grave. La alcalosis respiratoria grave puede causar hipocalcemia ionizada (tetania) por aumento de la unión del Ca²⁺ a proteínas plasmáticas. La compensación metabólica (reducción de HCO₃⁻ por excreción renal) es lenta (días). Identificar y tratar la causa primaria; si hipoxemia → oxigenoterapia."
313
+ },
314
+ "acidosis_metabolica": {
315
+ "nombre": "Acidosis metabólica",
316
+ "descripcion": "pH disminuido con HCO₃⁻ bajo y/o exceso de base negativo (BE < −4 mEq/L). Trastorno ácido-base más frecuente en urgencias veterinarias. Clasificar por anión gap: (1) AG elevado (> 16 mEq/L canino; > 18 mEq/L felino) — indica acumulación de ácidos orgánicos: cetoacidosis diabética (DKA — glucosa + cetonuria), acidosis láctica (shock, sepsis, hipoperfusión tisular — lactato > 5 mmol/L), uremia (ERC avanzada — ácidos orgánicos retenidos), intoxicación por etilenglicol (ácidos oxálico y glicólico), salicilatos. (2) AG normal (hiperclorémica) — indica pérdida de bicarbonato: diarrea osmótica/secretora crónica (causa más frecuente), hipoadrenocorticismo, acidosis tubular renal (RTA), dilución por fluidos hipotónicos. La compensación respiratoria (hiperventilación — reducción de pCO₂) es inmediata. Tratar causa subyacente; bicarbonato IV solo si pH < 7.10 con manifestaciones graves."
317
+ },
318
+ "alcalosis_metabolica": {
319
+ "nombre": "Alcalosis metabólica",
320
+ "descripcion": "pH elevado con HCO₃⁻ alto y/o exceso de base positivo (BE > +4 mEq/L). Compatible con pérdida de protones: vómito de contenido gástrico (causa más frecuente — estenosis pilórica, obstrucción proximal, vómito crónico persistente con pérdida de HCl), administración de bicarbonato, hipercortisolismo (aldosterona retiene HCO₃⁻ y excreta K⁺ y H⁺), hipopotasemia grave (el K⁺ intracelular se intercambia por H⁺ extracellular para compensar) o diuréticos de asa. La alcalosis metabólica grave puede producir hipocalcemia ionizada (tetania, convulsiones) por aumento de la unión Ca²⁺-albúmina. La compensación respiratoria (hipoventilación, aumento de pCO₂) es limitada (el organismo no hipercapnia más allá de 55 mmHg). Evaluar electrolitos especialmente Cl⁻ y K⁺."
321
+ },
322
+ "hipoxemia": {
323
+ "nombre": "Hipoxemia",
324
+ "descripcion": "pO₂ arterial disminuido. Hipoxemia significativa: pO₂ < 80 mmHg; grave: < 60 mmHg (equivalente a SO₂ ~90%). Mecanismos: (1) Hipoventilación: pCO₂ elevado concomitante — obstrucción respiratoria, sedación, neuromuscular. (2) Desequilibrio V/Q (ventilación/perfusión): causa más frecuente — bronconeumonía, edema pulmonar, atelectasia, contusión pulmonar. (3) Shunt intrapulmonar derecha→izquierda: hipoxemia grave no responsiva a O₂ suplementario — ARDS. (4) Alteración de difusión: rara en veterinaria. (5) Hipoxia hipobárica (altitud elevada). En el paciente anestesiado, pO₂ < 80 mmHg con FiO₂ al 100% indica shunt o atelectasia grave. Oxigenoterapia inmediata si pO₂ < 70 mmHg; ventilación mecánica con PEEP si no mejora con FiO₂ alta."
325
+ },
326
+ "hiperlactatemia": {
327
+ "nombre": "Hiperlactatemia",
328
+ "descripcion": "Lactato sanguíneo elevado. Marcador de hipoperfusión tisular y metabolismo anaeróbico. Clasificar por mecanismo: (1) Tipo A — hipóxica (más frecuente en urgencias): shock (hipovolémico, cardiogénico, distributivo-séptico, obstructivo — dilatación-vólvulo gástrico), hipoxemia grave, anemia severa, bajo gasto cardíaco. (2) Tipo B — no hipóxica: neoplasia con alta glucólisis (linfoma, hemangiosarcoma), insuficiencia hepática grave (reducción del aclaramiento de lactato), diabetes mellitus, ejercicio exhaustivo, convulsiones, fármacos (metformina, propilenglicol), intoxicación por etilenglicol o salicilatos. Niveles > 2.5 mmol/L: iniciar resucitación; > 5 mmol/L: pronóstico reservado; > 10 mmol/L: pronóstico grave. La reducción del lactato > 10% en 1–2h tras resucitación (aclaración de lactato) es un indicador positivo de respuesta al tratamiento."
329
+ },
330
+ "ca_ionizado_bajo": {
331
+ "nombre": "Hipocalcemia ionizada",
332
+ "descripcion": "Calcio ionizado (iCa) disminuido. El iCa es la fracción biológicamente activa; los valores de calcio total pueden ser normales con iCa bajo (especialmente en alcalosis, que aumenta la unión a albumina, o en hipoalbuminemia). Compatible con hipoparatiroidismo (idiopático o postquirúrgico — tiroidectomía bilateral en felinos), pancreatitis aguda grave (saponificación de calcio por ácidos grasos libres liberados), eclampsia puerperal (hipocalcemia periparturienta), sepsis grave, hipomagnesemia (inhibe la secreción de PTH y la respuesta tisular a la misma — sospechar si hipocalcemia refractaria al tratamiento), quelación masiva (EDTA, citrato por transfusiones masivas), alcalosis respiratoria. Signos clínicos: espasmo muscular, temblores, tetania, convulsiones, arritmias. iCa < 0.8 mmol/L requiere calcio IV urgente (gluconato cálcico)."
333
+ },
334
+ "ca_ionizado_alto": {
335
+ "nombre": "Hipercalcemia ionizada",
336
+ "descripcion": "Calcio ionizado (iCa) elevado. Más específico que el calcio total (no influenciado por cambios en albúmina). Compatible con hipercalcemia de malignidad (PTHrP producida por linfoma, carcinoma apocrino de sacos anales, tumores sólidos), hiperparatiroidismo primario (adenoma o hiperplasia paratiroidea), hipervitaminosis D (intoxicación por rodenticidas tipo calciferol, suplementos, psoriasis tópicos), granulomatosis sistémica (hongos, micobacterias), hipoadrenocorticismo (mecanismo aún debatido). Un iCa elevado con calcio total normal puede reflejar acidosis (que desplaza el calcio de las proteínas). Monitorizar función renal (la hipercalcemia crónica causa nefrocalcinosis y ERC progresiva) y ECG (acortamiento del intervalo QT). Confirmar con PTH y PTHrP."
337
+ },
338
+ "anion_gap_elevado": {
339
+ "nombre": "Anión gap elevado",
340
+ "descripcion": "Anión gap elevado (> 16 mEq/L en perros; > 18 mEq/L en gatos). Indica acumulación de aniones no medidos. En el contexto de acidosis metabólica, un AG elevado orienta hacia ácidos orgánicos o inorgánicos acumulados: (1) Cetoacidosis diabética (DKA) — cetoácidos (β-hidroxibutirato, acetoacetato); correlacionar con glucosa y cetonas urinarias. (2) Acidosis láctica — hipoperfusión tisular, sepsis, shock; medir lactato. (3) Uremia — retención de ácidos orgánicos en ERC avanzada; correlacionar con BUN y creatinina. (4) Intoxicación por etilenglicol — ácido glicólico y oxálico; buscar oxalatos en sedimento urinario y cristales. (5) Salicilatos (aspirina). Aplicar corrección por albúmina: AG corregido = AG + 2.5 × (4 − albúmina en g/dL). AG normal en acidosis metabólica sugiere acidosis hiperclorémica (pérdida digestiva de HCO₃⁻, RTA, hipoadrenocorticismo)."
341
+ },
342
+ "hematuria_uri": {
343
+ "nombre": "Hematuria — eritrocitos elevados en orina",
344
+ "descripcion": "Eritrocitos en sedimento urinario > 5/μL. Compatible con: (1) Cistitis hemorrágica (infecciosa o estéril — cistitis idiopática felina es la causa más frecuente en gatos); (2) Urolitiasis (cristales de estruvita, oxalato cálcico, urato — rasar urolitiasis Dálmatas); (3) Neoplasia del tracto urinario — carcinoma de células de transición (TCC) de vejiga en perros mayores; (4) Trauma/coagulopatía sistémica; (5) Prostatitis o hiperplasia prostática en machos (contaminación urinaria). Distinguir hematuria (eritrocitos en sedimento) de hemoglobinuria (orina roja sin eritrocitos — hemólisis intravascular) y mioglobinuria (orina oscura en rabdomiólisis — sin eritrocitos). Cistocentesis para muestras libres de contaminación. Ecografía de vejiga y radiografía abdominal para descartar urolitiasis y neoplasia."
345
+ },
346
+ "piuria": {
347
+ "nombre": "Piuria — leucocitos elevados en orina",
348
+ "descripcion": "Leucocitos en sedimento urinario > 5/μL. La piuria indica inflamación del tracto urinario (ITU) o inflamación estéril. Compatible con: infección urinaria bacteriana (E. coli — más frecuente en hembras, Staphylococcus, Proteus, Klebsiella, Pseudomonas), pielonefritis (piuria + cilindros + signos sistémicos), cistitis estéril idiopática (felinos jóvenes estresados), cálculos urinarios irritantes o neoplasia vesical. La piuria sin bacteriuria en muestra por cistocentesis puede indicar inflamación estéril, antibioticoterapia reciente o contaminación. El cultivo urinario con antibiograma es el gold standard diagnóstico para ITU. En machos, descartar prostatitis (piuria + secreción prepucial). En felinos, la FUS (feline urological syndrome) suele cursar con piuria estéril."
349
+ },
350
+ "proteinuria_upc": {
351
+ "nombre": "Proteinuria — UPC elevado",
352
+ "descripcion": "Cociente Proteína/Creatinina Urinaria (UPC) elevado. UPC > 0.2 en perros o > 0.4 en gatos indica proteinuria anormal persistente. Clasificar según localización: (1) Glomerular — UPC > 2.0, hipoalbuminemia, edemas, ascitis; glomerulonefritis (inmunomediada, infecciosa), amiloidosis renal (Shar Pei, Beagle — acumulo de SAA en glomérulos), nefropatía diabética. (2) Tubular — UPC modesto, pérdida de proteínas de bajo peso molecular; nefrotoxicidad (aminoglucósidos, cisplatino, AINES), síndrome de Fanconi (Basenji). (3) Post-renal — cistitis, prostatitis, vaginitis; confirmar con cistocentesis para excluir contaminación. (4) Prerrenal — hiperglobulinemia extrema, hemoglobinuria. La proteinuria glomerular crónica asocia riesgo elevado de tromboembolismo (pérdida de AT-III y proteína C). Estadificar según IRIS (proteinuria substadios P0–P3). Iniciar IECA o ARA-II si UPC persistente > 0.5 con hipoalbuminemia."
353
  }
354
  }
data/valores_referencia.json CHANGED
@@ -28,6 +28,8 @@
28
  "ast": { "inferior": 10, "superior": 50, "unidad": "U/L", "nombre": "AST (GOT)" },
29
  "fal": { "inferior": 23, "superior": 212, "unidad": "U/L", "nombre": "FAL (ALP)" },
30
  "ggt": { "inferior": 0, "superior": 7, "unidad": "U/L", "nombre": "GGT" },
 
 
31
  "bili": { "inferior": 0, "superior": 0.3, "unidad": "mg/dL", "nombre": "Bilirrubina Total" },
32
  "bili_dir": { "inferior": 0, "superior": 0.1, "unidad": "mg/dL", "nombre": "Bilirrubina Directa" },
33
  "acidos_bil": { "inferior": 0, "superior": 5, "unidad": "μmol/L", "nombre": "Ácidos Biliares" },
@@ -40,6 +42,9 @@
40
  "glob": { "inferior": 2.7, "superior": 4.4, "unidad": "g/dL", "nombre": "Globulinas" },
41
  "fosf": { "inferior": 2.5, "superior": 6.2, "unidad": "mg/dL", "nombre": "Fósforo" },
42
  "calc": { "inferior": 9.0, "superior": 11.3, "unidad": "mg/dL", "nombre": "Calcio" },
 
 
 
43
  "fruc": { "inferior": 225, "superior": 365, "unidad": "μmol/L", "nombre": "Fructosamina" },
44
  "sodio": { "inferior": 140, "superior": 154, "unidad": "mEq/L", "nombre": "Sodio" },
45
  "potasio": { "inferior": 3.7, "superior": 5.8, "unidad": "mEq/L", "nombre": "Potasio" },
@@ -48,13 +53,43 @@
48
  "colest": { "inferior": 110, "superior": 320, "unidad": "mg/dL", "nombre": "Colesterol" },
49
  "trigli": { "inferior": 20, "superior": 150, "unidad": "mg/dL", "nombre": "Triglicéridos" },
50
  "lipasa": { "inferior": 0, "superior": 200, "unidad": "U/L", "nombre": "Lipasa" },
 
51
  "ck": { "inferior": 10, "superior": 200, "unidad": "U/L", "nombre": "Creatina Kinasa (CK)" },
52
  "usg": { "inferior": 1.013, "superior": 1.100, "unidad": "", "nombre": "Densidad (USG)" },
53
  "ph": { "inferior": 5.5, "superior": 7.5, "unidad": "", "nombre": "pH urinario" },
 
 
 
 
 
 
 
 
 
 
 
54
  "cortisol_bas": { "inferior": 1.0, "superior": 6.0, "unidad": "μg/dL", "nombre": "Cortisol basal" },
55
  "cortisol_acth":{ "inferior": 6.0, "superior": 18.0, "unidad": "μg/dL", "nombre": "Cortisol post-ACTH" },
56
  "t4_total": { "inferior": 19, "superior": 58, "unidad": "nmol/L", "nombre": "T4 total" },
57
- "insulina": { "inferior": 5, "superior": 20, "unidad": "μIU/mL", "nombre": "Insulina basal" }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  },
59
  "felino": {
60
  "rbc": { "inferior": 5.0, "superior": 10.0, "unidad": "x10⁶/μL", "nombre": "Eritrocitos (RBC)" },
@@ -85,6 +120,8 @@
85
  "ast": { "inferior": 10, "superior": 50, "unidad": "U/L", "nombre": "AST (GOT)" },
86
  "fal": { "inferior": 10, "superior": 90, "unidad": "U/L", "nombre": "FAL (ALP)" },
87
  "ggt": { "inferior": 0, "superior": 4, "unidad": "U/L", "nombre": "GGT" },
 
 
88
  "bili": { "inferior": 0, "superior": 0.4, "unidad": "mg/dL", "nombre": "Bilirrubina Total" },
89
  "bili_dir": { "inferior": 0, "superior": 0.1, "unidad": "mg/dL", "nombre": "Bilirrubina Directa" },
90
  "acidos_bil": { "inferior": 0, "superior": 5, "unidad": "μmol/L", "nombre": "Ácidos Biliares" },
@@ -97,6 +134,9 @@
97
  "glob": { "inferior": 2.6, "superior": 5.1, "unidad": "g/dL", "nombre": "Globulinas" },
98
  "fosf": { "inferior": 2.4, "superior": 8.2, "unidad": "mg/dL", "nombre": "Fósforo" },
99
  "calc": { "inferior": 8.0, "superior": 11.0, "unidad": "mg/dL", "nombre": "Calcio" },
 
 
 
100
  "fruc": { "inferior": 225, "superior": 350, "unidad": "μmol/L", "nombre": "Fructosamina" },
101
  "sodio": { "inferior": 144, "superior": 160, "unidad": "mEq/L", "nombre": "Sodio" },
102
  "potasio": { "inferior": 3.7, "superior": 5.4, "unidad": "mEq/L", "nombre": "Potasio" },
@@ -105,12 +145,42 @@
105
  "colest": { "inferior": 75, "superior": 220, "unidad": "mg/dL", "nombre": "Colesterol" },
106
  "trigli": { "inferior": 25, "superior": 160, "unidad": "mg/dL", "nombre": "Triglicéridos" },
107
  "lipasa": { "inferior": 0, "superior": 200, "unidad": "U/L", "nombre": "Lipasa" },
 
108
  "ck": { "inferior": 0, "superior": 314, "unidad": "U/L", "nombre": "Creatina Kinasa (CK)" },
109
  "usg": { "inferior": 1.013, "superior": 1.100, "unidad": "", "nombre": "Densidad (USG)" },
110
  "ph": { "inferior": 5.5, "superior": 7.5, "unidad": "", "nombre": "pH urinario" },
 
 
 
 
 
 
 
 
 
 
 
111
  "cortisol_bas": { "inferior": 0.5, "superior": 4.0, "unidad": "μg/dL", "nombre": "Cortisol basal" },
112
  "cortisol_acth":{ "inferior": 3.5, "superior": 12.0, "unidad": "μg/dL", "nombre": "Cortisol post-ACTH" },
113
  "t4_total": { "inferior": 19, "superior": 52, "unidad": "nmol/L", "nombre": "T4 total" },
114
- "insulina": { "inferior": 5, "superior": 25, "unidad": "μIU/mL", "nombre": "Insulina basal" }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  }
116
  }
 
28
  "ast": { "inferior": 10, "superior": 50, "unidad": "U/L", "nombre": "AST (GOT)" },
29
  "fal": { "inferior": 23, "superior": 212, "unidad": "U/L", "nombre": "FAL (ALP)" },
30
  "ggt": { "inferior": 0, "superior": 7, "unidad": "U/L", "nombre": "GGT" },
31
+ "amylasa": { "inferior": 500, "superior": 2000, "unidad": "U/L", "nombre": "Amilasa (AMY)" },
32
+ "ldh": { "inferior": 50, "superior": 420, "unidad": "U/L", "nombre": "LDH" },
33
  "bili": { "inferior": 0, "superior": 0.3, "unidad": "mg/dL", "nombre": "Bilirrubina Total" },
34
  "bili_dir": { "inferior": 0, "superior": 0.1, "unidad": "mg/dL", "nombre": "Bilirrubina Directa" },
35
  "acidos_bil": { "inferior": 0, "superior": 5, "unidad": "μmol/L", "nombre": "Ácidos Biliares" },
 
42
  "glob": { "inferior": 2.7, "superior": 4.4, "unidad": "g/dL", "nombre": "Globulinas" },
43
  "fosf": { "inferior": 2.5, "superior": 6.2, "unidad": "mg/dL", "nombre": "Fósforo" },
44
  "calc": { "inferior": 9.0, "superior": 11.3, "unidad": "mg/dL", "nombre": "Calcio" },
45
+ "magnesio": { "inferior": 1.7, "superior": 2.5, "unidad": "mg/dL", "nombre": "Magnesio" },
46
+ "hierro": { "inferior": 60, "superior": 200, "unidad": "μg/dL", "nombre": "Hierro sérico (Fe)" },
47
+ "ac_urico": { "inferior": 0, "superior": 1.0, "unidad": "mg/dL", "nombre": "Ácido úrico (UA)" },
48
  "fruc": { "inferior": 225, "superior": 365, "unidad": "μmol/L", "nombre": "Fructosamina" },
49
  "sodio": { "inferior": 140, "superior": 154, "unidad": "mEq/L", "nombre": "Sodio" },
50
  "potasio": { "inferior": 3.7, "superior": 5.8, "unidad": "mEq/L", "nombre": "Potasio" },
 
53
  "colest": { "inferior": 110, "superior": 320, "unidad": "mg/dL", "nombre": "Colesterol" },
54
  "trigli": { "inferior": 20, "superior": 150, "unidad": "mg/dL", "nombre": "Triglicéridos" },
55
  "lipasa": { "inferior": 0, "superior": 200, "unidad": "U/L", "nombre": "Lipasa" },
56
+ "pli": { "inferior": 0, "superior": 200, "unidad": "μg/L", "nombre": "Lipasa pancreática (cPLI)" },
57
  "ck": { "inferior": 10, "superior": 200, "unidad": "U/L", "nombre": "Creatina Kinasa (CK)" },
58
  "usg": { "inferior": 1.013, "superior": 1.100, "unidad": "", "nombre": "Densidad (USG)" },
59
  "ph": { "inferior": 5.5, "superior": 7.5, "unidad": "", "nombre": "pH urinario" },
60
+ "rbc_uri": { "inferior": 0, "superior": 5, "unidad": "/μL", "nombre": "Eritrocitos orina" },
61
+ "wbc_uri": { "inferior": 0, "superior": 5, "unidad": "/μL", "nombre": "Leucocitos orina" },
62
+ "upc": { "inferior": 0, "superior": 0.2, "unidad": "", "nombre": "Cociente P/C (UPC)" },
63
+ "pt": { "inferior": 7.0, "superior": 10.0, "unidad": "s", "nombre": "Tiempo de protrombina (TP)" },
64
+ "aptt": { "inferior": 10.0, "superior": 15.0, "unidad": "s", "nombre": "TTPa (aPTT)" },
65
+ "act": { "inferior": 60, "superior": 90, "unidad": "s", "nombre": "ACT" },
66
+ "fibrinogeno": { "inferior": 150, "superior": 400, "unidad": "mg/dL", "nombre": "Fibrinógeno" },
67
+ "ddimeros": { "inferior": 0, "superior": 250, "unidad": "ng/mL", "nombre": "Dímeros D" },
68
+ "fdp": { "inferior": 0, "superior": 10, "unidad": "μg/mL", "nombre": "PDF (FDP)" },
69
+ "antitrombina": { "inferior": 75, "superior": 120, "unidad": "%", "nombre": "Antitrombina (AT-III)" },
70
+ "vwf": { "inferior": 70, "superior": 180, "unidad": "%", "nombre": "vWF (antígeno)" },
71
  "cortisol_bas": { "inferior": 1.0, "superior": 6.0, "unidad": "μg/dL", "nombre": "Cortisol basal" },
72
  "cortisol_acth":{ "inferior": 6.0, "superior": 18.0, "unidad": "μg/dL", "nombre": "Cortisol post-ACTH" },
73
  "t4_total": { "inferior": 19, "superior": 58, "unidad": "nmol/L", "nombre": "T4 total" },
74
+ "t4_libre": { "inferior": 9, "superior": 37, "unidad": "pmol/L", "nombre": "T4 libre (fT4)" },
75
+ "tsh": { "inferior": 0.01, "superior": 0.60, "unidad": "ng/mL", "nombre": "TSH (cTSH)" },
76
+ "insulina": { "inferior": 5, "superior": 20, "unidad": "μIU/mL", "nombre": "Insulina basal" },
77
+ "progesterona": { "inferior": 0.1, "superior": 1.0, "unidad": "ng/mL", "nombre": "Progesterona" },
78
+ "ctni": { "inferior": 0, "superior": 0.07, "unidad": "ng/mL", "nombre": "Troponina I cardíaca (cTnI)" },
79
+ "nt_probnp": { "inferior": 0, "superior": 900, "unidad": "pmol/L", "nombre": "NT-proBNP" },
80
+ "crp": { "inferior": 0, "superior": 10, "unidad": "mg/L", "nombre": "Proteína C reactiva (PCR)" },
81
+ "saa": { "inferior": 0, "superior": 10, "unidad": "mg/L", "nombre": "Amiloide A sérico (SAA)" },
82
+ "fenobarbital": { "inferior": 20, "superior": 40, "unidad": "μg/mL", "nombre": "Fenobarbital (nivel sérico)" },
83
+ "ciclosporina": { "inferior": 100, "superior": 400, "unidad": "ng/mL", "nombre": "Ciclosporina (nivel sérico)" },
84
+ "ph_sangre": { "inferior": 7.35, "superior": 7.45, "unidad": "", "nombre": "pH sanguíneo" },
85
+ "pco2": { "inferior": 35, "superior": 45, "unidad": "mmHg", "nombre": "pCO₂" },
86
+ "po2": { "inferior": 85, "superior": 105, "unidad": "mmHg", "nombre": "pO₂ arterial" },
87
+ "hco3": { "inferior": 18, "superior": 24, "unidad": "mEq/L", "nombre": "HCO₃⁻" },
88
+ "exceso_base": { "inferior": -4, "superior": 4, "unidad": "mEq/L", "nombre": "Exceso de base (BE)" },
89
+ "so2": { "inferior": 95, "superior": 100, "unidad": "%", "nombre": "Saturación O₂ (SO₂)" },
90
+ "ca_ion": { "inferior": 1.12, "superior": 1.40, "unidad": "mmol/L", "nombre": "Calcio ionizado (iCa)" },
91
+ "lactato": { "inferior": 0.5, "superior": 2.5, "unidad": "mmol/L", "nombre": "Lactato" },
92
+ "anion_gap": { "inferior": 8, "superior": 16, "unidad": "mEq/L", "nombre": "Anión Gap" }
93
  },
94
  "felino": {
95
  "rbc": { "inferior": 5.0, "superior": 10.0, "unidad": "x10⁶/μL", "nombre": "Eritrocitos (RBC)" },
 
120
  "ast": { "inferior": 10, "superior": 50, "unidad": "U/L", "nombre": "AST (GOT)" },
121
  "fal": { "inferior": 10, "superior": 90, "unidad": "U/L", "nombre": "FAL (ALP)" },
122
  "ggt": { "inferior": 0, "superior": 4, "unidad": "U/L", "nombre": "GGT" },
123
+ "amylasa": { "inferior": 500, "superior": 1500, "unidad": "U/L", "nombre": "Amilasa (AMY)" },
124
+ "ldh": { "inferior": 50, "superior": 300, "unidad": "U/L", "nombre": "LDH" },
125
  "bili": { "inferior": 0, "superior": 0.4, "unidad": "mg/dL", "nombre": "Bilirrubina Total" },
126
  "bili_dir": { "inferior": 0, "superior": 0.1, "unidad": "mg/dL", "nombre": "Bilirrubina Directa" },
127
  "acidos_bil": { "inferior": 0, "superior": 5, "unidad": "μmol/L", "nombre": "Ácidos Biliares" },
 
134
  "glob": { "inferior": 2.6, "superior": 5.1, "unidad": "g/dL", "nombre": "Globulinas" },
135
  "fosf": { "inferior": 2.4, "superior": 8.2, "unidad": "mg/dL", "nombre": "Fósforo" },
136
  "calc": { "inferior": 8.0, "superior": 11.0, "unidad": "mg/dL", "nombre": "Calcio" },
137
+ "magnesio": { "inferior": 1.9, "superior": 2.7, "unidad": "mg/dL", "nombre": "Magnesio" },
138
+ "hierro": { "inferior": 60, "superior": 175, "unidad": "μg/dL", "nombre": "Hierro sérico (Fe)" },
139
+ "ac_urico": { "inferior": 0, "superior": 1.0, "unidad": "mg/dL", "nombre": "Ácido úrico (UA)" },
140
  "fruc": { "inferior": 225, "superior": 350, "unidad": "μmol/L", "nombre": "Fructosamina" },
141
  "sodio": { "inferior": 144, "superior": 160, "unidad": "mEq/L", "nombre": "Sodio" },
142
  "potasio": { "inferior": 3.7, "superior": 5.4, "unidad": "mEq/L", "nombre": "Potasio" },
 
145
  "colest": { "inferior": 75, "superior": 220, "unidad": "mg/dL", "nombre": "Colesterol" },
146
  "trigli": { "inferior": 25, "superior": 160, "unidad": "mg/dL", "nombre": "Triglicéridos" },
147
  "lipasa": { "inferior": 0, "superior": 200, "unidad": "U/L", "nombre": "Lipasa" },
148
+ "pli": { "inferior": 0, "superior": 3.5, "unidad": "μg/L", "nombre": "Lipasa pancreática (fPLI)" },
149
  "ck": { "inferior": 0, "superior": 314, "unidad": "U/L", "nombre": "Creatina Kinasa (CK)" },
150
  "usg": { "inferior": 1.013, "superior": 1.100, "unidad": "", "nombre": "Densidad (USG)" },
151
  "ph": { "inferior": 5.5, "superior": 7.5, "unidad": "", "nombre": "pH urinario" },
152
+ "rbc_uri": { "inferior": 0, "superior": 5, "unidad": "/μL", "nombre": "Eritrocitos orina" },
153
+ "wbc_uri": { "inferior": 0, "superior": 5, "unidad": "/μL", "nombre": "Leucocitos orina" },
154
+ "upc": { "inferior": 0, "superior": 0.4, "unidad": "", "nombre": "Cociente P/C (UPC)" },
155
+ "pt": { "inferior": 8.0, "superior": 13.0, "unidad": "s", "nombre": "Tiempo de protrombina (TP)" },
156
+ "aptt": { "inferior": 12.0, "superior": 18.0, "unidad": "s", "nombre": "TTPa (aPTT)" },
157
+ "act": { "inferior": 50, "superior": 75, "unidad": "s", "nombre": "ACT" },
158
+ "fibrinogeno": { "inferior": 100, "superior": 300, "unidad": "mg/dL", "nombre": "Fibrinógeno" },
159
+ "ddimeros": { "inferior": 0, "superior": 250, "unidad": "ng/mL", "nombre": "Dímeros D" },
160
+ "fdp": { "inferior": 0, "superior": 10, "unidad": "μg/mL", "nombre": "PDF (FDP)" },
161
+ "antitrombina": { "inferior": 75, "superior": 120, "unidad": "%", "nombre": "Antitrombina (AT-III)" },
162
+ "vwf": { "inferior": 70, "superior": 180, "unidad": "%", "nombre": "vWF (antígeno)" },
163
  "cortisol_bas": { "inferior": 0.5, "superior": 4.0, "unidad": "μg/dL", "nombre": "Cortisol basal" },
164
  "cortisol_acth":{ "inferior": 3.5, "superior": 12.0, "unidad": "μg/dL", "nombre": "Cortisol post-ACTH" },
165
  "t4_total": { "inferior": 19, "superior": 52, "unidad": "nmol/L", "nombre": "T4 total" },
166
+ "t4_libre": { "inferior": 10, "superior": 40, "unidad": "pmol/L", "nombre": "T4 libre (fT4)" },
167
+ "tsh": { "inferior": 0.01, "superior": 0.30, "unidad": "ng/mL", "nombre": "TSH" },
168
+ "insulina": { "inferior": 5, "superior": 25, "unidad": "μIU/mL", "nombre": "Insulina basal" },
169
+ "progesterona": { "inferior": 0.1, "superior": 1.0, "unidad": "ng/mL", "nombre": "Progesterona" },
170
+ "ctni": { "inferior": 0, "superior": 0.06, "unidad": "ng/mL", "nombre": "Troponina I cardíaca (cTnI)" },
171
+ "nt_probnp": { "inferior": 0, "superior": 100, "unidad": "pmol/L", "nombre": "NT-proBNP" },
172
+ "crp": { "inferior": 0, "superior": 10, "unidad": "mg/L", "nombre": "Proteína C reactiva (PCR)" },
173
+ "saa": { "inferior": 0, "superior": 10, "unidad": "mg/L", "nombre": "Amiloide A sérico (SAA)" },
174
+ "fenobarbital": { "inferior": 20, "superior": 40, "unidad": "μg/mL", "nombre": "Fenobarbital (nivel sérico)" },
175
+ "ciclosporina": { "inferior": 100, "superior": 400, "unidad": "ng/mL", "nombre": "Ciclosporina (nivel sérico)" },
176
+ "ph_sangre": { "inferior": 7.35, "superior": 7.46, "unidad": "", "nombre": "pH sanguíneo" },
177
+ "pco2": { "inferior": 28, "superior": 35, "unidad": "mmHg", "nombre": "pCO₂" },
178
+ "po2": { "inferior": 85, "superior": 100, "unidad": "mmHg", "nombre": "pO₂ arterial" },
179
+ "hco3": { "inferior": 16, "superior": 22, "unidad": "mEq/L", "nombre": "HCO₃⁻" },
180
+ "exceso_base": { "inferior": -4, "superior": 4, "unidad": "mEq/L", "nombre": "Exceso de base (BE)" },
181
+ "so2": { "inferior": 95, "superior": 100, "unidad": "%", "nombre": "Saturación O₂ (SO₂)" },
182
+ "ca_ion": { "inferior": 1.12, "superior": 1.40, "unidad": "mmol/L", "nombre": "Calcio ionizado (iCa)" },
183
+ "lactato": { "inferior": 0.3, "superior": 2.0, "unidad": "mmol/L", "nombre": "Lactato" },
184
+ "anion_gap": { "inferior": 10, "superior": 18, "unidad": "mEq/L", "nombre": "Anión Gap" }
185
  }
186
  }
index.html CHANGED
@@ -64,6 +64,8 @@
64
  <button class="tab-examenes" data-subtab-target="panel-bioquim" data-tooltip="Bioquímica sanguínea">Bioq.</button>
65
  <button class="tab-examenes" data-subtab-target="panel-uri" data-tooltip="Urianálisis">Uri.</button>
66
  <button class="tab-examenes" data-subtab-target="panel-endo" data-tooltip="Perfil endocrino">Endo.</button>
 
 
67
  </div>
68
 
69
  <!-- GRID -->
@@ -320,11 +322,46 @@
320
  <input id="endo-t4" name="t4_total" type="number" min="0" step="0.1" placeholder="—">
321
  <span class="unidad">nmol/L</span>
322
  </div>
 
 
 
 
 
 
 
 
 
 
323
  <div class="fila-campo">
324
  <label for="endo-ins">Insulina basal</label>
325
  <input id="endo-ins" name="insulina" type="number" min="0" step="0.1" placeholder="—">
326
  <span class="unidad">μIU/mL</span>
327
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
328
  </div></div>
329
  </section>
330
 
@@ -495,11 +532,60 @@
495
  <input id="bio-lipasa" name="lipasa" type="number" min="0" placeholder="—">
496
  <span class="unidad">U/L</span>
497
  </div>
 
 
 
 
 
498
  <div class="fila-campo">
499
  <label for="bio-ck">Creatina Kinasa (CK)</label>
500
  <input id="bio-ck" name="ck" type="number" min="0" placeholder="—">
501
  <span class="unidad">U/L</span>
502
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
503
  </div>
504
  </div></div>
505
  </section>
@@ -546,6 +632,7 @@
546
  <select id="uri-prot" name="uri-prot">
547
  <option value="">—</option>
548
  <option value="neg">Negativo</option>
 
549
  <option value="+">+</option>
550
  <option value="++">++</option>
551
  <option value="+++">+++</option>
@@ -563,6 +650,232 @@
563
  </select>
564
  <span class="unidad"></span>
565
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
566
  </div></div>
567
  </section>
568
 
@@ -852,7 +1165,7 @@
852
  </div>
853
  </div>
854
 
855
- <script type="module" src="js/main.js?v=2"></script>
856
 
857
  </body>
858
  </html>
 
64
  <button class="tab-examenes" data-subtab-target="panel-bioquim" data-tooltip="Bioquímica sanguínea">Bioq.</button>
65
  <button class="tab-examenes" data-subtab-target="panel-uri" data-tooltip="Urianálisis">Uri.</button>
66
  <button class="tab-examenes" data-subtab-target="panel-endo" data-tooltip="Perfil endocrino">Endo.</button>
67
+ <button class="tab-examenes" data-subtab-target="panel-coag" data-tooltip="Factores de coagulación">Coag.</button>
68
+ <button class="tab-examenes" data-subtab-target="panel-gas" data-tooltip="Gasometría (iStat)">Gas.</button>
69
  </div>
70
 
71
  <!-- GRID -->
 
322
  <input id="endo-t4" name="t4_total" type="number" min="0" step="0.1" placeholder="—">
323
  <span class="unidad">nmol/L</span>
324
  </div>
325
+ <div class="fila-campo">
326
+ <label for="endo-t4-libre">T4 libre (fT4)</label>
327
+ <input id="endo-t4-libre" name="t4_libre" type="number" min="0" step="0.1" placeholder="—">
328
+ <span class="unidad">pmol/L</span>
329
+ </div>
330
+ <div class="fila-campo">
331
+ <label for="endo-tsh">TSH</label>
332
+ <input id="endo-tsh" name="tsh" type="number" min="0" step="0.01" placeholder="—">
333
+ <span class="unidad">ng/mL</span>
334
+ </div>
335
  <div class="fila-campo">
336
  <label for="endo-ins">Insulina basal</label>
337
  <input id="endo-ins" name="insulina" type="number" min="0" step="0.1" placeholder="—">
338
  <span class="unidad">μIU/mL</span>
339
  </div>
340
+ <div class="fila-campo">
341
+ <label for="endo-prog">Progesterona</label>
342
+ <input id="endo-prog" name="progesterona" type="number" min="0" step="0.1" placeholder="—">
343
+ <span class="unidad">ng/mL</span>
344
+ </div>
345
+ <div class="fila-campo">
346
+ <label for="endo-ctni">Troponina I (cTnI)</label>
347
+ <input id="endo-ctni" name="ctni" type="number" min="0" step="0.001" placeholder="—">
348
+ <span class="unidad">ng/mL</span>
349
+ </div>
350
+ <div class="fila-campo">
351
+ <label for="endo-nt-probnp">NT-proBNP</label>
352
+ <input id="endo-nt-probnp" name="nt_probnp" type="number" min="0" placeholder="—">
353
+ <span class="unidad">pmol/L</span>
354
+ </div>
355
+ <div class="fila-campo">
356
+ <label for="endo-fenobarbital">Fenobarbital (sérico)</label>
357
+ <input id="endo-fenobarbital" name="fenobarbital" type="number" min="0" step="0.1" placeholder="—">
358
+ <span class="unidad">μg/mL</span>
359
+ </div>
360
+ <div class="fila-campo">
361
+ <label for="endo-ciclosporina">Ciclosporina (sérica)</label>
362
+ <input id="endo-ciclosporina" name="ciclosporina" type="number" min="0" placeholder="—">
363
+ <span class="unidad">ng/mL</span>
364
+ </div>
365
  </div></div>
366
  </section>
367
 
 
532
  <input id="bio-lipasa" name="lipasa" type="number" min="0" placeholder="—">
533
  <span class="unidad">U/L</span>
534
  </div>
535
+ <div class="fila-campo">
536
+ <label for="bio-amylasa">Amilasa (AMY)</label>
537
+ <input id="bio-amylasa" name="amylasa" type="number" min="0" placeholder="—">
538
+ <span class="unidad">U/L</span>
539
+ </div>
540
  <div class="fila-campo">
541
  <label for="bio-ck">Creatina Kinasa (CK)</label>
542
  <input id="bio-ck" name="ck" type="number" min="0" placeholder="—">
543
  <span class="unidad">U/L</span>
544
  </div>
545
+ <div class="fila-campo">
546
+ <label for="bio-ldh">LDH</label>
547
+ <input id="bio-ldh" name="ldh" type="number" min="0" placeholder="—">
548
+ <span class="unidad">U/L</span>
549
+ </div>
550
+ </div>
551
+ <div class="grupo-campo">
552
+ <h3 class="titulo-grupo">Páncreas exocrino</h3>
553
+ <div class="fila-campo">
554
+ <label for="bio-pli">cPLI / fPLI</label>
555
+ <input id="bio-pli" name="pli" type="number" min="0" step="0.1" placeholder="—">
556
+ <span class="unidad">μg/L</span>
557
+ </div>
558
+ </div>
559
+ <div class="grupo-campo">
560
+ <h3 class="titulo-grupo">Minerales</h3>
561
+ <div class="fila-campo">
562
+ <label for="bio-magnesio">Magnesio</label>
563
+ <input id="bio-magnesio" name="magnesio" type="number" min="0" step="0.1" placeholder="—">
564
+ <span class="unidad">mg/dL</span>
565
+ </div>
566
+ <div class="fila-campo">
567
+ <label for="bio-hierro">Hierro sérico (Fe)</label>
568
+ <input id="bio-hierro" name="hierro" type="number" min="0" placeholder="—">
569
+ <span class="unidad">μg/dL</span>
570
+ </div>
571
+ <div class="fila-campo">
572
+ <label for="bio-ac-urico">Ácido úrico (UA)</label>
573
+ <input id="bio-ac-urico" name="ac_urico" type="number" min="0" step="0.1" placeholder="—">
574
+ <span class="unidad">mg/dL</span>
575
+ </div>
576
+ </div>
577
+ <div class="grupo-campo">
578
+ <h3 class="titulo-grupo">Proteínas de Fase Aguda</h3>
579
+ <div class="fila-campo">
580
+ <label for="bio-crp">PCR (Proteína C Reactiva)</label>
581
+ <input id="bio-crp" name="crp" type="number" min="0" step="0.1" placeholder="—">
582
+ <span class="unidad">mg/L</span>
583
+ </div>
584
+ <div class="fila-campo">
585
+ <label for="bio-saa">Amiloide A sérico (SAA)</label>
586
+ <input id="bio-saa" name="saa" type="number" min="0" step="0.1" placeholder="—">
587
+ <span class="unidad">mg/L</span>
588
+ </div>
589
  </div>
590
  </div></div>
591
  </section>
 
632
  <select id="uri-prot" name="uri-prot">
633
  <option value="">—</option>
634
  <option value="neg">Negativo</option>
635
+ <option value="trazas">Trazas</option>
636
  <option value="+">+</option>
637
  <option value="++">++</option>
638
  <option value="+++">+++</option>
 
650
  </select>
651
  <span class="unidad"></span>
652
  </div>
653
+ <div class="fila-campo">
654
+ <label for="uri-cetonas">Cetonas</label>
655
+ <select id="uri-cetonas" name="uri-cetonas">
656
+ <option value="">—</option>
657
+ <option value="neg">Negativo</option>
658
+ <option value="trazas">Trazas</option>
659
+ <option value="+">+</option>
660
+ <option value="++">++</option>
661
+ <option value="+++">+++</option>
662
+ </select>
663
+ <span class="unidad"></span>
664
+ </div>
665
+ <div class="fila-campo">
666
+ <label for="uri-sangre">Sangre / Hb</label>
667
+ <select id="uri-sangre" name="uri-sangre">
668
+ <option value="">—</option>
669
+ <option value="neg">Negativo</option>
670
+ <option value="trazas">Trazas</option>
671
+ <option value="+">+</option>
672
+ <option value="++">++</option>
673
+ <option value="+++">+++</option>
674
+ </select>
675
+ <span class="unidad"></span>
676
+ </div>
677
+ <div class="fila-campo">
678
+ <label for="uri-bili">Bilirrubina</label>
679
+ <select id="uri-bili" name="uri-bili">
680
+ <option value="">—</option>
681
+ <option value="neg">Negativo</option>
682
+ <option value="+">+</option>
683
+ <option value="++">++</option>
684
+ <option value="+++">+++</option>
685
+ </select>
686
+ <span class="unidad"></span>
687
+ </div>
688
+ <div class="fila-campo">
689
+ <label for="uri-urobi">Urobilinógeno</label>
690
+ <select id="uri-urobi" name="uri-urobi">
691
+ <option value="">—</option>
692
+ <option value="normal">Normal</option>
693
+ <option value="+">+</option>
694
+ <option value="++">++</option>
695
+ <option value="+++">+++</option>
696
+ </select>
697
+ <span class="unidad"></span>
698
+ </div>
699
+ <div class="fila-campo">
700
+ <label for="uri-nitritos">Nitritos</label>
701
+ <select id="uri-nitritos" name="uri-nitritos">
702
+ <option value="">—</option>
703
+ <option value="neg">Negativo</option>
704
+ <option value="pos">Positivo</option>
705
+ </select>
706
+ <span class="unidad"></span>
707
+ </div>
708
+ <div class="fila-campo">
709
+ <label for="uri-leuco-est">Leucocitos (esterasa)</label>
710
+ <select id="uri-leuco-est" name="uri-leuco-est">
711
+ <option value="">—</option>
712
+ <option value="neg">Negativo</option>
713
+ <option value="+">+</option>
714
+ <option value="++">++</option>
715
+ <option value="+++">+++</option>
716
+ </select>
717
+ <span class="unidad"></span>
718
+ </div>
719
+ <div class="fila-campo">
720
+ <label for="uri-rbc">Eritrocitos (sedimento)</label>
721
+ <input id="uri-rbc" name="rbc_uri" type="number" min="0" placeholder="���">
722
+ <span class="unidad">/μL</span>
723
+ </div>
724
+ <div class="fila-campo">
725
+ <label for="uri-wbc">Leucocitos (sedimento)</label>
726
+ <input id="uri-wbc" name="wbc_uri" type="number" min="0" placeholder="—">
727
+ <span class="unidad">/μL</span>
728
+ </div>
729
+ <div class="fila-campo">
730
+ <label for="uri-upc">Cociente P/C (UPC)</label>
731
+ <input id="uri-upc" name="upc" type="number" min="0" step="0.01" placeholder="—">
732
+ <span class="unidad"></span>
733
+ </div>
734
+ </div></div>
735
+ </section>
736
+
737
+ <!-- FACTORES DE COAGULACIÓN -->
738
+ <section class="panel subpanel" id="panel-coag">
739
+ <h2 class="panel-titulo">Factores de Coagulación</h2>
740
+ <div class="panel-cabecera">
741
+ Factores de Coagulación
742
+ <input type="file" id="pdf-input-coag" class="pdf-input" accept=".pdf" hidden>
743
+ <button class="btn-limpiar-panel" type="button" data-panel="coag" aria-label="Limpiar campos Coagulación" data-tooltip="Limpiar formulario">
744
+ <svg viewBox="0 -960 960 960" aria-hidden="true"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg>
745
+ </button>
746
+ <button class="btn-importar-pdf" type="button" data-panel="coag" aria-label="Importar PDF Coagulación" data-tooltip="Adjuntar PDF">
747
+ <svg viewBox="0 -960 960 960" aria-hidden="true"><path d="M720-330q0 104-73 177T470-80q-104 0-177-73t-73-177v-370q0-75 52.5-127.5T400-880q75 0 127.5 52.5T580-700v350q0 46-32 78t-78 32q-46 0-78-32t-32-78v-370h80v370q0 13 8.5 21.5T470-320q13 0 21.5-8.5T500-350v-350q-1-42-29.5-71T400-800q-42 0-71 29t-29 71v370q-1 71 49 120.5T470-160q70 0 119-49.5T640-330v-390h80v390Z"/></svg>
748
+ </button>
749
+ <button class="btn-colapsar-subpanel" id="btn-colapsar-coag" type="button"
750
+ aria-expanded="true" aria-controls="cuerpo-coag" aria-label="Colapsar Coagulación" data-tooltip="Contraer / Expandir">
751
+ <svg class="icono-colapsar" viewBox="0 -960 960 960" aria-hidden="true"><path d="m296-224-56-56 240-240 240 240-56 56-184-183-184 183Zm0-240-56-56 240-240 240 240-56 56-184-183-184 183Z"/></svg><svg class="icono-expandir" viewBox="0 -960 960 960" aria-hidden="true"><path d="M480-200 240-440l56-56 184 183 184-183 56 56-240 240Zm0-240L240-680l56-56 184 183 184-183 56 56-240 240Z"/></svg>
752
+ </button>
753
+ </div>
754
+ <div class="subpanel-anim"><div class="subpanel-cuerpo" id="cuerpo-coag">
755
+ <div class="cabecera-columnas cabecera-columnas--mobile-only" aria-hidden="true">
756
+ <span></span>
757
+ <button class="btn-limpiar-panel" type="button" data-panel="coag" aria-label="Limpiar campos Coagulación" data-tooltip="Limpiar formulario">
758
+ <svg viewBox="0 -960 960 960" aria-hidden="true"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg>
759
+ </button>
760
+ <button class="btn-importar-pdf" type="button" data-panel="coag" aria-label="Importar PDF Coagulación" data-tooltip="Adjuntar PDF">
761
+ <svg viewBox="0 -960 960 960" aria-hidden="true"><path d="M720-330q0 104-73 177T470-80q-104 0-177-73t-73-177v-370q0-75 52.5-127.5T400-880q75 0 127.5 52.5T580-700v350q0 46-32 78t-78 32q-46 0-78-32t-32-78v-370h80v370q0 13 8.5 21.5T470-320q13 0 21.5-8.5T500-350v-350q-1-42-29.5-71T400-800q-42 0-71 29t-29 71v370q-1 71 49 120.5T470-160q70 0 119-49.5T640-330v-390h80v390Z"/></svg>
762
+ </button>
763
+ </div>
764
+ <div class="fila-campo">
765
+ <label for="coag-pt">TP / PT</label>
766
+ <input id="coag-pt" name="pt" type="number" min="0" step="0.1" placeholder="—">
767
+ <span class="unidad">s</span>
768
+ </div>
769
+ <div class="fila-campo">
770
+ <label for="coag-aptt">TTPa / aPTT</label>
771
+ <input id="coag-aptt" name="aptt" type="number" min="0" step="0.1" placeholder="—">
772
+ <span class="unidad">s</span>
773
+ </div>
774
+ <div class="fila-campo">
775
+ <label for="coag-act">ACT</label>
776
+ <input id="coag-act" name="act" type="number" min="0" placeholder="—">
777
+ <span class="unidad">s</span>
778
+ </div>
779
+ <div class="fila-campo">
780
+ <label for="coag-fibrinogeno">Fibrinógeno</label>
781
+ <input id="coag-fibrinogeno" name="fibrinogeno" type="number" min="0" placeholder="—">
782
+ <span class="unidad">mg/dL</span>
783
+ </div>
784
+ <div class="fila-campo">
785
+ <label for="coag-ddimeros">Dímeros D</label>
786
+ <input id="coag-ddimeros" name="ddimeros" type="number" min="0" placeholder="—">
787
+ <span class="unidad">ng/mL</span>
788
+ </div>
789
+ <div class="fila-campo">
790
+ <label for="coag-fdp">FDP / PDF</label>
791
+ <input id="coag-fdp" name="fdp" type="number" min="0" step="0.1" placeholder="—">
792
+ <span class="unidad">μg/mL</span>
793
+ </div>
794
+ <div class="fila-campo">
795
+ <label for="coag-antitrombina">Antitrombina (AT-III)</label>
796
+ <input id="coag-antitrombina" name="antitrombina" type="number" min="0" placeholder="—">
797
+ <span class="unidad">%</span>
798
+ </div>
799
+ <div class="fila-campo">
800
+ <label for="coag-vwf">vWF (antígeno)</label>
801
+ <input id="coag-vwf" name="vwf" type="number" min="0" placeholder="—">
802
+ <span class="unidad">%</span>
803
+ </div>
804
+ </div></div>
805
+ </section>
806
+
807
+ <!-- GASOMETRÍA -->
808
+ <section class="panel subpanel" id="panel-gas">
809
+ <h2 class="panel-titulo">Gasometría</h2>
810
+ <div class="panel-cabecera">
811
+ Gasometría
812
+ <input type="file" id="pdf-input-gas" class="pdf-input" accept=".pdf" hidden>
813
+ <button class="btn-limpiar-panel" type="button" data-panel="gas" aria-label="Limpiar campos Gasometría" data-tooltip="Limpiar formulario">
814
+ <svg viewBox="0 -960 960 960" aria-hidden="true"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg>
815
+ </button>
816
+ <button class="btn-importar-pdf" type="button" data-panel="gas" aria-label="Importar PDF Gasometría" data-tooltip="Adjuntar PDF">
817
+ <svg viewBox="0 -960 960 960" aria-hidden="true"><path d="M720-330q0 104-73 177T470-80q-104 0-177-73t-73-177v-370q0-75 52.5-127.5T400-880q75 0 127.5 52.5T580-700v350q0 46-32 78t-78 32q-46 0-78-32t-32-78v-370h80v370q0 13 8.5 21.5T470-320q13 0 21.5-8.5T500-350v-350q-1-42-29.5-71T400-800q-42 0-71 29t-29 71v370q-1 71 49 120.5T470-160q70 0 119-49.5T640-330v-390h80v390Z"/></svg>
818
+ </button>
819
+ <button class="btn-colapsar-subpanel" id="btn-colapsar-gas" type="button"
820
+ aria-expanded="true" aria-controls="cuerpo-gas" aria-label="Colapsar Gasometría" data-tooltip="Contraer / Expandir">
821
+ <svg class="icono-colapsar" viewBox="0 -960 960 960" aria-hidden="true"><path d="m296-224-56-56 240-240 240 240-56 56-184-183-184 183Zm0-240-56-56 240-240 240 240-56 56-184-183-184 183Z"/></svg><svg class="icono-expandir" viewBox="0 -960 960 960" aria-hidden="true"><path d="M480-200 240-440l56-56 184 183 184-183 56 56-240 240Zm0-240L240-680l56-56 184 183 184-183 56 56-240 240Z"/></svg>
822
+ </button>
823
+ </div>
824
+ <div class="subpanel-anim"><div class="subpanel-cuerpo" id="cuerpo-gas">
825
+ <div class="cabecera-columnas cabecera-columnas--mobile-only" aria-hidden="true">
826
+ <span></span>
827
+ <button class="btn-limpiar-panel" type="button" data-panel="gas" aria-label="Limpiar campos Gasometría" data-tooltip="Limpiar formulario">
828
+ <svg viewBox="0 -960 960 960" aria-hidden="true"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg>
829
+ </button>
830
+ <button class="btn-importar-pdf" type="button" data-panel="gas" aria-label="Importar PDF Gasometría" data-tooltip="Adjuntar PDF">
831
+ <svg viewBox="0 -960 960 960" aria-hidden="true"><path d="M720-330q0 104-73 177T470-80q-104 0-177-73t-73-177v-370q0-75 52.5-127.5T400-880q75 0 127.5 52.5T580-700v350q0 46-32 78t-78 32q-46 0-78-32t-32-78v-370h80v370q0 13 8.5 21.5T470-320q13 0 21.5-8.5T500-350v-350q-1-42-29.5-71T400-800q-42 0-71 29t-29 71v370q-1 71 49 120.5T470-160q70 0 119-49.5T640-330v-390h80v390Z"/></svg>
832
+ </button>
833
+ </div>
834
+ <div class="fila-campo">
835
+ <label for="gas-ph">pH (sangre)</label>
836
+ <input id="gas-ph" name="ph_sangre" type="number" min="6.5" max="8.0" step="0.001" placeholder="—">
837
+ <span class="unidad"></span>
838
+ </div>
839
+ <div class="fila-campo">
840
+ <label for="gas-pco2">pCO₂</label>
841
+ <input id="gas-pco2" name="pco2" type="number" min="0" step="0.1" placeholder="—">
842
+ <span class="unidad">mmHg</span>
843
+ </div>
844
+ <div class="fila-campo">
845
+ <label for="gas-po2">pO₂</label>
846
+ <input id="gas-po2" name="po2" type="number" min="0" step="0.1" placeholder="—">
847
+ <span class="unidad">mmHg</span>
848
+ </div>
849
+ <div class="fila-campo">
850
+ <label for="gas-hco3">HCO₃⁻</label>
851
+ <input id="gas-hco3" name="hco3" type="number" min="0" step="0.1" placeholder="—">
852
+ <span class="unidad">mEq/L</span>
853
+ </div>
854
+ <div class="fila-campo">
855
+ <label for="gas-be">Exceso de base (BE)</label>
856
+ <input id="gas-be" name="exceso_base" type="number" min="-30" max="30" step="0.1" placeholder="—">
857
+ <span class="unidad">mEq/L</span>
858
+ </div>
859
+ <div class="fila-campo">
860
+ <label for="gas-so2">Saturación O₂ (SO₂)</label>
861
+ <input id="gas-so2" name="so2" type="number" min="0" max="100" step="0.1" placeholder="—">
862
+ <span class="unidad">%</span>
863
+ </div>
864
+ <div class="fila-campo">
865
+ <label for="gas-ca-ion">Calcio ionizado (iCa)</label>
866
+ <input id="gas-ca-ion" name="ca_ion" type="number" min="0" step="0.01" placeholder="—">
867
+ <span class="unidad">mmol/L</span>
868
+ </div>
869
+ <div class="fila-campo">
870
+ <label for="gas-lactato">Lactato</label>
871
+ <input id="gas-lactato" name="lactato" type="number" min="0" step="0.1" placeholder="—">
872
+ <span class="unidad">mmol/L</span>
873
+ </div>
874
+ <div class="fila-campo">
875
+ <label for="gas-ag">Anión Gap</label>
876
+ <input id="gas-ag" name="anion_gap" type="number" min="0" step="0.1" placeholder="—">
877
+ <span class="unidad">mEq/L</span>
878
+ </div>
879
  </div></div>
880
  </section>
881
 
 
1165
  </div>
1166
  </div>
1167
 
1168
+ <script type="module" src="js/main.js?v=3"></script>
1169
 
1170
  </body>
1171
  </html>
js/analisis.js CHANGED
@@ -457,6 +457,329 @@ const detectarPatrones = (hallazgos, especie, alt) => {
457
  parametros: ['insulina', 'gluc'].filter(presente)
458
  });
459
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
460
  return patrones;
461
  };
462
 
 
457
  parametros: ['insulina', 'gluc'].filter(presente)
458
  });
459
 
460
+ // Páncreas exocrino (PLI)
461
+
462
+ if (esAlto('pli')) agregar({
463
+ nombre: alt.pancreatitis.nombre,
464
+ descripcion: alt.pancreatitis.descripcion[especie] ?? alt.pancreatitis.descripcion.canino,
465
+ gravedad: gravedadDe('pli'),
466
+ parametros: ['pli', ...(presente('lipasa') ? ['lipasa'] : []), ...(presente('amylasa') ? ['amylasa'] : [])].filter(presente)
467
+ });
468
+
469
+ if (esAlto('amylasa') && !presente('pli')) agregar({
470
+ nombre: alt.hiperamylasemia.nombre,
471
+ descripcion: alt.hiperamylasemia.descripcion,
472
+ gravedad: gravedadDe('amylasa'),
473
+ parametros: ['amylasa']
474
+ });
475
+
476
+ // Tiroides — TSH
477
+
478
+ if (esAlto('tsh')) agregar({
479
+ nombre: alt.tsh_elevado.nombre,
480
+ descripcion: alt.tsh_elevado.descripcion[especie] ?? alt.tsh_elevado.descripcion.canino,
481
+ gravedad: gravedadDe('tsh'),
482
+ parametros: ['tsh', ...(presente('t4_total') ? ['t4_total'] : []), ...(presente('t4_libre') ? ['t4_libre'] : [])].filter(presente)
483
+ });
484
+
485
+ if (esBajo('tsh')) agregar({
486
+ nombre: alt.tsh_suprimido.nombre,
487
+ descripcion: alt.tsh_suprimido.descripcion[especie] ?? alt.tsh_suprimido.descripcion.canino,
488
+ gravedad: gravedadDe('tsh'),
489
+ parametros: ['tsh', ...(presente('t4_total') ? ['t4_total'] : [])].filter(presente)
490
+ });
491
+
492
+ if (esBajo('t4_libre') && !presente('tsh')) agregar({
493
+ nombre: alt.t4_libre_baja.nombre,
494
+ descripcion: alt.t4_libre_baja.descripcion[especie] ?? alt.t4_libre_baja.descripcion.canino,
495
+ gravedad: gravedadDe('t4_libre'),
496
+ parametros: ['t4_libre', ...(presente('t4_total') ? ['t4_total'] : [])].filter(presente)
497
+ });
498
+
499
+ // Biomarcadores cardíacos
500
+
501
+ if (esAlto('ctni')) agregar({
502
+ nombre: alt.dano_miocardico.nombre,
503
+ descripcion: alt.dano_miocardico.descripcion,
504
+ gravedad: gravedadDe('ctni'),
505
+ parametros: ['ctni', ...(presente('nt_probnp') ? ['nt_probnp'] : [])].filter(presente)
506
+ });
507
+
508
+ if (esAlto('nt_probnp')) agregar({
509
+ nombre: alt.cardiopatia_bnp.nombre,
510
+ descripcion: alt.cardiopatia_bnp.descripcion[especie] ?? alt.cardiopatia_bnp.descripcion.canino,
511
+ gravedad: gravedadDe('nt_probnp'),
512
+ parametros: ['nt_probnp', ...(presente('ctni') ? ['ctni'] : [])].filter(presente)
513
+ });
514
+
515
+ // Proteínas de fase aguda
516
+
517
+ if (esAlto('crp') || esAlto('saa')) agregar({
518
+ nombre: alt.inflamacion_aguda.nombre,
519
+ descripcion: alt.inflamacion_aguda.descripcion[especie] ?? alt.inflamacion_aguda.descripcion.canino,
520
+ gravedad: gravedadDe('crp', 'saa'),
521
+ parametros: ['crp', 'saa'].filter(presente)
522
+ });
523
+
524
+ // Progesterona
525
+
526
+ if (esAlto('progesterona')) agregar({
527
+ nombre: alt.progesterona_elevada.nombre,
528
+ descripcion: alt.progesterona_elevada.descripcion[especie] ?? alt.progesterona_elevada.descripcion.canino,
529
+ gravedad: gravedadDe('progesterona'),
530
+ parametros: ['progesterona']
531
+ });
532
+
533
+ // Magnesio
534
+
535
+ if (esBajo('magnesio')) agregar({
536
+ nombre: alt.hipomagnesemia.nombre,
537
+ descripcion: alt.hipomagnesemia.descripcion,
538
+ gravedad: gravedadDe('magnesio'),
539
+ parametros: ['magnesio']
540
+ });
541
+
542
+ if (esAlto('magnesio')) agregar({
543
+ nombre: alt.hipermagnesemia.nombre,
544
+ descripcion: alt.hipermagnesemia.descripcion,
545
+ gravedad: gravedadDe('magnesio'),
546
+ parametros: ['magnesio']
547
+ });
548
+
549
+ // Hierro
550
+
551
+ if (esBajo('hierro')) agregar({
552
+ nombre: alt.ferropenia_hierro.nombre,
553
+ descripcion: alt.ferropenia_hierro.descripcion,
554
+ gravedad: gravedadDe('hierro'),
555
+ parametros: ['hierro']
556
+ });
557
+
558
+ // Ácido úrico
559
+
560
+ if (esAlto('ac_urico')) agregar({
561
+ nombre: alt.ac_urico_elevado.nombre,
562
+ descripcion: alt.ac_urico_elevado.descripcion,
563
+ gravedad: gravedadDe('ac_urico'),
564
+ parametros: ['ac_urico']
565
+ });
566
+
567
+ // LDH
568
+
569
+ if (esAlto('ldh')) agregar({
570
+ nombre: alt.ldh_elevada.nombre,
571
+ descripcion: alt.ldh_elevada.descripcion,
572
+ gravedad: gravedadDe('ldh'),
573
+ parametros: ['ldh']
574
+ });
575
+
576
+ // Monitorización de fármacos (TDM)
577
+
578
+ if (esBajo('fenobarbital')) agregar({
579
+ nombre: alt.fenobarbital_subterapeutico.nombre,
580
+ descripcion: alt.fenobarbital_subterapeutico.descripcion,
581
+ gravedad: gravedadDe('fenobarbital'),
582
+ parametros: ['fenobarbital']
583
+ });
584
+
585
+ if (esAlto('fenobarbital')) agregar({
586
+ nombre: alt.fenobarbital_toxico.nombre,
587
+ descripcion: alt.fenobarbital_toxico.descripcion,
588
+ gravedad: gravedadDe('fenobarbital'),
589
+ parametros: ['fenobarbital']
590
+ });
591
+
592
+ if (esBajo('ciclosporina')) agregar({
593
+ nombre: alt.ciclosporina_subterapeutica.nombre,
594
+ descripcion: alt.ciclosporina_subterapeutica.descripcion,
595
+ gravedad: gravedadDe('ciclosporina'),
596
+ parametros: ['ciclosporina']
597
+ });
598
+
599
+ if (esAlto('ciclosporina')) agregar({
600
+ nombre: alt.ciclosporina_toxica.nombre,
601
+ descripcion: alt.ciclosporina_toxica.descripcion,
602
+ gravedad: gravedadDe('ciclosporina'),
603
+ parametros: ['ciclosporina']
604
+ });
605
+
606
+ // Coagulación
607
+
608
+ if (esAlto('pt') && !esAlto('aptt')) agregar({
609
+ nombre: alt.coagulopatia_extrinseca.nombre,
610
+ descripcion: alt.coagulopatia_extrinseca.descripcion,
611
+ gravedad: gravedadDe('pt'),
612
+ parametros: ['pt']
613
+ });
614
+
615
+ if (esAlto('aptt') && !esAlto('pt')) agregar({
616
+ nombre: alt.coagulopatia_intrinseca.nombre,
617
+ descripcion: alt.coagulopatia_intrinseca.descripcion,
618
+ gravedad: gravedadDe('aptt'),
619
+ parametros: ['aptt']
620
+ });
621
+
622
+ if (esAlto('pt') && esAlto('aptt')) agregar({
623
+ nombre: alt.coagulopatia_mixta.nombre,
624
+ descripcion: alt.coagulopatia_mixta.descripcion,
625
+ gravedad: gravedadDe('pt', 'aptt', 'act'),
626
+ parametros: ['pt', 'aptt', ...(presente('act') ? ['act'] : [])].filter(presente)
627
+ });
628
+
629
+ if ((esAlto('ddimeros') || esAlto('fdp')) && esBajo('fibrinogeno')) agregar({
630
+ nombre: alt.cid.nombre,
631
+ descripcion: alt.cid.descripcion,
632
+ gravedad: 'grave',
633
+ parametros: ['ddimeros', 'fdp', 'fibrinogeno', 'plt'].filter(presente)
634
+ });
635
+
636
+ if (esAlto('fibrinogeno') && !esAlto('ddimeros') && !esAlto('fdp')) agregar({
637
+ nombre: alt.hiperfibrinogenemia.nombre,
638
+ descripcion: alt.hiperfibrinogenemia.descripcion,
639
+ gravedad: gravedadDe('fibrinogeno'),
640
+ parametros: ['fibrinogeno']
641
+ });
642
+
643
+ if (esBajo('fibrinogeno') && !esAlto('ddimeros') && !esAlto('fdp')) agregar({
644
+ nombre: alt.hipofibrinogenemia.nombre,
645
+ descripcion: alt.hipofibrinogenemia.descripcion,
646
+ gravedad: gravedadDe('fibrinogeno'),
647
+ parametros: ['fibrinogeno']
648
+ });
649
+
650
+ if (esBajo('vwf')) agregar({
651
+ nombre: alt.deficit_vwf.nombre,
652
+ descripcion: alt.deficit_vwf.descripcion,
653
+ gravedad: gravedadDe('vwf'),
654
+ parametros: ['vwf', ...(presente('aptt') ? ['aptt'] : [])].filter(presente)
655
+ });
656
+
657
+ if (esBajo('antitrombina')) agregar({
658
+ nombre: alt.antitrombina_baja.nombre,
659
+ descripcion: alt.antitrombina_baja.descripcion,
660
+ gravedad: gravedadDe('antitrombina'),
661
+ parametros: ['antitrombina']
662
+ });
663
+
664
+ // Urianálisis — sedimento / UPC
665
+
666
+ if (esAlto('rbc_uri')) agregar({
667
+ nombre: alt.hematuria_uri.nombre,
668
+ descripcion: alt.hematuria_uri.descripcion,
669
+ gravedad: gravedadDe('rbc_uri'),
670
+ parametros: ['rbc_uri']
671
+ });
672
+
673
+ if (esAlto('wbc_uri')) agregar({
674
+ nombre: alt.piuria.nombre,
675
+ descripcion: alt.piuria.descripcion,
676
+ gravedad: gravedadDe('wbc_uri'),
677
+ parametros: ['wbc_uri']
678
+ });
679
+
680
+ if (esAlto('upc')) agregar({
681
+ nombre: alt.proteinuria_upc.nombre,
682
+ descripcion: alt.proteinuria_upc.descripcion,
683
+ gravedad: gravedadDe('upc'),
684
+ parametros: ['upc']
685
+ });
686
+
687
+ // Gasometría — ácido-base
688
+
689
+ if (presente('ph_sangre')) {
690
+ const phBajo = esBajo('ph_sangre');
691
+ const phAlto = esAlto('ph_sangre');
692
+ const hipercarbia = esAlto('pco2');
693
+ const hipocarbia = esBajo('pco2');
694
+ const componenteAcidMet = esBajo('hco3') || esBajo('exceso_base');
695
+ const componenteAlcalMet = esAlto('hco3') || esAlto('exceso_base');
696
+
697
+ if (phBajo) {
698
+ if (hipercarbia && componenteAcidMet) {
699
+ agregar({
700
+ nombre: alt.acidosis_respiratoria.nombre + ' + ' + alt.acidosis_metabolica.nombre,
701
+ descripcion: alt.acidosis_metabolica.descripcion,
702
+ gravedad: 'grave',
703
+ parametros: ['ph_sangre', 'pco2', 'hco3', 'exceso_base'].filter(presente)
704
+ });
705
+ } else if (hipercarbia) {
706
+ agregar({
707
+ nombre: alt.acidosis_respiratoria.nombre,
708
+ descripcion: alt.acidosis_respiratoria.descripcion,
709
+ gravedad: gravedadDe('ph_sangre', 'pco2'),
710
+ parametros: ['ph_sangre', 'pco2'].filter(presente)
711
+ });
712
+ } else if (componenteAcidMet) {
713
+ agregar({
714
+ nombre: alt.acidosis_metabolica.nombre,
715
+ descripcion: alt.acidosis_metabolica.descripcion,
716
+ gravedad: gravedadDe('ph_sangre', 'hco3', 'exceso_base'),
717
+ parametros: ['ph_sangre', 'hco3', 'exceso_base', 'anion_gap'].filter(presente)
718
+ });
719
+ }
720
+ }
721
+
722
+ if (phAlto) {
723
+ if (hipocarbia && componenteAlcalMet) {
724
+ agregar({
725
+ nombre: alt.alcalosis_respiratoria.nombre + ' + ' + alt.alcalosis_metabolica.nombre,
726
+ descripcion: alt.alcalosis_metabolica.descripcion,
727
+ gravedad: 'grave',
728
+ parametros: ['ph_sangre', 'pco2', 'hco3', 'exceso_base'].filter(presente)
729
+ });
730
+ } else if (hipocarbia) {
731
+ agregar({
732
+ nombre: alt.alcalosis_respiratoria.nombre,
733
+ descripcion: alt.alcalosis_respiratoria.descripcion,
734
+ gravedad: gravedadDe('ph_sangre', 'pco2'),
735
+ parametros: ['ph_sangre', 'pco2'].filter(presente)
736
+ });
737
+ } else if (componenteAlcalMet) {
738
+ agregar({
739
+ nombre: alt.alcalosis_metabolica.nombre,
740
+ descripcion: alt.alcalosis_metabolica.descripcion,
741
+ gravedad: gravedadDe('ph_sangre', 'hco3', 'exceso_base'),
742
+ parametros: ['ph_sangre', 'hco3', 'exceso_base'].filter(presente)
743
+ });
744
+ }
745
+ }
746
+ }
747
+
748
+ if (esBajo('po2')) agregar({
749
+ nombre: alt.hipoxemia.nombre,
750
+ descripcion: alt.hipoxemia.descripcion,
751
+ gravedad: gravedadDe('po2', 'so2'),
752
+ parametros: ['po2', ...(presente('so2') ? ['so2'] : [])].filter(presente)
753
+ });
754
+
755
+ if (esAlto('lactato')) agregar({
756
+ nombre: alt.hiperlactatemia.nombre,
757
+ descripcion: alt.hiperlactatemia.descripcion,
758
+ gravedad: gravedadDe('lactato'),
759
+ parametros: ['lactato']
760
+ });
761
+
762
+ if (esBajo('ca_ion')) agregar({
763
+ nombre: alt.ca_ionizado_bajo.nombre,
764
+ descripcion: alt.ca_ionizado_bajo.descripcion,
765
+ gravedad: gravedadDe('ca_ion'),
766
+ parametros: ['ca_ion']
767
+ });
768
+
769
+ if (esAlto('ca_ion')) agregar({
770
+ nombre: alt.ca_ionizado_alto.nombre,
771
+ descripcion: alt.ca_ionizado_alto.descripcion,
772
+ gravedad: gravedadDe('ca_ion'),
773
+ parametros: ['ca_ion']
774
+ });
775
+
776
+ if (esAlto('anion_gap')) agregar({
777
+ nombre: alt.anion_gap_elevado.nombre,
778
+ descripcion: alt.anion_gap_elevado.descripcion,
779
+ gravedad: gravedadDe('anion_gap'),
780
+ parametros: ['anion_gap', ...(presente('lactato') ? ['lactato'] : [])].filter(presente)
781
+ });
782
+
783
  return patrones;
784
  };
785
 
js/main.js CHANGED
@@ -145,8 +145,9 @@ const evaluar = () => {
145
 
146
  document.addEventListener('input', e => {
147
  if (e.target.type !== 'number') return;
148
- // Impide valores negativos y limita a 4 digitos significativos para mantener la UI limpia
149
- if (e.target.value < 0) e.target.value = 0;
 
150
  if (e.target.value.replace('.', '').length > 4) e.target.value = e.target.value.slice(0, 4);
151
  e.target.classList.toggle('max-chars', e.target.value.replace('.', '').length >= 4);
152
  evaluar();
 
145
 
146
  document.addEventListener('input', e => {
147
  if (e.target.type !== 'number') return;
148
+ // Impide valores por debajo del mínimo del campo; permite negativos cuando min lo indica
149
+ const minPermitido = e.target.min !== '' ? parseFloat(e.target.min) : 0;
150
+ if (parseFloat(e.target.value) < minPermitido) e.target.value = minPermitido;
151
  if (e.target.value.replace('.', '').length > 4) e.target.value = e.target.value.slice(0, 4);
152
  e.target.classList.toggle('max-chars', e.target.value.replace('.', '').length >= 4);
153
  evaluar();
js/ui.js CHANGED
@@ -4,11 +4,11 @@ const tabs = document.querySelectorAll('.tab-nav');
4
  const paneles = document.querySelectorAll('main > .panel, .col3-wrapper > .panel');
5
  const examenesSubtabsBar = document.getElementById('examenes-subtabs-bar');
6
 
7
- const EXAMENES_SUBTAB_PANELS = new Set(['panel-hema', 'panel-bioquim', 'panel-uri', 'panel-endo']);
8
  let panelExamenActivo = 'panel-hema';
9
  let panelActivo = 'panel-flujo';
10
 
11
- const SWIPE_ORDER = ['panel-flujo', 'panel-paciente', 'panel-hema', 'panel-bioquim', 'panel-uri', 'panel-endo', 'panel-imagenes', 'panel-resultados'];
12
 
13
  export function activarTab(targetId) {
14
  const esSubpanelExamenes = EXAMENES_SUBTAB_PANELS.has(targetId);
@@ -122,7 +122,7 @@ const esGridEscritorio = () => window.innerWidth > 1100;
122
 
123
  function inicializarFilasGrid() {
124
  if (!esGridEscritorio()) return;
125
- mainEl.style.gridTemplateRows = '1fr auto auto';
126
 
127
  // Mide el panel de flujo expandido y colapsado para animar grid-template-rows con precision
128
  const alturaPanel = panelFlujo.getBoundingClientRect().height;
@@ -130,15 +130,15 @@ function inicializarFilasGrid() {
130
  if (alturaPanel > 0) filaExpandida = `${alturaPanel}px`;
131
  if (alturaEncabezado > 0) filaColapsada = `${alturaEncabezado}px`;
132
 
133
- mainEl.style.gridTemplateRows = `1fr auto ${filaExpandida || 'auto'}`;
134
  }
135
 
136
  function establecerFilasGrid(colapsado, animar) {
137
  if (!esGridEscritorio()) return;
138
  if (!animar) mainEl.style.transition = 'none';
139
  mainEl.style.gridTemplateRows = colapsado
140
- ? `1fr auto ${filaColapsada}`
141
- : `1fr auto ${filaExpandida}`;
142
  if (!animar) {
143
  mainEl.offsetHeight;
144
  mainEl.style.transition = '';
@@ -160,7 +160,7 @@ btnColapsar.addEventListener('click', () => {
160
  establecerFilasGrid(colapsado, true);
161
  localStorage.setItem('mx-flujo-collapsed', colapsado ? '1' : '0');
162
  if (!colapsado) {
163
- ['panel-endo', 'panel-uri'].forEach(id => {
164
  const sp = document.getElementById(id);
165
  if (sp) establecerSubpanelColapsado(sp, true);
166
  });
@@ -209,9 +209,10 @@ function establecerSubpanelColapsado(subpanel, debeColapsar) {
209
 
210
  const GRUPOS_VINCULADOS = [
211
  ['panel-endo', 'panel-uri'],
 
212
  ];
213
 
214
- const PANELES_COLAPSADOS_POR_DEFECTO = new Set(['panel-uri', 'panel-endo']);
215
 
216
  document.querySelectorAll('.btn-colapsar-subpanel').forEach(btn => {
217
  const subpanel = btn.closest('.subpanel');
 
4
  const paneles = document.querySelectorAll('main > .panel, .col3-wrapper > .panel');
5
  const examenesSubtabsBar = document.getElementById('examenes-subtabs-bar');
6
 
7
+ const EXAMENES_SUBTAB_PANELS = new Set(['panel-hema', 'panel-bioquim', 'panel-uri', 'panel-endo', 'panel-coag', 'panel-gas']);
8
  let panelExamenActivo = 'panel-hema';
9
  let panelActivo = 'panel-flujo';
10
 
11
+ const SWIPE_ORDER = ['panel-flujo', 'panel-paciente', 'panel-hema', 'panel-bioquim', 'panel-uri', 'panel-endo', 'panel-coag', 'panel-gas', 'panel-imagenes', 'panel-resultados'];
12
 
13
  export function activarTab(targetId) {
14
  const esSubpanelExamenes = EXAMENES_SUBTAB_PANELS.has(targetId);
 
122
 
123
  function inicializarFilasGrid() {
124
  if (!esGridEscritorio()) return;
125
+ mainEl.style.gridTemplateRows = '1fr auto auto auto';
126
 
127
  // Mide el panel de flujo expandido y colapsado para animar grid-template-rows con precision
128
  const alturaPanel = panelFlujo.getBoundingClientRect().height;
 
130
  if (alturaPanel > 0) filaExpandida = `${alturaPanel}px`;
131
  if (alturaEncabezado > 0) filaColapsada = `${alturaEncabezado}px`;
132
 
133
+ mainEl.style.gridTemplateRows = `1fr auto auto ${filaExpandida || 'auto'}`;
134
  }
135
 
136
  function establecerFilasGrid(colapsado, animar) {
137
  if (!esGridEscritorio()) return;
138
  if (!animar) mainEl.style.transition = 'none';
139
  mainEl.style.gridTemplateRows = colapsado
140
+ ? `1fr auto auto ${filaColapsada}`
141
+ : `1fr auto auto ${filaExpandida}`;
142
  if (!animar) {
143
  mainEl.offsetHeight;
144
  mainEl.style.transition = '';
 
160
  establecerFilasGrid(colapsado, true);
161
  localStorage.setItem('mx-flujo-collapsed', colapsado ? '1' : '0');
162
  if (!colapsado) {
163
+ ['panel-endo', 'panel-uri', 'panel-coag', 'panel-gas'].forEach(id => {
164
  const sp = document.getElementById(id);
165
  if (sp) establecerSubpanelColapsado(sp, true);
166
  });
 
209
 
210
  const GRUPOS_VINCULADOS = [
211
  ['panel-endo', 'panel-uri'],
212
+ ['panel-coag', 'panel-gas'],
213
  ];
214
 
215
+ const PANELES_COLAPSADOS_POR_DEFECTO = new Set(['panel-uri', 'panel-endo', 'panel-coag', 'panel-gas']);
216
 
217
  document.querySelectorAll('.btn-colapsar-subpanel').forEach(btn => {
218
  const subpanel = btn.closest('.subpanel');