Una biblioteca, un servicio web y un conjunto de herramientas para datos organizacionales de salud y atención del Reino Unido.
NHS Digital publican los datos de referencia de la Organización de Salud y Atención Social con DCB0090 estándar.
clods está diseñado para proporcionar servicios de "ubicación" a la granularidad de un sitio organizacional utilizando estos datos de referencia.
clods parte de un conjunto de servicios fundamentales y servicios de computación fundamentales que ayudan a responder preguntas sobre el 'OMS', 'qué', 'cuando', 'cómo' y 'por qué' de los datos de salud y atención.
Este software proporciona una biblioteca y un servicio web. Como biblioteca, se puede integrar fácilmente en una aplicación más grande. Como microservicio, se puede integrar fácilmente en un conjunto de servicios de plataforma fundamental. Proporciona una API de reposo simple y una API HL7 FHIR (R4).
Puede obtener información del profesional general para una cirugía de GP específica utilizando ODS-Weekly.
Otros módulos proporcionan más servicios de ubicación de grano finamente de grano (por ejemplo, BED) como parte de un servicio de ubicación de conserje unificado. La ubicación de la sala y el lecho y los datos de estado generalmente se proporcionan como parte de un sistema administrativo del paciente en lugar de servicios de datos de referencia, pero esto tiene como objetivo proporcionar una interfaz de programación de aplicaciones (API) perfecta para registrar adecuadamente el contexto de la captura de cualquier datos clínicos .
En esencia, el software proporciona una representación cercana de los datos de origen originales al tiempo que proporciona un conjunto más abstracto de sistemas que serán federables; Eso significa que el software de aplicación funciona a través de los límites internacionales con armonización de tiempo de ejecución y abstracciones en múltiples servicios de backend.
Los datos del sector público deben estar abiertos, publicados y autodescritos, con mecanismos para permitir la computabilidad. Eso significa que podemos escribir un software que se actualiza automáticamente contra los índices maestros de una variedad de datos importantes del sector público.
Cuando se ejecuta como una biblioteca o microservicio, la única dependencia es un sistema de archivos.
En los viejos tiempos, cuidamos los servidores individuales y les dimos nombres, análogos a cuidar a las mascotas. Serían de larga duración y administraríamos servicios en ellos. Tendría administradores iniciando sesión manualmente en la actualización en el lugar, actualizando la versión del software o actualizando los datos de respaldo.
Todavía puede usar este modelo para este y el otro software PatientCare , pero el enfoque más moderno es tratar su infraestructura informática y de datos como ganado. A diferencia de una mascota, generalmente no nombra a su ganado, y es posible que tenga una facturación significativa en ese ganado. Como tal, es completamente razonable girar nuevas versiones de este servicio con nuevos datos actualizados.
Como tal, este y los otros servicios PatientCare están diseñados para automatizar tantos pasos como sea posible.
Deberá instalar Clojure para la mejor experiencia, pero es posible ejecutarlo usando un frasco preconstruido. Consulte a continuación para obtener información sobre los archivos JAR.
Este servicio necesita un directorio en un sistema de archivos para operar.
Los datos organizacionales del NHS incluyen información sobre las organizaciones del NHS. Para habilitar los servicios geográficos, clods combinan estos datos con datos geográficos del NHS utilizando el 'directorio de código postal NHS'. Puede usar NHSPD como un servicio independiente, pero por conveniencia, clods incluyen esas herramientas.
En estos ejemplos, usaremos
Puede optar por usar un solo directorio y actualización en el lugar, o crear un nuevo repositorio a intervalos. Prefiero datos de respaldo inmutables de solo lectura e inmutables, así que favorezca este último.
También necesitamos especificar un caché temporal para los datos descargados.
Para estos ejemplos, usaremos
Es posible que ya tenga NHSPD en ejecución; Use el índice que use para eso.
Si no, obtengamos una configuración
$ clj -M:nhspd /var/local/nhspd-2020-11Después de unos minutos, el índice de directorio de código postal del NHS se habrá descargado e importado.
Necesitará una tecla API TRUD digital NHS.
Inicie sesión en el NHS Digital Trud y encuentre su clave API en su perfil. Escriba esa clave a un archivo y enlace a él desde la línea de comandos:
$ clj -M:install --nhspd /var/local/nhspd-2020-11 --api-key /path/to/api-key.txt --cache-dir /var/tmp/trud /var/local/ods-2021-02 clods procederá a descargar los últimos archivos de distribución de Trud, o usar la versión descargada existente en su caché local si está disponible, y crear un índice de organización.
Si bien podría integrar todo esto en una sola imagen de Docker para la implementación, podría ser mejor vincular a un sistema de archivos de solo lectura compartido y simplemente vincular los últimos datos de backend.
Para ejecutarse como un microservicio, debe incluir las rutas de un índice ODS y un índice NHSPD, así como el puerto para ejecutarse.
$ clj -M:serve /var/local/ods-2021-02 /var/local/nhspd-2020-11 8080Hay tres puntos finales:
Obtenemos datos de código postal NHS sobre un código postal:
$ curl -H " Accept: application/json " localhost:8080/ods/v1/postcode/CF144XWResultado:
{ "CANNET" : " N95 " , "PCDS" : " CF14 4XW " , "NHSER" : " W92 " , "SCN" : " N95 " , "PSED" : " 62UBFL16 " , "CTRY" : " W92000004 " , "OA01" : " W00009154 " , "HRO" : " W00 " , "OLDHA" : " QW2 " , "RGN" : " W99999999 " , "OSWARD" : " W05000864 " , "LSOA01" : " W01001770 " , "OSNRTH1M" : 179319 , "CANREG" : " Y1101 " , "OSHLTHAU" : " 7A4 " , "CALNCV" : " W99999999 " , "OSGRDIND" : " 1 " , "MSOA11" : " W02000384 " , "MSOA01" : " W02000384 " , "WARD98" : " 00PTMM " , "OLDHRO" : " W00 " , "CENED" : " TNFL16 " , "OLDPCT" : " 6A8 " , "USERTYPE" : " 0 " , "OSEAST1M" : 317551 , "PCT" : " 7A4 " , "PCD2" : " CF14 4XW " , "NHSRLO" : " W92 " , "OSNRTH100M" : 1793 , "DOTERM" : " " , "STP" : " W92 " , "OSLAUA" : " W06000015 " , "OSHAPREV" : " Q99 " , "EDIND" : " 1 " , "LSOA11" : " W01001770 " , "UR01IND" : " 5 " , "CCG" : " 7A4 " , "OSEAST100M" : 3175 , "DOINTR" : " 199906 " , "PCON" : " W07000051 " , "ODSLAUA" : " 052 " , "OA11" : " W00009154 " , "OSCTY" : " W99999999 " }Obtenemos datos ODS sobre una organización conocida:
$ curl -H " Accept: application/json " localhost:8080/ods/v1/organisation/7A4BVBusquemos una organización:
Búsqueda simple por nombre:
$ curl -H " Accept: application/json " ' localhost:8080/ods/v1/search?s=University%20Hospital%20Wales 'Busquemos cirugías GP dentro de 1000 m de un código postal específico.
$ curl -H " Accept: application/json " ' localhost:8080/ods/v1/search?roles=RO177&from-postcode=CF144XW&range=1000 'Resultado (aquí tuvo a través de JQ para darme los nombres):
$ curl -H "Accept: application/json" 'localhost:8080/ods/v1/search?roles=RO177&from-postcode=CF144XW&range=1000' | jq '.[] | .name'
"OUT OF HOURS SERVICE"
"WHITCHURCH ROAD SURGERY"
"CRWYS MEDICAL CENTRE"
"NORTH ROAD MEDICAL PRACTICE"
Los resultados se ordenarán por distancia.
Cada resultado se anota con latitud y longitud WGS84, para facilitar el procesamiento/trazado geográfico en adelante.
$ curl -H " Accept: application/json " ' localhost:8080/ods/v1/search?s=crwys&roles=RO177&from-postcode=CF144XW&range=1000 ' | jq
[
{
" orgId " : {
" root " : " 2.16.840.1.113883.2.1.3.2.4.18.48 " ,
" assigningAuthorityName " : " HSCIC " ,
" extension " : " W97041 "
},
" contacts " : [
{
" type " : " tel " ,
" value " : " 029 20524140 "
}
],
" name " : " CRWYS MEDICAL CENTRE " ,
" operational " : {
" start " : " 1974-04-01 " ,
" end " : null
},
" roles " : [
{
" id " : " RO72 " ,
" isPrimary " : false,
" active " : true,
" startDate " : " 2014-04-15 " ,
" endDate " : null
},
{
" id " : " RO177 " ,
" isPrimary " : true,
" active " : true,
" startDate " : " 1974-04-01 " ,
" endDate " : null
}
],
" orgRecordClass " : " RC1 " ,
" active " : true,
" primaryRole " : {
" id " : " RO177 " ,
" isPrimary " : true,
" active " : true,
" startDate " : " 1974-04-01 " ,
" endDate " : null
},
" relationships " : [
{
" id " : " RE4 " ,
" startDate " : " 1999-04-01 " ,
" endDate " : " 2003-03-31 " ,
" active " : false,
" target " : {
" root " : " 2.16.840.1.113883.2.1.3.2.4.18.48 " ,
" assigningAuthorityName " : " HSCIC " ,
" extension " : " 4WK03 "
}
},
{
" id " : " RE4 " ,
" startDate " : " 2009-10-01 " ,
" endDate " : null,
" active " : true,
" target " : {
" root " : " 2.16.840.1.113883.2.1.3.2.4.18.48 " ,
" assigningAuthorityName " : " HSCIC " ,
" extension " : " 7A4 "
}
},
{
" id " : " RE4 " ,
" startDate " : " 2003-04-01 " ,
" endDate " : " 2009-09-30 " ,
" active " : false,
" target " : {
" root " : " 2.16.840.1.113883.2.1.3.2.4.18.48 " ,
" assigningAuthorityName " : " HSCIC " ,
" extension " : " 6A8 "
}
}
],
" location " : {
" address1 " : " THE CRWYS SURGERY " ,
" address2 " : " WEDAL ROAD " ,
" town " : " CARDIFF " ,
" county " : " SOUTH GLAMORGAN " ,
" postcode " : " CF14 3QX " ,
" country " : " WALES " ,
" uprn " : " 10008905579 " ,
" latlon " : [
52.714814004647714,
-5.273869588498894
]
},
" isReference " : false
}
]$ clj -M:fhir-r4 /var/local/ods-2021-02 /var/local/nhspd-2020-11 8080Vamos a intentarlo:
$ curl -H " Accept: application/json " ' http://localhost:8080/fhir/Organization/2.16.840.1.113883.2.1.3.2.4.18.48|W93036 ' Resultado:
{
"resourceType" : " Organization " ,
"id" : " W93036 " ,
"identifier" : [
{
"use" : " official " ,
"system" : " https://fhir.nhs.uk/Id/ods-organization " ,
"value" : " W93036 "
},
{
"use" : " old " ,
"system" : " urn:oid:2.16.840.1.113883.2.1.3.2.4.18.48 " ,
"value" : " W93036 "
}
],
"active" : true ,
"type" : [
{
"coding" : [
{
"system" : " urn:oid:2.16.840.1.113883.2.1.3.2.4.17.507 " ,
"code" : " RO72 " ,
"display" : " OTHER PRESCRIBING COST CENTRE "
}
]
},
{
"coding" : [
{
"system" : " urn:oid:2.16.840.1.113883.2.1.3.2.4.17.507 " ,
"code" : " RO177 " ,
"display" : " PRESCRIBING COST CENTRE "
},
{
"system" : " http://hl7.org/fhir/ValueSet/organization-type " ,
"code" : " prov " ,
"display" : " Healthcare Provider "
}
]
}
],
"name" : " CASTLE GATE MEDICAL PRACTICE " ,
"telecom" : [
{
"system" : " phone " ,
"value" : " 01600 713811 "
}
],
"address" : [
{
"line" : [
" REAR OF MONNOW STREET "
],
"city" : " MONMOUTH " ,
"district" : " GWENT " ,
"postalCode" : " NP25 3EQ " ,
"country" : " WALES "
}
],
"partOf" : {
"type" : " Organization " ,
"identifier" : {
"use" : " official " ,
"system" : " https://fhir.nhs.uk/Id/ods-organization " ,
"value" : " 7A6 "
},
"display" : " ANEURIN BEVAN UNIVERSITY LHB "
}
}La API FHIR también admite la búsqueda por una variedad de parámetros.
Busquemos prácticas generales en Monmouth
$ curl -H " Accept: application/json " ' localhost:8080/fhir/Organization?address=monmouth&type=2.16.840.1.113883.2.1.3.2.4.17.507|RO177 'O buscar una cirugía de GP con nombre:
$ curl -H " Accept: application/json " ' localhost:8080/fhir/Organization?name=Whitchurch&address=Wales&type=2.16.840.1.113883.2.1.3.2.4.17.507|RO177 'Verifique las dependencias obsoletas:
$ clj -M:outdatedRealizar verificaciones de compilación (opcional)
$ clj -M:fhir-r4:serve:checkRealizar pelusas (opcionales)
$ clj -M:lint/kondo
$ clj -M:lint/eastwoodPara generar un frasco de biblioteca:
clj -T:build jarPara instalar un frasco de biblioteca en su repositorio maven local:
clj -T:build installPara implementar la biblioteca en Clojars:
clj -T:build deploySi lo prefiere, puede generar archivos JAR que se pueden ejecutar fácilmente en la línea de comando.
Construya un servidor Uberjar y ejecútelo. Esto proporciona una API REST simple.
$ clj -T:build http-server
$ java -jar target/clods-http-server-v1.0.152.jar /var/local/ods-2021-02 /var/local/nhspd-2020-11 8080Construya un servidor FHIR Uberjar y ejecútelo. Esto proporciona un servidor FHIR R4.
$ clj -T:build fhir-r4-server
$ java -jar target/clods-fhir-r4-server-1.0.152.jar /var/local/ods-2021-02 /var/local/nhspd-2020-11 8080Puede pasar estos archivos JAR independientes; No tienen dependencias.
Copyright © 2020-22 Eldrix Ltd y Mark Wardle