Se habla mucho ultimamente del nuevo programa informático que nos han implantado por la cara en Madrid. Es un programa lleno de errores de implementación de bulto. Errores que retrasan la consulta, quitan tiempo al médico para poder dedicarlo a lo importante (que es el paciente y no el ordenador) y lo peor de todo: pueden producir muertes.
El problema de un sistema informático es que en general pretende que la realidad se adapte a la estructura de datos del sistema y no al revés. Y luego pasa lo que pasa.
Uno de los errores más graves es que el sistema te obliga a la hora de emitir una receta a poner la dosis en un formato completamente rígido: "desayuno, comida, cena, al acostarse".
Sorprende que el analista informático no haya caido en que hay medicamentos que no se toman "en el desayuno", sino a lo mejor cada 3 horas. O medicamentos que no se toman todos los días igual, o que se toman una vez a la semana, etc, etc, etc.
En el software anterior (OMI-AP) el programa te daba la opción de poner una posología tipo "desayuno-comida-cena-al acostarse", pero era opcional (podías dejarlo en blanco y el sistema seguía emitiendo las recetas sin problemas). Aquella posología se utilizaba para emitir unas hojas de tratamiento para los pacientes analfabetos con unos dibujitos de "desayuno, comida, cena" muy útiles... siempre que fuese algo optativo.
En la nueva versión el sistema te obliga a meter una dosificación en ese formato. Si lo dejas en blanco como no te imprime la receta y si pones un cero tampoco. Te obliga a que el paciente se tome al menos una pastilla al día, en el desayuno, la comida, la cena o antes de acostarse.
Esto ocurre porque la empresa que ha desarrollado el software no ha hecho los deberes, y en realidad no ha habido analista informático alguno (nadie se ha reunido con los profesìonales). Simplemente se ha cogido el programa anterior, se han copiado los formularios y se ha reprogramado todo en un entorno web con base de datos centralizada... y de paso "arreglamos esos errores del programa anterior como que dejen emitir recetas con las dosis en blanco, que eso no puede ser lógico" (pensaría el programador de turno).
El problema es que ese "error informático" puede costar vidas. Por ejemplo en el caso del sintrom, medicamento que se usa para diluir la sangre. Las dosis de sintrom deben ajustarse a cada paciente y son variables según el día. A lo mejor el lunes y martes tienes que tomar tres cuartos, y el miercoles y jueves una pastilla entera.
Para emitir la receta sin embargo tienes que poner una dosis fija. Imaginemos que es un paciente anciano itinerante de esos que cada mes les cuida una persona distinta. O la cuidadora habitual cambia y llega una nueva. Como no está segura de qué dosis hay que darle al anciano decide mirar la receta y ve que pone "una en la cena"... así que siguiendo las instrucciones del médico le da una pastilla todos los días. Al poco tiempo el anciano aparece muerto con una hemorragia interna.
Es una probabilidad remota, pero es una probabilidad. Y las casualidades ocurren, sobre todo cuando se trata de errores informáticos en el campo de la medicina.
Si el programa AP-Madrid fuera de código abierto (como linux) cualquier médico con un poco de conocimientos de programación, se daría cuenta del error y podría subsanarlo rápidamente, sin tener que esperar a que el equipo de ingenieros se reuniese y pusiese ese error como prioridad (se ha notificado a los responsables desde hace semanas y sigue sin arreglarse).
AP-Madrid no es software libre (no vamos a pedirle a nuestros políticos que sepan ni siquiera de qué va el asunto), pero están tan cutremente programado que uno puede acceder a las funciones javascript viendo el código fuente de la página (son tan cutres que ni siquiera utilizan el siempre elegante
script type="text/javascript" src="external.js">).
Pues bien, aquí está la función javascript que puede provocar muertes (los comentarios son los del propio programador, la negrita es mía...):
function calcularDosis() {
var p1 = document.getElementById('prescripcion.posologiaToma1Txt').value;
var p2 = document.getElementById('prescripcion.posologiaToma2Txt').value;
var p3 = document.getElementById('prescripcion.posologiaToma3Txt').value;
var p4 = document.getElementById('prescripcion.posologiaToma4Txt').value;
//Los decimales los acepta con tipo float, pero las fracciones hay
que tratarlas
if (p1.indexOf("/") != -1) p1 = fraccionAFloat(p1);
if (p2.indexOf("/") != -1) p2 = fraccionAFloat(p2);
if (p3.indexOf("/") != -1) p3 = fraccionAFloat(p3);
if (p4.indexOf("/") != -1) p4 = fraccionAFloat(p4);
//Eliminamos los posibles espacios en blanco
p1 = p1.replace(" ","");
p2 = p2.replace(" ","");
p3 = p3.replace(" ","");
p4 = p4.replace(" ","");
//Si son vacios lo sustituimos por cero
if (p1 == "") p1 = "0";
if (p2 == "") p2 = "0";
if (p3 == "") p3 = "0";
if (p4 == "") p4 = "0";
var posologia = parseFloat(p1)+parseFloat(p2)+parseFloat(p3)+parseFloat(p4);
var horas = 24;
if ((document.getElementById('nomenclator.idNomenclator').value!=null) &&
('C'=='D') &&
(posologia!=0.0) && (horas!=0.0)) {
dosis = document.getElementById('prescripcion.dosis');
intervalo = document.getElementById('prescripcion.intervalo');
An = posologia * 24;
Ad = horas;
reducir();
dosis.value = An;
intervalo.value = Ad;
}
}
Pues bien, para arreglar el problema y evitar muertes bastaría con eliminar lo resaltado en negrita (y quizá tocar alguna parte del código donde pueda darse una division by zero).
No es difícil, se hace en 10 minutos; siempre por supuesto que arreglar ese problema esté en tu lista de tareas prioritarias.
¿A qué esperan los de la consejería?... más mascadito no se lo puedo dar.
No me imagino yo al viejo comiendo la sopa con la mano derecha y poniéndose las gotas de Timoftol o el Hemorrane con la izquierda... es que como era en la comida.
ResponderEliminar¿Cuánto ha costado el programa cutre?
ResponderEliminarDados los tiempos que corren, las administraciones sólo deberían utilizar software libre.
Fantástico Julio. Ha quedado muy claro. Y demostrado q si se quiere, se puede.
ResponderEliminarUna pregunta: hoy ha dicho el gerente que "no se puede volver a OMI porq una vez migrados los datos, no hay vuelta atrás"
Me cuesta mucho creerlo ¿que te parece?
> "no se puede volver a OMI porq una vez migrados los datos, no hay vuelta atrás"
ResponderEliminarO mienten los informáticos y el gerente es un ignorante o miente el gerente porque cree que nosotros somos unos ignorantes.
Por cierto la explicación del trozo de código es esta:
ResponderEliminar!= equivale a distinto que...
if ((document.getElementById('nomenclator.idNomenclator').value!=null) &&
('C'=='D') &&
(posologia!=0.0) && (horas!=0.0))
Imprimir la receta si se cumplen todas estas condiciones:
- se ha seleccionado un nombre de un fármaco (si su valor es distinto de "vacio" document.getElementById().value!=null)
- 'C' es igual a 'D' (debe ser alguna variable de control
- se ha escrito una posología y esta es distinta de cero (posologia!=0.0)
- horas es distinto a cero... siempre lo será pues un poco más arriba se dice que horas = 24 (horas!=0.0)
Es posible que si pones un número negativo en la posología te lo de por válido (-99999)... a ver si esta tarde lo pruebo.
También es posible que podamos evitar el problema usando alguna fracción menor a 0.1 ... algo del tipo 1/100... con lo que puede que salga 0.0 en la receta.
Desconozco qué ocurrirá si pones 1/0 en la posología. Las consecuencias de esta división podrían ser varias... desde que el ordenador se bloquee hasta que al gerente le de un ataque de alopecia. Habrá que probar también.
dr bonís, eres un listillo aficionado.
ResponderEliminarDr. Bonis, los de apiscam han clonado tu entrada en su blog y alli estan apareciendo una serie de comentarios que seguro te interesan
ResponderEliminarMira http://apiscam.blogspot.com/2010/03/alvando-vidas-gracias-al-software-libre.html
Julio, como sabes he hecho esos experimentos. Lo único que vale es 1/100 que sale en la receta como 0,01, que por lo menos evitará confusiones al paciente.
ResponderEliminarNo admite número negativos ni fracciones menores de 1/100. Si pones 1/0 sale "error en la prescripción, poner como mínimo 1 en la posología"
Al gerente de la 11 no le puede dar un ataque de alopecia. Al menos en la cabeza
Este aplicativo es SELENE-AP?
ResponderEliminar>Este aplicativo es SELENE-AP?
ResponderEliminarNo es el eChurro, también conocido como "Chotis" o Abundio (por aquel que se fue a vendimiar y se trajo uvas de postre).
Bonis no me has contestado, es Selene AP?
ResponderEliminarAPMadrid, mira los links.
ResponderEliminarClaro Miguel, la solución es el software libre, que, como todo el mundo sabe, es mucho mejor que el de pago y además se programa solo y sin errores.
ResponderEliminar> como todo el mundo sabe, es mucho mejor que el de pago y además se programa solo y sin errores.
ResponderEliminarQue sea libre no quiere decir que sea gratis. Es decir, también hay software libre "de pago". La cuestión no es de precio sino de libertad de acceso y redistribución del código fuente.
Cualquier inversión de dinero público en software (y sobre todo en desarrollo de nuevas aplicaciones) debería hacerse exclusivamente bajo licencias de software libre lo que aseguraría que todos los ciudadanos y todas las adminsitraciones tienen acceso al código (si se paga con dinero público debería tender a ser un bien público), evitando la existencia de monopolios y la dependencia de la administración pública de una empresa privada concreta.
Es gratificante conocer a un profesional de la medicina que se interesa por el amplio campo de la informática, yo estoy en el lado opuesto. Aunque igual que D. Ramon y Cajal soy defensor de la especilización, también profeso que la ignorancia completa de cualquier ciencia que nos rodea no puede ser buena.
ResponderEliminarIgnoro si es eso sólo el error o hay más. En principio esperaría que no sólo hicieran la validación en el lado del cliente por javascript, sino que también implimentaran esa condición en el servidor.
Cuánto dinero y cuántas horas de trabajo se ahorrarían si se dedicaran algunas a sentarse al lado del futuro usuario para ver cómo trabaja y sus dificultades.
Pero el problema real son los plazos, los márgenes de beneficio, etc: la subcontratación. Si por hacer un programa como empresa pido 1000 y la administración me fuerza a bajarlo hasta 500, no me quadará otra que pujar por 500 si necesito el proyecto. Ahora cuando quiera cambiar una sola coma que se prepare, que le voy a cobrar 3000.
Efectivamente eso no pasaría con software libre. Siempre se podría encontrar a alguien que hiciera ese cambio por menos dinero. Pero el problema sería el soporte. En una aplicación crítica como la vuestra hará falta un buen soporte. Y eso es caro porque normalmente sólo la empresa que ha programado el software te ofrecerá soporte a un precio razonable. Otras empresas te pedirán mucho más dinero por arreglar las cagadas de otro a quien le encargaste las modificaciones. Así que estaríamos en las mismas que con software privativo.
Un saludo.