Documente Academic
Documente Profesional
Documente Cultură
deInformacinenSalud
Ing.PabloPazosGutirrez<pablo.pazos@cabolabs.com>
Versin
Fecha
Autor
1.0
20151107
PabloPazos
1.1
20160807
PabloPazos
ndice
1.Introduccin
2.ProtocolosdeComunicacin
2.1.TCP
2.1.1.PaquetesTCP
2.1.2.SocketsTCP
2.1.3.Nmerosdepuertoconocidos
2.2.MLLP
2.2.1.Definicindebloques
2.3.HTTP
2.3.1.URL
2.3.2.MtodosHTTP
2.3.3.EstructuradepedidosyrespuestasHTTP
2.3.4.CdigosdeestadoHTTP
2.4.SOAP
2.4.1.TerminologaSOAP1.2
2.4.2.EstructurademensajesSOAP
2.4.3.EjemplosdemensajesSOAPsobreHTTP
3.FormatosdeMensajera
3.1.XML
3.1.1.ComentariossobreelformatoXML
3.2.JSON
3.2.1.ComentariossobreelformatoJSON
3.3.ER7
4.EstndaresXML
4.1.XPath
4.1.1.Especificadoresdeejes
4.1.2.Pruebadenodo
4.1.3.Predicados
4.2.XSD
4.2.1.EsquemaparadocumentosHL7CDA
4.2.1.1.DefinicindetipoparaelelementoClinicalDocument
4.2.1.2.DefinicindetipoparaelelementorecordTarget
4.2.2.ValidacindeXMLcontraXSD
5.HL7
5.1.HL7v2.x
5.1.1.FormatodemensajesHL7v2.x
5.1.2.Tiposdemensajes
5.1.3.Eventosdisparadores
5.1.3.1.Eventosparaadmisiones,altasytransferencias(ADT)
5.1.4.Tiposdesegmentos
5.1.5.Tiposdedatos
5.1.6.Definicionesdemensajes
5.1.7.HL7v2.5codificadocomoXML
5.2.HL7v3
5.2.1.ReferenceInformationModel(RIM)
5.2.2.ClinicalDocumentArchitecture(CDA)
5.2.2.1.EstructuradelCDAenXML
5.2.2.2.Paciente
5.2.2.3.Autordeldocumento(ej.mdicoresponsable)
5.2.2.4.Organizacinencargadadecustodiarlosdocumentos(ej.MinisteriodeSalud)
5.2.2.5.EjemplodeunaseccinNivel2dentrodelcuerpodelCDA
5.2.3.ValidandoCDA
6.ServiciosWeb
6.1.REST
6.1.1.MtodosHTTPyoperacionesREST
6.2.RESTvsSOAP
1.Introduccin
Estedocumentoesunaguaintroductoriaavarioselementosbsicosparalainteroperabilidadentresistemasde
informacinensalud,incluyendo:protocolosdecomunicacin,formatosdemensajes,yestndares.Elestudiode
estoselementospermitirlacomprensindeotrosconceptos,estndaresyguasmscomplejasquehacenuso
exhaustivodelosmismos.
2.ProtocolosdeComunicacin
Losprotocolosdecomunicacinsonlapiedraangulardelainteroperabilidad,yaquesinelloslainteroperabilidades
imposible.LosprotocolosdecomunicacintienendiferentescapassegnlaISOOSI1(OpenSystemsInterconnection
Model),sietecapasenelmodeloOSI.Estassietecapasfueronsimplificadasa5enlapiladeprotocolosTCP/IP
utilizadosenlaInternetyenlaWebcomoaplicacinsobrelaInternet.Enestedocumentonosconcentraremosenla
pilaTCP/IP,yenprotocolosdelascapasdeTransporteyAplicacin2.
Comparativademodelosdecapas
2.1.TCP
TransmisinControlProtocolesunprotocolodecomunicacinquepermitedefinircanalesdecomunicacin
bidireccionales(fullduplex)entreprocesoscorriendoendistintascomputadoras.ParaTCPlosdatosacomunicarson
vistoscomounflujodedatosdivididosenpaquetesdetamaofijo,aproximadamentede1500bytes.La
comunicacinmedianteunflujocontinuodedatosimplicaquesiseenvandosmensajesdesdeunprocesoaotro,el
procesoquerecibepuedenodistinguircundoterminaunmensajeycomienzaelotro(verMLLP).
TCPimplementatransporteconfiablededatos,esdecirqueserecibentodoslospaquetesenviadosenelorden
correcto.TCPseimplementasobreIP(InternetProtocol)queesunprotocolonoconfiable,esdecirquelospaquetes
puedenperderseollegarenelordenincorrecto.TCPeIPsonlosprotocolosquesirvencomobaseparalaWeb.
1
2
https://es.wikipedia.org/wiki/Modelo_OSI
https://en.wikipedia.org/wiki/Internet_protocol_suite
4
TCPimplementamecanismosdecontroldeflujo,quepermitenajustarlacantidaddedatosaenviarsegnla
capacidadderecepcin,esdecir,sielprocesoqueemitedatospuedeenviarmsdatosdelosqueelproceso
receptorpuederecibir,disminuyeelvolumendedatossegnlacapacidaddelreceptor.Deformaanloga,se
aumentaelvolumendedatosanteunamayorcapacidadderecepcin.
LoscanalesdecomunicacinTCPsonorientadosaconexin,esdecirqueprevioalenvodedatos,esnecesario
establecerunaconexinentredosprocesosdistribuidos,unoserelservidor(procesoqueescuchapasivamentepor
solicitudesdeconexin)ycliente(procesoquesolicitaactivamenteunaconexinalservidor).
EnelsiguienteRFCpuedeencontrarlaespecificacindelprotocoloaunquehatenidovariasmejorasyextensiones
tambindefinidasdesdeentonces(1981):https://www.ietf.org/rfc/rfc793.txt
2.1.1.PaquetesTCP
Lospaquetesestncompuestosdeuncabezalydeunconjuntodedatos.ElcabezalTCPtieneuntamaomnimode
20bytes.ElcabezalTCPincluyetodoslosdatosnecesariosparaproveertransporteconfiable:entregadetodoslos
paquetesyenelordencorrecto.
Delcabezalpodemosdestacarquecontienelosnmerosdepuertoorigenydestino(16bitscadauno)que
identificanalosprocesosqueseestncomunicando.Elnmerodesecuenciaseutilizaparaordenarlospaquetes
recibidos.Elnmerodeacknowledgementpermitesabersialgnpaqueteseperdienlacomunicacin,encuyo
casoTCPsolicitalaretransmisindelpaqueteperdido.Checksumseutilizaparadetectarposiblesdatoscorruptosen
lacomunicacin(porejemploqueunbit0cambiea1).
Comopuedenotar,lasdireccionesIPdelascomputadorasdondecorrenlosprocesosquesecomunicannoaparecen
enelcabezalTCP,sinoqueseencuentranenelcabezalIPqueseutilizaparacomunicarlospaquetesTCPentre
distintascomputadoras.
Figura1:PaqueteTCP
2.1.2.SocketsTCP
Lossocketssonconstruccionesabstractasquefuncionancomointerfacesentrelasaplicacionesylacapade
transporte.Losprocesoscorriendoencomputadorasdistintasutilizarnentoncessocketsparaconectarsee
intercambiardatos.UnsocketTCPesidentificadomediantelasdireccionesIPdelclienteyelservidor,ylosnmeros
depuertoasignadosalosprocesodelclienteydelservidor,porlotantodosconexionesentreloselmismoclientey
mismoservidordebernutilizarnmerosdepuertodistintosenunodelosextremos,engeneralenelcliente.
ParamanipularconexionesytransmitirdatosmediantesocketsTCPdesdelasaplicaciones,esnecesarioutilizarun
conjuntodeoperacionesbsicasdefinidassobrelossockets.Estasoperacionespuedenvariarsegnellenguajede
programacin.
Operacin
Descripcin
Socket
Creaunanuevainterfazdecomunicacin.
Bind
Asociaunnmerodepuertolocalalsocket.
Listen
Abreelsocketparaesperarporsolicitudesdeconexin,especificandoel
tamaodelacoladeconexin(nmerodeconexionessimultneas
soportadas).
Accept
Bloqueaelprocesoesperandoporsolicitudesdeconexin.
Connect
Envodeunasolicituddeconexin.
Send
Envadatossobrelaconexin.
Receive
Recibedatosdesdelaconexin.
Close
Cierralaconexin.
Acontinuacinsedescribeelordenhabitualdeinvocacindelasprimitivas,tantodelladodelservidorcomodellado
delcliente.
Elservidorcomienzaporcrearunnuevosocket,loasociaaunpuerto(bind)eindicaqueesesocketserutilizado
paraescucharporconexiones(listen).Luegoelservidoresperaporconexionesdesdeclientes(accept).Mientras
tanto,elclientecreaunsockety,especificandoIPypuertodelservidor,realizaunasolicituddeconexin(connect).
Elservidorqueestababloqueadoporelacceptcreaunnuevosocketdondeatenderlaconexinconesecliente
particular,yvuelveaescucharporconexionesenelsocketoriginal,esdecirqueelprocesoservidorsebloqueade
nuevo,mientrasenunprocesoparalelosemanejalaconexinconelcliente.Deestemodoelservidorquedalisto
pararecibirunanuevasolicituddeconexindeotrocliente,mientrasmanejalacomunicacinconlosclientesquese
encuentranconectados.Unavezquehayclientesconectados,tantoelprocesoservidorcomoelprocesocliente
puedenenviar(send)yrecibir(receive)datosutilizandoelcanalTCP.Encualquiermomento,tantoclientecomo
servidorpuedencerrarlaconexin(close).
Figura2:PrimitivasdesocketsTCP
Comosepudoapreciar,elservidorpuedeatenderconexionesdedistintosclientesenparalelo,paraestonecesita
quetantoelprocesoqueescuchaporconexiones(procesoquesebloquea)ylosprocesosquemanejanlas
comunicacionescondistintosclientescorranenparalelo.Aestossubprocesosselesllamanhilos(threadsen
ingls),ylaposibilidaddecorrermltipleshilosenparaleloselellamamultithreading.
2.1.3.Nmerosdepuertoconocidos
Existenalgunosnmerosdepuertofijosparaprotocolosoaplicacionesbienconocidas,engeneralsontodos
menoresa1024,porlotanto,paranotenerconflictodepuertoslasaplicacionesquenoutilicenestosprotocolos
debenutilizarnmerosdepuertomayoresa1024.Inclusoenalgunossistemasoperativosnoestpermitidala
creacindepuertosconnmeromenora1024.Acontinuacinsemuestraunalistareducidadenmerosdepuertos
conocidos:
7:ECHO
20:FTP(puertodedatos)
21:FTP(puertodecontrol)
22:SSH
23:TELNET
25:SMTP
53:DNS
80:HTTP
104:DICOM
110:POP3
143:IMAP
443:HTTPS(HTTPsobreSSL/TLS)
445:ActiveDirectory
2.2.MLLP
MinimalLowerLayerProtocol3 esunprotocolomuysimpleimplementadosobreTCP.ElobjetivodeMLLPesagregar
marcadoresdeprincipioyfindelosmensajesqueseenvansobreTCP,paraqueelreceptorsepacundoterminaun
mensajeycomienzaelsiguiente,tareaquedebeimplementarseenlasaplicacionesquerecibenmensajesusando
soloTCP.MLLPesutilizadoparaimplementarlacomunicacindemensajeraHL7v2.x,aunquenoeselnico
protocolosobreelquepuedenenviarsemensajesHL7.
2.2.1.Definicindebloques
MLLPdefinebloquesdedatosdelimitadosenunflujodedatosTCP.ElbloquedebecomenzarconunbytellamadoSB
(startblock)convalor0x0B(ASCII11).LuegodeSBseenvanlosdatosdelmensaje.Paramarcarelfindelbloquese
utilizandosbytes,elprimeroesEB(endblock)convalor0x1C(ASCII28)yluegoCR(carriagereturn)convalor0x0D
(ASCII13).
Endefinitiva,unpaqueteMLLPtendrlaforma:<SB>data<EB><CR>
Debeconsiderarsequelosdatosdebenenviarseconunacodificacinorientadaabytes,dadoqueloscaracteres
delimitadoressonbytes.PorlotantonoesposibleusarMLLPconcodificacionescomoUTF16(2bytesporcarcter).
ConsiderandolosejemplosdeclienteyservidorTCPdelaseccinprevia,agregandoloscaracteresdelimitadores
podrimplementarsuspropiosclientesyservidoresMLLP.
2.3.HTTP
HyperTextTransferProtocolesunprotocolodecapadeaplicacinenlapiladeprotocolosdeInternet.HTTPutiliza
TCPcomoprotocolodetransporte,porlotantoHTTPesunprotocoloconfiable.HTTPfuncionaenbasealenvoy
recepcindemensajesquetienenunformatoestndar.Lasaplicacionesclienteenvanpedidos(request),ypara
cadapedidoelservidorenvaunarespuesta(response).UnpedidoorespuestaHTTPpodratransportarseenmsde
unpaqueteTCP.
LaWeb(apcopedeWorldWideWeb)estimplementadasobreHTTP,raznporlacualalosservidoresHTTPseles
llamaservidoresWeb.LaWebeslaaplicacinmsutilizadaparaintercambioderecursossobreInternet.Un
servidorWebpuedeatenderpedidosdemltiplesclientesdeformasimultnea,loscualessolicitanrecursos
mediantepedidos.LosrecursossesolicitanmedianteunaURL(LocalizadorUniversaldeRecursos).
HTTPestespecificadoen:http://www.w3.org/Protocols/rfc2616/rfc2616.html
http://www.hl7.org/documentcenter/public_temp_5E7494961C23BA170CCB6FA1750CF529/wg/inm/mllp_transport_specification.P
DF
8
2.3.1.URL
LasURLssoncadenasdecaracteresquesiguenelestndarRFC1738.LasURLsseutilizanparalocalizarrecursosque
sernsolicitadosaunservidorWebmedianteunpedidoHTTP,yelservidorWebdevolverelrecursosolicitadoen
unarespuestaHTTP.
FormatodeURL:esquema://dominio:puerto/ruta?query_string#fragment_id
Esquema
Paraaccederarecursosenlawebseutilizahttpohttpsenelcasodecomunicacinsegura.Tambinseutiliza
mailtocuandoelrecursoesunadireccindecorreo(ejemplo:mailto:pablo@openehr.org.es).
Dominio
NombredeldominiodondeestelservidorWeb,porejemploopenehr.org.es.
Puerto
EselnmerodepuertodondeelservidorWebesperallamadas,siseomiteenlaURL,setomaelpuerto80.
Ruta
Essimilaraunarutadedirectoriosparalocalizarunarchivo,porejemplodir1/dir2/dir3.
QueryString
PermiteespecificarunconjuntodeparmetrosenlaURL,porejemplonombre=pablo&curso=openehr.
FragmentID
Esunnombrequepermiteidentificarunaporcinofragmentodelrecursosolicitado.Porejemplo,sielrecursoes
unapginaHTMLconunfragmentollamadoseccion2,alusaresenombreenlaURL,elnavegadorwebmostrar
directamenteesaseccinenlugardemostrareliniciodelapgina
2.3.2.MtodosHTTP
LospedidosHTTPdebenespecificarunmtodo,elcualindicalaaccinarealizarsobreelrecursoidentificadorporla
URLenviadaenelmismopedido.Acontinuacinsecomentanlomtodosmsutilizados:
GET
EstemtodoseutilizaparasolicitarinformacindelrecursoidentificadorconlaURL.
HEAD
EstemtodoesidnticoaGETperoelservidornodevuelveelrecursosolicitado.Seutilizapararealizarpruebasde
conexinoparasolicitarinformacinsobreelrecursosintenerquecomunicarelmismo.
POST
Estemtodoseutilizaparaenviardatosalservidor,porejemploparaagregarinformacinaunrecursoexistente,
paraagregarunrecursoaunabasededatos,parapublicarunmensajeenunforoolistadecorreos,entreotrosusos.
PUT
Estemtodoseutilizaparaenviardatosdeunrecurso,loscualesdebensermodificadosenelrecursoresidenteenel
servidor.SielrecursoenesaURLnoexisteenelservidor,elservidorpuedecrearelrecurso.
DELETE
Estemtodoesutilizadoparasolicitarlaeliminacindeunrecursoenelservidor.
2.3.3.EstructuradepedidosyrespuestasHTTP
HTTPdefineelformatodelosmensajesdepedido4yrespuesta5 .Ambostienenunconjuntodecabezalesyun
cuerpo.Loscabezalesseespecificanporsunombre,cadaunotieneunsignificadobiendefinido(verRFC
2616sec5.3),yporcadanombrehayunvalor.Elcuerpodelosmensajesseutilizaparatransportardatos,por
ejemploenunpedidoqueenvaunarchivoalservidor,elcontenidodelarchivoesubicadoenelcuerpodelmensaje
depedido.Enelcasodesolicitarunrecurso,elcontenidodelrecursoesubicadoenelcuerpodelmensajede
respuesta.
EjemplodepedidoHTTPsincabezales:
GEThttp://www.google.comHTTP/1.1
Comosepuedeapreciarenelejemplo,primeroseindicaelmtodoHTTPautilizar,luegoelrecursoqueseest
pidiendo,puedeindicarsecomounaURLabsolutaorelativa,yporltimolaversindeHTTPutilizada.
ElmismoejemploutilizandoelcabezalHostyunaURLrelativa:
GET/HTTP/1.1
Host:www.google.com
4
5
http://www.w3.org/Protocols/rfc2616/rfc2616sec5.html#sec5
http://www.w3.org/Protocols/rfc2616/rfc2616sec6.html#sec6
10
TodosloscabezalessedebenespecificarconelformatoNombreCabezal:Valor6 .
Sedebenotarquecadalneaenelpedidodebeterminaren<CR><LF>loqueeslomismoque\r\nenunlenguaje
deprogramacincomoJavaoGroovy.Paramarcarlaterminacindelpedidoyparasepararentrecabezalesycuerpo
seutiliza<CR><LF><CR><LF>.Entonceselejemploanteriorsera:
GET/HTTP/1.1<CR><LF>
Host:www.google.com<CR><LF>
<CR><LF>
ProbaresteejemploenTELNET(http://es.wikipedia.org/wiki/Telnet):
Nota:porcada<CR><LF>presionarlateclaenter.
telnetgoogle.com80<CR><LF>
GET/HTTP/1.1<CR><LF>
Host:www.google.com<CR><LF>
<CR><LF>
Podrverunarespuestadelservidorsimilaraesta:
HTTP/1.1302Found
Location:http://www.google.com.uy
CacheControl:private
ContentType:text/html;charset=UTF8
Date:Sun,26Jan201422:02:20GMT
Server:gws
ContentLength:262
XXSSProtection:1;mode=block
XFrameOptions:SAMEORIGIN
<HTML><HEAD><metahttpequiv="contenttype"content="text/html;charset=utf8">
<TITLE>302Moved</TITLE></HEAD><BODY>
<H1>302Moved</H1>
Thedocumenthasmoved<AHREF="http://www.google.com.uy/">here</A>.
</BODY></HTML>
LaprimeralneadelarespuestaespecificalaversindeHTTPutilizada,uncdigodeestadoyelnombreasociadoal
cdigo.Enlasiguienteseccinsedescribirndistintoscdigosdeestado.Luegohayunalistadecabezalesde
respuesta,porejemploContentTypeindicaqueenelcuerpodelarespuestaseesperandatosdetipotext/html,o
seaunapginaWeb.Larespuestapuedecontenercualquiertipoderecurso,tantounapginawebcomounaimagen
ounarchivoPDF.Acontinuacinselistanalgunostiposcomunes:
text/plain
Larespuestacontienedatosentextoplano(sinestructura).
text/html
LarespuestacontienedatosHTML(unapginaWeb).
text/xml
LarespuestacontienedatosestructuradosenformatoXML(verseccin6.2)
6
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
11
application/xml
Similaralaanterior,peroespreferidapornotenerproblemasconlacodificacin.7
image/jpeg
LarespuestacontienedatosbinariosdeunaimagencodificadaenJPEG.
image/jp2
LarespuestacontienedatosbinariosdeunaimagencodificadaenJPEG2000.
application/pdf
LarespuestacontienedatosbinariosdeundocumentoPDF.
application/json
LarespuestacontienedatosestructuradosenformatoJSON(verseccin6.1).
IANA(InternetAssignedNumbersAuthority)eslaorganizacinquemantieneyasignaestosidentificadorespara
distintostiposdemedios.EnsusitioWebpuedeencontrarseunalistacompletadetipos:
http://www.iana.org/assignments/mediatypes/mediatypes.xhtml
ElcabezalContentLengthindicalacantidaddecaracteres(bytes)contenidosenelcuerpodelarespuestaHTTP.
Luegodelltimocabezal,dndeaparecelatiradecaracteres<CR><LF><CR><LF>,seencuentraelcdigoHTML
devueltoporelservidor.
AlgunoscomentariossobreTELNET.EsteprogramafuncionatantoconnombresdedominiocomocondireccionesIP.
Cuandoseespecificaunnombrededominiocomoenelcasodetelnetgoogle.com80,internamenteserealizauna
bsquedaDNS,quebsicamentebuscaladireccinIPcorrespondientealdominio 8.ExistenherramientasWebque
permitenhacerbsquedasDNSfcilmente,como:
http://mxtoolbox.com/SuperTool.aspx?action=a%3agoogle.com&run=toolpage.
Notarqueseutilizelpuerto80queeselpuertopordefectoutilizadoporservidoresHTTP.
2.3.4.CdigosdeestadoHTTP
LoscdigosdeestadoseutilizanenlasrespuestasHTTPparadarlealclienteinformacinsobreelpedidoquefue
realizadoylarespuestaaesepedidoenviadadesdeelservidor.
Loscdigosdeestadoseclasificanencincograndesgrupos:
1xx:Cdigosdeinformacin
2xx:Cdigosdexito
3xx:Cdigosderedireccindepedidos
4xx:Cdigosdeerrorenelcliente
5xx:Cdigosdeerrorenelservidor
7
8
http://www.grauw.nl/blog/entry/489
http://es.wikipedia.org/wiki/Domain_Name_System
12
Loscdigosderedireccinseutilizanparaindicarqueunciertorecursofuemovido(suURLcambi)yelservidor
devuelvelaURLdondeelclientepuedeencontrarelrecurso.Entoncesserealizaunnuevopedido,encuyocaso
deberarecibiruncdigo2xx.
Acontinuacinselistanalgunosdecdigosmscomunes:
200OK:respuestaanteunasolicitudcorrecta.
301MovedPermanently:esteytodoslospedidosfuturosdebenserredirigidosaunaURLdadayaque,enla
URLsolicitada,elrecursoyanoexiste.
302Found:elpedidodebeserredirigidoaunaURLdada.
304Notmodified:elrecursosolicitadonofuemodificadoenelservidordesdeelltimopedido,permite
obtenerlodelcachlocal.
400BadRequest:nosepuederesolverelpedidoporquecontieneerroresdesintaxis.
403Forbidden:accesonoautorizadoaunrecurso.
500InternalServerError:ocurrialgnerrorenelservidoralintentarresolverelpedido.
503ServiceUnavailable:elservidornoseencuentradisponible(ej.pormantenimiento).
Aqu9puedeencontrarunalistacompletadecdigosdeestadoHTTP.
2.4.SOAP
SimpleObjectAccessProtocolpermiteelintercambiodeinformacinestructuradautilizandoelformatoXMLyel
protocoloHTTPparaeltransporte.SibienHTTPessolounodelosprotocolosquepuedenusarseparaSOAP,esel
msusado.SOAPnodefinelasemnticadelainformacinaserintercambiada,selimitaadefinirlasreglasde
codificacinydecodificacindeobjetosyestructurasdedatosparasercomunicadasentresistemasheterogneosy
distribuidos.Ademsdefinetiposdedatosparalasestructurasasercomunicadas.Inicialmente,SOAPsurgicomo
unaevolucindelprotocoloXMLRPChttp://xmlrpc.scripting.com/spec.html
SOAPserecomiendacuandosenecesitatrabajarconobjetosqueresidenensistemasremotoscomosifueran
objetoslocales.Noserecomiendacuandosenecesitaintercambiarbloquesdetextoomensajesconunformato
definidoporotroprotocolodecomunicacinyeseformatonoesXML,comoelcasodelosmensajesHL7v2.x.
EsimportantedestacarqueaniveldelastecnologasutilizadasenlasaplicacionesquesecomunicanmedianteSOAP,
esfrecuenteencontrargeneradoresdecdigoquetrabajanenfuncindelasdefinicionesdelosserviciosSOAP.
EstasdefinicionesestnexpresadasenWSDL10 (WebServiceDefinitionLanguage).Elcdigogeneradopermitealas
aplicacionescomunicarseabstrayendolacapadecomunicacindelacapadeaplicacin,porloqueelclienteSOAP
trabajacontraobjetosque"viven"dentrodelaaplicacin,peroesosobjetossonobtenidosdeserviciosremotos
(servidoresSOAP).Herramientascomowsdl2java 11delframeworkApacheCXFpermitenhaceresto.
TampocohayqueconfundirelprotocoloSOAPconlaArquitecturaOrientadaaServicios(SOA).SOAestcompuesta
deunaseriedeprincipiosybuenasprcticasparalaimplementacindesistemasdistribuidos,dondeSOAPessolo
unodelosposiblesprotocolosquepuedenusarseparaimplementarunaSOA.Otraposibilidadesutilizarlos
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
http://www.w3.org/TR/wsdl
11
http://cxf.apache.org/docs/wsdltojava.html
9
10
13
principiosREST12 13 14 paracrearserviciossobreHTTPutilizandoJSONoXMLcomocodificacinderecursos
(mensajes).
Recursostiles:
EjemplosdeserviciosSOAPonlineparaprobarclientes:http://www.servicerepository.com
ExplicacindeWebServicesSOAPenJava:https://www.youtube.com/watch?v=mKjvKPlb1rA
2.4.1.TerminologaSOAP1.2
EnestaseccinsepresentanalgunosdelostrminosutilizadosparadescribirloscomponentesdeSOAP15 .
SOAPBinding
ConjuntodereglasqueespecificancmocomunicarmensajesSOAPdentrode,osobreotro,protocolo.VerSOAP
ProtocolBindingFramework16 .
SOAPNode
EsunaunidadlgicadeprocesamientodemensajesSOAPquepuedetransmitir,recibir,procesaryretransmitir
mensajes.
SOAPMessage
ElmensajeeslaunidadbsicadecomunicacinentrenodosSOAP.Puedeserunainvocacinaunservicioouna
respuestaaunainvocacin.Siocurriunerror,elbodydelarespuestacontendrunelementoSOAPFault.
SOAPPart
ElconceptodeparteseagregaenlaextensindeSOAPparasoportardatosadjuntos.UnmensajeSOAPtieneuna
parteprincipalquecontieneelsobre(envelope)yceroomspartessecundariasdondeubicardatosadjuntos.Estos
datospuedennosercodificadosenXML,porloquepuedenincluirsedatosbinariosyenotrascodificacionesno
compatiblesconlacodificacindedatosXMLenelbodydelenvelope17 .
SOAPEnvelope
ElsobreeselelementodeinformacinmsexternoenunmensajeSOAPqueapareceenelXMLdelmensaje.
SOAPHeader
ColeccindeceroomsbloquesdecabezalSOAP,cadaunodeloscualespuedeestardestinadoaunreceptorenel
caminodelmensajeSOAP18 .
SOAPHeaderBlock
Elementodeinformacinutilizadoparadelimitarlosdatosqueconstituyenlgicamenteunanicaunidad
computacionalenelcabezalSOAP.EltipodelSOAPHeaderBlockesdefinidoporelnombreexpandidodelXMLdel
SOAPHeaderBlock19
https://www.servage.net/blog/2013/04/08/restprinciplesexplained/
https://github.com/WhiteHouse/apistandards
14
https://www.nsa.gov/ia/_files/support/guidelines_implementation_rest.pdf
15
http://www.w3.org/TR/2003/RECsoap12part120030624/
16
http://www.w3.org/TR/soap12part1/#transpbindframew
17
http://www.w3.org/TR/soap12af/
18
http://www.w3schools.com/soap/soap_envelope.asp
19
http://www.w3schools.com/soap/soap_header.asp
12
13
14
SOAPBody
ColeccindeceroomselementosdeinformacindestinadosparaelreceptorfinalenelcaminodelmensajeSOAP20
.
SOAPFault
ElementodeinformacinSOAPquecontieneinformacindeerroresgeneradosporunnodoSOAP21 .
SOAPSender
NodoquetransmiteunmensajeSOAP.
SOAPReceiver
NodoqueaceptaunmensajeSOAP.
SOAPMessagePath
ConjuntodenodosSOAPporlosquehapasadounnicomensajeSOAP.Elusomscomneslacomunicacinentre
dosnodos.LosnodosintermediossonalavezReceiverySender.
20
21
http://www.w3.org/TR/soap12part1/#soapbody
http://www.w3schools.com/soap/soap_fault.asp
15
2.4.2.EstructurademensajesSOAP
ElsiguientediagramamuestratodosloscomponentesdeunmensajeSOAP.Enelcasodeenvodemensajessin
adjuntos,elreceptordelmensajesolovercontenidoXMLcorrespondientealSOAPEnvelope.Enlasiguienteseccin
semuestranejemplosdemensajesdeinvocacinyrespuestadeserviciosSOAP.
Figura3:estructurademensajesSOAP
PuedetomarcomoreferencialaimplementacindeSOAPMessageenJava22 ,dondeverquecadapartedelmensaje
sepuedeobtenermediantemtodoscmo:
SOAPPartsp=message.getSOAPPart();
SOAPEnvelopese=sp.getEnvelope();
SOAPBodysb=se.getBody();
SOAPHeadersh=se.getHeader();
22
http://docs.oracle.com/javase/7/docs/api/javax/xml/soap/SOAPMessage.html
16
2.4.3.EjemplosdemensajesSOAPsobreHTTP
SibienlosmensajesSOAPpuedensertransportadosendistintosprotocolosdecomunicacin,elprotocoloms
utilizadoparaestefinesHTTP.SiutilizamosalgunaherramientaparavisualizarlasinvocacionesyrespuestasSOAP,
comoWireshark23 oSoapUI24 ,aniveldeHTTPveremosmensajesquesiguenlassiguientesestructuras.
InvocacindelservicioGetLastTradePriceconunparmetrosymbol=DIS
POST/StockQuoteHTTP/1.1
Host:www.stockquoteserver.com
ContentType:text/xml;charset="utf8"
ContentLength:nnnn
SOAPAction:"SomeURI"
<SOAPENV:Envelope
xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAPENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAPENV:Body>
<m:GetLastTradePricexmlns:m="SomeURI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAPENV:Body>
</SOAPENV:Envelope>
RespuestadelservicioconunavariablePrice=34.5
HTTP/1.1200OK
ContentType:text/xml;charset="utf8"
ContentLength:nnnn
<SOAPENV:Envelope
xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAPENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAPENV:Body>
<m:GetLastTradePriceResponsexmlns:m="SomeURI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAPENV:Body>
</SOAPENV:Envelope>
Msejemplos:
http://en.wikipedia.org/wiki/SOAP
http://es.wikipedia.org/wiki/Simple_Object_Access_Protocol
LaprimeracaractersticaquepodemosnotardeestosmensajesesqueelmtodoHTTPutilizadoenelpedidoes
POSTyquelosdatosdelpedidovanenelcuerpodelmensajeHTTP.LosegundoesqueelContentTypedelpedidoes
"text/xml",debidoaquelosdatosestnenformatoXML.EstevaloresutilizadoporSOAP1.1,peroenSOAP1.2se
utilizaelvalor"application/soap+xml".
OtroelementoanotaresqueSOAP1.1defineuncabezalnuevoparaHTTP:SOAPAction25 ,queesutilizadopara
indicarlaintencindelpedidoSOAPHTTPmedianteunaURI.EstaURIpuedeserresuelta(serunaURL)ono,ySOAP
https://www.wireshark.org/
http://www.soapui.org/
25
http://static.userland.com/xmlRpcCom/soap/SOAPv11.htm#_Toc478383528
23
24
17
noestableceningunareglasobresuformato.UnclienteHTTPdebeutilizarestecabezalcuandoenvapedidosSOAP
HTTP.EnSOAP1.2elvalordelSOAPActionesincluidoenelcabezalContentType26 .Laocurrenciadelcabezal
SOAPActionenelpedidoHTTPpuedeutilizarseparaqueloscomponentesdeunareddiferencienentretrficoHTTP
puroySOAPHTTP.Suvalorpuedeservaco,endondeseentiendequelaintencindelpedidoestdadaporlaURL
delpedidoHTTP.
CmodistinguirentremensajesSOAP1.1.ySOAP1.2?
ElprimerfactoresqueelcabezalHTTPSOAPActionesexclusivodeSOAP1.1.Porotroladolosesquemaspara1.1y
para1.2sondistintos.SOAP1.1utiliza"http://schemas.xmlsoap.org/soap/envelope/",mientrasqueSOAP1.2utiliza
"http://www.w3.org/2001/12/soapenvelope".
26
http://www.xml.com/pub/a/ws/2003/06/10/salz.html
18
3.FormatosdeMensajera
Enestaseccinveremosdistintosformatosutilizadoscomnmenteparaintercambiarinformacinclnicay
administrativaentresistemasdeinformacinensalud.
3.1.XML
EXtensibleMarkupLanguage27 esunasintaxisbasadaenetiquetasquerepresentanelementos,loscualespueden
teneratributos.XMLesunestndardelW3C28 .ElobjetivodeXMLespoderserlegibleporhumanosperotambin
procesableporprograma.ComparadoconJSONesmscomplejodeleerporhumanosporcontenermsinformacin
pararepresentarlosmismosdatos,peroambosformatossonigualmenteprocesablesporprograma.
CualquierestructuradedatospuedeserrepresentadaenXML.Comoyasemencion,elprotocoloSOAPutilizaXML
pararepresentarobjetosestructurados.Todosloslenguajesdeprogramacinmodernosofrecensoporteparael
procesamientodeXML.
ApartedeSOAP,existenotrosestndaresqueutilizanXMLcomoformatopararepresentardatos,comoRSS,Atomy
XHTML.TambinlasversionesmodernasdelosformatosdeMSOfficeutilizanXML,porejemplodocumentosDOCX
ouhojasdeclculoXSLX.
3.1.1.ComentariossobreelformatoXML
AcontinuacinsemuestraunejemplodecmopodracodificarseelregistrodeunapersonautilizandoXML:
<person>
<firstname>Pablo</firstname>
<lastname>Pazos</lastname>
<age>32</age>
<isAnEHealthNerd>true</isAnEHealthNerd>
<likes>
<item>medicalinformatics</item>
<item>oldmusic</item>
<item>thrillermovies</item>
</likes>
</person>
Unaalternativeutilizandoatributosdeelementos:
<person>
<namesfirstname="Pablo"lastname="Pazos"/>
<age>32</age>
<isAnEHealthNerd>true</isAnEHealthNerd>
<likes>
<item>medicalinformatics</item>
<item>oldmusic</item>
<item>thrillermovies</item>
</likes>
</person>
27
28
http://www.w3.org/XML/
http://www.w3.org/
19
AlgunasreglasgeneralesdeXML:
Lasetiquetasrepresentanunelementoporsunombre.
SiempredebehaberunaetiquetarazqueenglobetodoeldocumentoXML,enestecasoperson.
Todaslasetiquetasdebenabrirse<a>ycerrarse</a>.Cuandolaetiquetanotieneunvalordetexto,se
puedeespecificarcomo<a/>
Todaslasetiquetastienenunnombre,yparacerrarunaetiquetadebeusarseelmismonombrequepara
abrirla.
Nosepuedenintercalaraperturasycerraduras,ej.<a><b></a></b>esinvlido.
Loselementosdeunalistatambindebenestardentrodeetiquetas,enestecasoparalikes,cada
elementoestmarcadoenitem.
Losatributosdeloselementosdebendeclararsedentrodelaaperturadelaetiqueta.
Losvaloresdelosatributosdebenestarsiempreentrecomillas.
ExistenmltiplesherramientasparavalidardocumentosXML,porejemplo:http://www.xmlvalidation.com/
3.2.JSON
JavaScriptObjectNotation29 esunformatolivianodeintercambiodedatosestructuradosentresistemas.Estbasado
enunsubconjuntodelasintaxisdellenguajedeprogramacinJavascript,porloqueunobjetoJSONesunobjeto
Javascriptvlido.JSONesmuyutilizadoenaplicacionesWebyaqueJavascriptesimplementadoportodoslos
navegadoresWebmodernos,inclusoendispositivosmviles.Porestemotivo,JSONesunagranherramientaparala
comunicacinentrenavegadoresyservidoresWeb,sinnecesidaddeinstalaragregadosoextensionesalnavegador
niutilizarotrastecnologascomoFlashoAppletsJava.
JSONesunformatofcilmentelegibleporhumanos,ysusintaxispuedeserprocesadaporcualquierlenguajede
programacinmoderno.
Frenteaalternativaspararepresentardatosestructurados,comoXML,tienelasventajasantesmencionadas:ms
livianoymsfcildeleerporhumanos.
Ensusitiooficialesposibleaccederalaespecificacindelasintaxisyencontrardecenasdeherramientasque
implementanJSONendistintastecnologas.
3.2.1.ComentariossobreelformatoJSON
AcontinuacinsemuestraunejemplodecmosepodrarepresentarunapersonautilizandoJSON:
{
"firstname":"Pablo",
"lastname":"Pazos",
"age":32,
"isAnEHealthNerd":true,
"likes":[
"medicalinformatics",
"oldmusic",
"thrillermovies"
]
29
http://www.json.org/
20
ParavalidarlasestructurasJSONseutilizalaherramientaJSONLint30 ,construidaporelcreadordeJSON,Douglas
Crockford.Existenmltiplesherramientasonline31 tantoparaeditarJSONcomoparavalidarsuestructura.
3.3.ER7
EncodingRulesparaHL7esunaseriedereglasdecodificacinbasadaenelformatoEDI(ElectronicData
Interchange),dondeserepresentaunmensajecomounconjuntodesegmentosycamposdefinidosmediante
delimitadores.
ER7definelossegmentosseparndolosmedianteunsaltodelnea<CR>(ASCII0x0D).Cadasegmentotieneun
identificadorcodificadoentrescaracteres,yestcompuestodevarioscamposseparadosporeldelimitadorde
segmento,pordefectoesunabarravertical|.Cadacampopuedetenervarioscomponentes,queengeneralse
separanutilizandoelcarcter^comodelimitador.Laestructurainternadecadacampodependerdeltipodedato
asociadoalmismo.
EjemplodemensajeHL7v2.5paraadmitiraunpaciente:
MSH|^~\&|SRC_APP|SRC_CNTR|TARGET_APP|TARGET_CNTR|201401271408||ADT^A04^ADT_A01|123456|T|2.5|
PID|||PATID||PAZOS^PABLO||19811024|M|||1234MIGUELBARREIRO^^Montevideo^Montevideo^11300^UY||(598)1234567|
PV1|||BOX1^^^DEPTO.EMERGENCIA^^^EDIFICIOCENTRAL||||123^HOUSE^GREGORY|
Enlaseccin5.1.1severelformatodemensajesHL7v2.x.
HL7tambindefinereglasdecodificacindemensajesenXML 32.SibienXMLpuedepresentaralgunasventajascomo
legibilidadyfacilidaddeprocesamiento,tambinpresentaungranaumentoeneltamaototaldelosmensajes33 .
http://jsonlint.com/
http://jsonviewer.stack.hu/
32
http://www.hl7.org/implement/standards/product_brief.cfm?product_id=275
33
https://msdn.microsoft.com/enus/library/ee409267.aspx
30
31
21
4.EstndaresXML
4.1.XPath
XPath,ellenguajederutasdeXML,esunlenguajedeconsultaselcual,utilizandolaestructurajerrquicadeXML,
permiteseleccionarnodosdeundocumentoXML.Unarutaconsisteenunasecuenciadepasos,ycadapasotiene
trescomponentes:
eje:especificalarelacinentrelosrbolesdelosnodosseleccionadosporelpasoyelnododecontexto.
pruebadenodo:especificaeltipodenodoyelnombreexpandidodelosnodosseleccionadosporelpaso.
predicado:ceroomspredicadospuedenserpartedeunpaso,sonexpresionesquepermitenrefinarla
seleccindenodosdelpaso.
Ejemplodepaso:eje::prueba[predicado/s]
EnunaXPathelprimer"/"representaalnodoraz,mientrasque"/"subsecuentesrepresentanlosseparadoresde
pasos.Debetenerencuentaquecadapasopuederetornarunasecuenciadenodosovaloresatmicos,perono
ambos.
4.1.1.Especificadoresdeejes
LasespecificacionesdeejesindicanelsentidodelrecorridodelrbolrepresentadoporelXML.Losejesdisponibles
son:
Sintaxiscompleta Sintaxisabreviada
Comentarios
ancestor
Devuelvelosnodosancestrosdelnodoactual.
ancestororself
Devuelvelosancestrosdelnodoactualyelnodoactual.
attribute
child
Devuelvelosatributosdelnodoactual.
@attrabreviaattribute::attr
Ejemplo:todoslosatributosdeltypeIddeunCDA
/a:ClinicalDocument/a:typeId/@*
Ejemplo:todoslosatributosdelosnodoshijoderecordTargetenun
CDA:
/a:ClinicalDocument/a:recordTarget//*/@*
Devuelvelosnodoshijosdelnodoactual.
nombre_del_nodo
nombre_del_nodoabreviachild::nombre_del_nodo
22
Ejemplo:seleccionatodoslosnodoshijosdirectosdelnodopadre
"ClinicalDocument"
/a:ClinicalDocument/*
descendant
descendantorself
//
http://www.quackit.com/xml/tutorial/xpath_axis.cfm
Ejemplo:seleccionatodoslosdescendientesde"ClinicalDocument"
/a:ClinicalDocument/descendant::*
Ejemplo:seleccionatodoslosnodosdescendientesde"recordTarget"
dentrodeunCDA
/a:ClinicalDocument/a:recordTarget//*
following
Nodosqueaparecenluegodelnodoactual.
followingsibling
Nodoshermanosqueaparecenluegodelnodoactual.
namespace
Espaciodenombresdelnodoactual.
..
..abreviaparent::node()
Ejemplo:seleccionael"recordTarget"enunCDA,yendohaciasu
subnodo"patientRole"yseleccionandosuparent
/a:ClinicalDocument/a:recordTarget/a:patientRole/..
Nodosqueaparecenantesdelnodoactual.
Ejemplo:seleccionatodoslosnodosqueaparecenantesdelnodo
"patientRole"enunCDA
/a:ClinicalDocument/a:recordTarget/a:patientRole/preceding::*
precedingsibling
Nodoshermanosqueaparecenantesdelnodoactual.
Ejemplo:seleccionatodolosnodoshermanosqueaparecenantesdel
nodo"patient"enunCDA
/a:ClinicalDocument/a:recordTarget/a:patientRole/a:patient/precedingsi
bling::*
self
.abreviaself::node()
parent
preceding
4.1.2.Pruebadenodo
Laspruebasdenodosoncondicionessobrelosnombresdenodosotiposdenodos(elemento,atributo,texto,
comentario,etc.)PermitendeterminarculesnodosdelejeactualsonseleccionadosporunpasoenlaXPath.
Prueba
Comentario
Encuentratodoslosnodos,
independientementedel
nombre.Sirvepara
elementosoatributos.
Ejemplos
Ejemplo:Seleccionatodoslosatributosdelelemento"code"enun
CDA
/a:ClinicalDocument/a:code/@*
23
Ejemplo:Seleccionatodosloselementoshijosdelelemento
"recordTarget/patientRole"
/a:ClinicalDocument/a:recordTarget/a:patientRole/*
prefijo:
SieldocumentoXMLdefine
unespaciodenombres
(namespace).
SienunCDAalespaciodenombresxmlns="urn:hl7org:v3"sele
asignaelprefijo"a",verejemplosdearribapara*
Ejemplo:Encuentraloscomentariosdentrodelelemento
"ClinicalDocument"enunCDA
/a:ClinicalDocument/comment()
Encuentracomentariosenen
comment()
elXML.
Ejemplo:Encuentraloscomentariosdentrodelcuerpodeun
documentoCDA(dentrodecualquiernododescendiente,notareleje
"//")
/a:ClinicalDocument/a:component//comment()
text()
node()
Ejemplo:Encuentraeltextodelelemento"title"enunCDA
Encuentranodosdetextoen
elXML.
/a:ClinicalDocument/a:title/text()
Encuentracualquiernodo.
Ejemplo:Encuentratodoslosnodoshijos,incluyendocomentarios,de
"ClinicalDocument"enunCDA
/a:ClinicalDocument/node()
4.1.3.Predicados
Lospredicadospermitenseleccionarnodosespecficosmediantecondiciones,quecuandoseevalana"verdadero",
devuelvenelnodocorrespondiente.LospredicadosseespecificanentreparntesisrectosdentrodelaXPath.
Funcin/
Operador
Comentario
Ejemplos
Unindedosconjuntosdenodos
and,or,not()
Operadoresbooleanos,notesuna
funcin.
Ejemplo:seleccionatodoslosnodoscuyonombre
notienelargo6
//*[not(stringlength(localname())=6)]
Operadoresaritmticos.
Operadoresdecomparacin.
Ejemplo:SeleccionalaseccindeunCDA
/a:ClinicalDocument//a:component/a:section[a:co
de/@code="101550"]
Funcionessobretirasdecaracteres.
Referencia:
http://www.quackit.com/xml/tutorial/xpa
th_string_functions.cfm
Ejemplo:seleccionatodoslosnodoscuyonombre
empiezacon"effective"
//*[startswith(localname(),"effective")]
+,,*,div,mod
=,!=,<,>,<=,>=
concat(),
substring(),
substringbefore(),
contains(),
stringlength(),
startswith()
24
Ejemplo:seleccionatodoslosnodoscuyonombre
tienelargo6
//*[stringlength(localname())=6]
sum(),round(),
floor(),ceiling()
name(),
localname(),
namespaceuri()
position(),last(),
count()
Funcionessobrenmeros.
Funcionesparaobtenerpropiedadesde
losnodos.
+localname:nombresinelprefijodel
espaciodenombres.
+name:nombredelnodoactual
incluyendoelprefijoasignadoalespacio
denombres,sediferenciadelocalname
cuandolosnodostienenprefijoenel
XML,sinoeselmismovalor.
+namespaceuri:uridelnamespacedel
nodoactual.
Ejemplo:seleccionartodoslosnodos"id"dentro
deunCDA
//*[localname()="id"]
Ejemplo:seleccionartodoslosnodosdentrodel
espaciodenombres"urn:hl7org:v3"
//*[namespaceuri()="urn:hl7org:v3"]
Ejemplo:seleccionatodoslosnodos
"effectiveTime"dentrodelespaciodenombres
"urn:hl7org:v3"
//*[localname()="effectiveTime"and
namespaceuri()="urn:hl7org:v3"]
Funcionesparaobtenerinformacin
sobreelcontextodeprocesamiento.
+position:nmeroquerepresentala
posicindelnodoenlasecuenciaactual
denodosqueestnsiendoprocesados.
+last:ltimaaparicindeunnodohijo
dentrodeunnodopadre,sislohayun
subnodo,eseserelprimeroyelltimo.
+count:cuentalasocurrenciasdeun
nodooatributo.
Ejemplo:seleccionatodoslosnodosdescendientes
de"ClinicalDocument"quetienenmsde1
atributo
/a:ClinicalDocument//*[count(@*)>1]
Ejemplo:seleccionalosnodosquetieneunooms
subnodos"id"dentrodeunCDA
//*[count(a:id)>0]
Ejemplo:seleccionatodaslosnodos,quedentro
desunodopadreseanelsegundonodo
//*[position()=2]
Ejemplo:seleccionatodoslosltimosnodoshijo
dentrodecadanodopadre
//*[last()]
Ejemplo:seleccionatodoslospenltimosnodos
dentrodecadanodopadre
//*[position()=last()1]
25
string(),number(),
Funcionesdeconversindetipos.
boolean()
@atributo
Devuelvelosnodosquetienenun
atributollamado"atributo".
Ejemplo:seleccionatodoslossubnodosconun
atributo"code"deunCDA
//*[@code]
Ejemplo:seleccionatodoslossubnodoscon
atributos"code"y"codeSystem"deunCDA
//*[@codeand@codeSystem]
4.2.XSD
XMLSchemaDefinition(XSD)esunarecomendacindelW3C,dondeseespecificauntipoespecialdedocumento
XMLqueesutilizadoparadescribirloselementosdecualquierdocumentoXML.Estasdescripcionesseespecifican
comounconjuntodereglasyrestricciones,lascualessepuedenverificarcontraundocumentoXMLparadecirsiel
mismocumpleonoconunXSD.Enelcasodeintercambiodedatosentresistemas,utilizandoXML,elusodeXSDes
importanteparaverificarlavalidezdelosdatosemitidosyrecibidos,paraevitarerroresdeprogramacin,erroresde
comunicacinyerroresdeprocesamiento.
UnXSDestcompuestoporlossiguienteselementos:
1. Declaracindeelementos:definelaspropiedadesdeloselementosdelXML,comosunombre,espaciode
nombres,eltipoasociadoalelemento,qurestriccionestendr,queatributostendr,etc.
2. Declaracindeatributos:definelaspropiedadesdelosatributosdeunelementoXML,comosunombre,
espaciodenombres,altipoasociadoalatributoyrestriccionessobrelosposiblesvaloresquepodrtenerel
atributo.
3. Declaracindetipos:lostipospuedensersimplesocomplejos,lostipossimplespuedencontener
restriccionessobrelostiposprimitivos,lostiposcomplejospuedencontenerrestricciones,subelementosy
atributos.
4. Tiposdedatosprimitivos:
a. anyURI:representaURIsabsolutasrelativas.
b. base64Binary:representadatosbinarioscodificadoscomocaracteresenbase64.
c. hexBinary:representadatosbinarioscodificadoscomocaractereshexadecimales.
d. boolean:representavaloresbinariosdeverdad(true,false).
e. decimal:representaunsubconjuntodelosnmerosreales,obtenidosdemultiplicarunnmero
enteroporunapotenciade10nopositiva(i*10^n,dondei,nsonenteros,yn>=0).
f. double:representanmerosdepuntoflotantedeprecisindoblede64bits(m*2^e,dondemesun
nmeroentero,|m|<2^53,yeesunenterotalque1075<=e<=970).
g. duration:representaunaduracintemporalde6componentes:ao,mes,da,horas,minutos,
segundos.
h. float:representanmerosdepuntoflotantede32bits(m*2^e,dondemesunentero,|n|<2^24,y
eesunenterotalque149<=e<=104).
i. gDay:representaundaespecficoencualquiermes.
j. gMonth:representaunmesespecficoencualquierao.
k. gMonthDay:representaundaespecficodentrodeunmesespecfico.
l. gYear:representaunaoespecfico.
m. gYearMonth:representaunmesespecficoenunaoespecfico.
n. NOTATION:representaeltipodeatributoNOTATIONdelaespecificacinXML1.0
26
o. QName:representaunnombrecalificadodentrodelXML,sevaaquitardelarecomendacin.
p. string:representaunacadenadecaracteresdetamaoacotado.
q. dateTime:representaunpuntoeneltiempo,convaloresparaelao,mes,da,horas,minutos,
segundos,yzonahoraria.
r. date:representaunintervalodetiempodeexctamenteundadeduracin,quecomienzaalinicio
deldaencadazonahoraria.yterminaenelmomentoquecomienzaelnuevoda.
s. time:representauninstantedetiempoqueserepitediariamente.
5. Tiposdedatosderivados:
a. normalizedString:representaunstringquenocontieneloscaracteresderetornodecarro,nueva
lnea,otabulador.
b. token:esunnormalizedStringquenocontieneespaciosenblanconialinicionialfinal,ynotiene
secuenciasdedosomsespaciosconsecutivos.
c. language:representaunidentificadordelenguagesegnlaRFC306634 .Esuntoken.
d. NMTOKEN:representaeltipodeatributoNMTOKENdeXML1.0.Esuntoken.
e. NMTOKENS:representaeltipodeatributoNMTOKENSdeXML1.0.EsunNMTOKEN.
f. Name:representalosnombresvlidosenXML,esuntokenquecomienzaconunaletraoconalguno
deestoscaracteres:'_'|':'.
g. NCName:representanombres"nocolonizados",bsicamenteesunNamequenopuedetener":".
h. ID:representaeltipodeatributoIDdeXML.EsunNCNamequeapareceunasolavezenun
documento.
i. IDREF:representaeltipodeatributoIDREFdeXML.EsunNCNamequeseutilizacomoreferenciaa
otroelementoquetieneunatributoID.
j. IDREFS:representaeltipodeatributoIDREFSdeXML.EsunconjuntonovacodeIDREF.
k. ENTITY:representaeltipodeatributoENTITYdeXML.EsunNCNamequerepresentadeforma
simblicainformacindentrodeunXML.Porejemplolaentidad"&"representaelcaracter"&".
l. ENTITIES:representaeltipodeatributoENTITIESdeXML.EsunconjuntonovacodeENTITY.
m. integer:representaundecimalcuyoatributo"fractionDigits"es0,nopermitiendodgitosdecimales.
n. nonPositiveInteger:esunintegercuyoatributo"maxInclusive"es0.
o. negativeInteger:esunnonPositiveIntegercuyoatributo"maxInclusive"es1.
p. long:esunintegercuyoatributo"maxInclusive"es9223372036854775807ysuatributo
"minInclusive"es9223372036854775808.
q. int:esunlongcuyoatributo"maxInclusive"es2147483647,y"minInclusive"es2147483648.
r. short:esunintcuyoatributo"maxInclusive"es32767,y"minInclusive"es32768.
s. byte:esunshortcuyoatributo"maxInclusive"es127,y"minInclusive"es128.
t. nonNegativeInteger:esunintegercuyoatributo"minInclusive"es0.
u. unsignedLong:esunnonNegativeIntegercuyoatributo"maxInclusive"es18446744073709551615.
v. unsignedInt:esununsignedLongcuyoatributo"maxInclusive"es4294967295.
w. unsignedShort:esununsignedIntcuyoatributo"maxInclusive"es65535.
x. unsignedByte:esununsignedShortcuyoatributo"maxInclusive"es255.
y. positiveInteger:esunnonNegativeIntegercuyoatributo"minInclusive"es1.
34
http://www.w3.org/International/articles/languagetags/
27
35
DiagramadetiposdeXML
Nota:ElprotocoloSOAPhaceusoextensivodeesquemasXML,dondesedefinenlasestructurasinternasdelos
objetos,serializadosaXML,queseintercambianentreelclienteyelproveedordelservicioSOAP.
35
http://www.w3.org/TR/xmlschema2
28
29
4.2.1.EsquemaparadocumentosHL7CDA
EnestaseccinexpondremosunfragmentodelXSDdeCDA,comoejemploaplicadoalainteroperabilidadensalud.
4.2.1.1.DefinicindetipoparaelelementoClinicalDocument
Enestadefinicinpodemosverloselementoscorrespondientesalosdatosdelpaciente(recordTarget),delautordel
documento(author)ydelaorganizacinencargadadelacustodiadeldocumento(custodian),entreotros
elementos.
<xs:complexTypename="POCD_MT000040.ClinicalDocument">
<xs:sequence>
<xs:elementname="realmCode"type="CS"minOccurs="0"maxOccurs="unbounded"/>
<xs:elementname="typeId"type="POCD_MT000040.InfrastructureRoot.typeId"/>
<xs:elementname="templateId"type="II"minOccurs="0"maxOccurs="unbounded"/>
<xs:elementname="id"type="II"/>
<xs:elementname="code"type="CE"/>
<xs:elementname="title"type="ST"minOccurs="0"/>
<xs:elementname="effectiveTime"type="TS"/>
<xs:elementname="confidentialityCode"type="CE"/>
<xs:elementname="languageCode"type="CS"minOccurs="0"/>
<xs:elementname="setId"type="II"minOccurs="0"/>
<xs:elementname="versionNumber"type="INT"minOccurs="0"/>
<xs:elementname="copyTime"type="TS"minOccurs="0"/>
<xs:elementname="recordTarget"type="POCD_MT000040.RecordTarget"maxOccurs="unbounded"/>
<xs:elementname="author"type="POCD_MT000040.Author"maxOccurs="unbounded"/>
<xs:elementname="dataEnterer"type="POCD_MT000040.DataEnterer"minOccurs="0"/>
<xs:elementname="informant"type="POCD_MT000040.Informant12"minOccurs="0"maxOccurs="unbounded"/>
<xs:elementname="custodian"type="POCD_MT000040.Custodian"/>
<xs:elementname="informationRecipient"type="POCD_MT000040.InformationRecipient"minOccurs="0"
maxOccurs="unbounded"/>
<xs:elementname="legalAuthenticator"type="POCD_MT000040.LegalAuthenticator"minOccurs="0"/>
<xs:elementname="authenticator"type="POCD_MT000040.Authenticator"minOccurs="0"
maxOccurs="unbounded"/>
<xs:elementname="participant"type="POCD_MT000040.Participant1"minOccurs="0"maxOccurs="unbounded"/>
<xs:elementname="inFulfillmentOf"type="POCD_MT000040.InFulfillmentOf"minOccurs="0"
maxOccurs="unbounded"/>
<xs:elementname="documentationOf"type="POCD_MT000040.DocumentationOf"minOccurs="0"
maxOccurs="unbounded"/>
<xs:elementname="relatedDocument"type="POCD_MT000040.RelatedDocument"minOccurs="0"
maxOccurs="unbounded"/>
<xs:elementname="authorization"type="POCD_MT000040.Authorization"minOccurs="0"
maxOccurs="unbounded"/>
<xs:elementname="componentOf"type="POCD_MT000040.Component1"minOccurs="0"/>
<xs:elementname="component"type="POCD_MT000040.Component2"/>
</xs:sequence>
<xs:attributename="nullFlavor"type="NullFlavor"use="optional"/>
<xs:attributename="classCode"type="ActClassClinicalDocument"use="optional"fixed="DOCCLIN"/>
<xs:attributename="moodCode"type="ActMood"use="optional"fixed="EVN"/>
</xs:complexType>
30
4.2.1.2.DefinicindetipoparaelelementorecordTarget
ElsiguienteextractodeXSDdefinelaestructurainternadelnodoquerepresentaalpacientedentrodelos
documentosCDA.
<xs:complexTypename="POCD_MT000040.RecordTarget">
<xs:sequence>
<xs:elementname="realmCode"type="CS"minOccurs="0"maxOccurs="unbounded"/>
<xs:elementname="typeId"type="POCD_MT000040.InfrastructureRoot.typeId"minOccurs="0"/>
<xs:elementname="templateId"type="II"minOccurs="0"maxOccurs="unbounded"/>
<xs:elementname="patientRole"type="POCD_MT000040.PatientRole"/>
</xs:sequence>
<xs:attributename="nullFlavor"type="NullFlavor"use="optional"/>
<xs:attributename="typeCode"type="ParticipationType"use="optional"fixed="RCT"/>
<xs:attributename="contextControlCode"type="ContextControl"use="optional"fixed="OP"/>
</xs:complexType>
EsteesunfragmentodeCDAqueesvlidosegnlosfragmentosdeXSDexpuestosanteriormente:
<ClinicalDocumentxmlns="urn:hl7org:v3"xmlns:voc="urn:hl7org:v3/voc"xmlns:mif="urn:hl7org:v3/mif"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<typeIdextension="POCD_HD000040"root="2.16.840.1.113883.1.3"/>
<idroot="2.16.858.2.10002886.67430.20130530150748.1"/>
<codecode="285742"codeSystem="2.16.840.1.113883.6.1"codeSystemName="LOINC"displayName="Notadealta"
/>
<title>Notadealta</title>
<effectiveTimevalue="201212240930000300"/>
<confidentialityCodecode="N"codeSystem="2.16.840.1.113883.5.25"/>
<languageCodecode="esUY"/>
<setIdroot="db734647fc99424ca8647e3cda82e703"/>
<versionNumbervalue="1"/>
<recordTarget>
<patientRole>
<idroot="2.16.858.1.858.68909"extension="41162380"/>
<patient>
<name>
<given>Pablo</given>
<given>Federico</given>
<family>Pazos</family>
<family>Gutirrez</family>
</name>
<administrativeGenderCodecode="1"displayName="Masculino"codeSystem="2.16.858.2.10000675.69600"/>
<birthTimevalue="19811024"/>
</patient>
</patientRole>
</recordTarget>
<author>
<timevalue="201212240930000300"/>
<assignedAuthor>
<idroot="2.16.858.2.10000675.69586"extension="12345"/>
<assignedPerson>
<name>
<prefix>Dr.</prefix>
<given>Juan</given>
<family>Perez</family>
31
</name>
</assignedPerson>
<representedOrganization>
<idroot="2.16.858.0.2.16.86.1.0.0.123"/>
<name>HospitalX</name>
</representedOrganization>
</assignedAuthor>
</author>
<custodian>
<assignedCustodian>
<representedCustodianOrganization>
<idroot="2.16.858.0.2.16.86.1.0.0.123"/>
<name>HospitalX</name>
</representedCustodianOrganization>
</assignedCustodian>
</custodian>
<component>
<structuredBody>
...
</structuredBody>
</component>
</ClinicalDocument>
4.2.2.ValidacindeXMLcontraXSD
ExistennumerosasherramientasparavalidardocumentosXML,yestatareatambinpuedeserrealizadamediante
programacin.
EnWindows,sepuedeutilizarlaherramientaNotepad++conelpluginXMLTools:https://notepadplusplus.org/
EnLinux,sepuedeutilizarlaherramientaxmlint:http://xmlsoft.org/xmllint.html
Paravalidacinenlnea,existenunsinnmerodeopciones,unadeellas:
http://www.freeformatter.com/xmlvalidatorxsd.html
32
5.HL7
HealthLevelSevenesunafamiliadeestndarescondosgrandesversiones,v2yv3.Aunquev2yv3nosonversiones
delmismoestndar,sinoestndaresdistintos,loquellevamuchasvecesaconfusin.Dentrodev2existenasuvez
muchassubversiones,desde2.1a2.8.2,lasquenotaremoscomoHL7v2.x.
HL7v2.xsedivideencaptulos,comoporejemplogestindepacientes,gestinderdenes,reportederesultados,
coordinacin,entreotros,ytambindefinevocabularioscomunesaserutilizadosdentrodelosmensajes.
5.1.HL7v2.x
LasespecificacionesdeHL7v2.xsedividenen15captulosmsalgunosanexos.Acontinuacinselistanestos
captulos.Loscaptulosquesetomarncomoreferenciaparaestecursosonlosmarcadosennegrita.
CH01:Introduccin
CH02:Control,Tiposdedatos
CH03:Gestindepacientes
CH04:Ingresoderdenes
CH05:Consultasdedatos
CH06:Gestinfinanciera
CH07:Reportedeobservaciones(resultados)
CH08:Archivosmaestros
CH09:Gestindearchivosmdicos
CH10:Coordinacin(citas,estudios)
CH11:Derivacindepacientes
CH12:Atencinalpaciente
CH13:Laboratorioclnico
CH14:Gestindeaplicaciones
CH15:Gestindepersonal
Estoscaptulosincluyenladefinicindemensajesyvocabularioscomunesaserutilizadosdentrodelosmensajes.
Estosvocabulariosdefinenconjuntosdetrminoscomotablas,dondecadatrminotieneunidentificadornico.
Ademscadatablatambintieneunidentificadornico.
EnHL7v2.x,elprotocolodecomunicacinestorientadoatransaccionesqueseimplementanmedianteel
intercambiodemensajes,engeneralseenvaunmensajeyserecibeotrocomorespuesta.Lasespecificaciones
indicantodoslostiposdemensajesquepuedenserenviados,ysusrespuestasasociadas.Engeneralpara
33
implementaruncasodeusocompletosenecesitanvariasdeestastransacciones,porejemploenelcasodelos
estudiosdelaboratorio,elenvodelaordendesdelaHCEalLABesunatransaccinyelenvoderesultadosdesdeel
LABalaHCEesotra.Comoprotocolodetransporte,HL7v2.xutilizaMLLPenlamayoradeloscasos,perotambin
esposibleutilizarHTTPuotroprotocolo,peroestoscasossonmenosfrecuentes.LaventajadeutilizarMLLPesla
performanceyelusoptimoderecursos.
HL7v2.xdefineelementosbsicosdelprotocoloquesirvenparacontrolarlastransaccionesypermitiruna
comunicacinefectivadedatos.Elprimerelementoeseleventodisparador(triggerevent),queesuneventoque
ocurreenelmundorealodentrodeunsistema,cuyoresultadoeselenvodeunmensaje.Porlotanto,todoenvo
demensajesenHL7debetenerasociadouneventodisparador.LaespecificacindeHL7definelasemnticadecada
eventoyasignauncdigonicoparaquelossistemaslointerpretensinambigedad.Unsegundoelementosonlos
mensajesdereconocimiento(acknowledgeoACK),quepermitenenviarunarespuestaantelarecepcindeun
mensaje,indicandosielmensajehasidorecibidoyprocesadodeformacorrecta.Anteerrores,losmensajesACK
puedencontenerdescripcionesdetalladasdelosproblemasencontrados.Estacaractersticapermiteasegurarque
todoslosmensajesenviadosfueronrecibidosyprocesados.Untercerelementoeseltipodetransaccin.Existen
mensajesorientadosalacreacin,modificacin,eliminacinyconsultadedatos,enelsistemareceptor.
LosmensajesHL7v2.xpuedencodificarseenER7(verseccin3.3)oenXML.
5.1.1.FormatodemensajesHL7v2.x
Comofuemencionadoanteriormente(verseccin6.3),losmensajesHL7v2.xsiguenlacodificacinER7,quesebasa
endelimitadores.Losdelimitadoressedefinenalprincipiodecadamensajeyengeneralsonlosmismos,aunque
puedenvariar.Porlotantoelprocesamientodemensajesnodeberasuponerculessonlosdelimitadoresutilizados,
sinoquedeberatomarlosquevienenencadamensaje.
LosdelimitadoresmarcanelcomienzoyfindedistintoselementosqueconformanlosmensajesHL7v2.x.A
continuacinsemencionanlosdelimitadoresutilizadospordefecto:
Delimitador
Terminacinde
segmento
Valorsugerido
Posicindentro
deMSH2
Uso
ASCII0x0D(retorno
decarro)
Estevalornopuedesermodificadoenla
implementacin
Separadorde
campos
ASCII0x7C(|)
Separadoscamposdedatosadyacentesdentrodeun
segmento.Tambinseparaelidentificadordel
segmentodelprimercampo.
Separadorde
componentes
ASCII0x5E(^)
Separadorde
repeticin
ASCII0x7E(~)
Separamltiplesocurrenciasdecomponentesdentro
deuncampo.
Carcterde
escape
ASCII0x5C(\)
Utilizadodentrodecamposdetipotexto(ST,TX,FT)o
dentrodecomponentesquecontienentirasde
caracteres,dondeaparecencaracteresdecontrol.
Separadorde
ASCII0x26(&)
subcomponente
Separasubcomponentesadyacentesdentrodeun
componente.
Separacomponentesadyacentesdentrodeuncampo.
Entonces,elprimersegmentodetodoslosmensajesdebertenerelmismoformato:
34
MSH|^~\&|...
AcontinuacinsedescribenlosdistintoselementosqueconformanlosmensajesHL7.
Figura4:modelogeneraldemensajesHL7v2.x
5.1.3.1.Mensaje
Unmensajeestconformadoporunconjuntodesegmentos,elprimerodeloscualeseselcabezaldelmensaje,
dondeserepresentainformacinnecesariaparalatransferenciadedatosenunaredyprocesamientodelmensaje
porpartedelasaplicacionesreceptoras.Alrestodelossegmentosselesllamacuerpodelmensaje.Elsegmento
cabezalestidentificadorporloscaracteresMSH(MessageHeader).
5.1.3.2.Segmento
Todoslosmensajescontienenmsdeunsegmento.Cadasegmentoesdeuntipoespecficoqueseidentificacon
trescaracteres.Eltipodesegmentodeterminaquinformacinsercontenidaenesesegmento.Cadatipode
segmentotieneunaestructurapredefinidaenelestndar,lacualcontieneladefinicindeunconjuntodecamposy
suscaractersticas,porejemplosisonobligatoriosono,sisepuederepetir,etc.
5.1.3.3.Campo
Unsegmentoestconformadoporunconjuntodecamposoatributos.Paraidentificaruncampodentrodeun
segmentoseutilizaunndice,porejemploelcampoMSH9referenciaalcampomessagetypedelsegmentoMSH.
Cadasegmentotieneuntipodedatoasociado,unnombrequeindicaloquerepresentaelcampo,porejemplo
identificadordelpaciente.Sielcamporepresentauncdigo,enladefinicindelsegmentotambinseincluyede
qutablasedebesacarelvalorparadichocampo,porejemploelcamposexoadministrativodebetomarsuvalor
delatabla0001dondeestnlosvaloresvlidosdesexoparaHL7.
5.1.3.4.Tipodedato
Lostiposdedatosdeterminancmosecodificanloscamposinternamente.Lostiposdedatosespecificanestructuras
decomponentesysubcomponentesdondesecolocandatossimples,estospodranserdeocurrenciamltiple
(delimitadosmedianteelseparadorderepeticin).
35
5.1.2.Tiposdemensajes
Lostiposdemensajeseidentificanmediantecdigosdetrescaracteres.Estoscdigosestndefinidosenlatabla
0076deHL7.Algunosdelostiposmsusadosson36 :
5.1.4.1.ACK
Mensajegeneraldeconfirmacin(acknowledge),utilizadoparaconfirmarlarecepcindeunmensajeeinformarde
posibleserroresenelprocesamientodelmensajeporpartedelreceptor.Ejemplos:
MSH|^~\&|HIS|System|Hosp|HL7Genie|20071016055244||ACK^A01|A234242|P|2.3.1|
MSA|AA|234242|MessageReceivedSuccessfully|
MSH|^~\&|BROKER.RECEIVER.FLOW||ADT|767543|20090824222730||ACK|XX3657|P|2.5
MSA|AE|ZZ9380|MSHparsingorvalidationerror:MSH.3.SendingApplicationisnull|1
5.1.4.2.ADT
Mensajeutilizadoparacomunicarinformacindelpacientealmomentoseradmitido(Admission),dadodealta
(Discharge),otransferido(Transfer)aotroservicioocentroasistencial(T).Estemensajeincluyetambininformacin
dellugarfsico(centroasistencialypuntodeatencin),delmdicoquevaaatenderalpaciente,informacinde
contactos,etc.Inclusopermitecomunicaralgunainformacinclnicatilparalaatencinmdicaqueselebrindar
alpaciente,porejemploalergias,resultadosdeestudios,informacindeunaccidente(ej.paraunaatencinde
urgencia),etc.Ejemplo:
MSH|^~\&|EPIC|EPICADT|SMS|SMSADT|199912271408|CHARRIS|ADT^A04|1817457|D|2.5
EVN|A04|199912271300
PID||0493575^^^2^ID1|454721||DOE^JOHN|DOE^JOHN|19480203|M||B|254MYSTREET
AVE^^MYTOWN^OH^44123^USA||(216)1234567|||M|NON|400003403
NK1|1|ROE^MARIE|SPO||(216)1234567||EC
PV1||O|BOX1^^^ER||||277^ALLEN
MYLASTNAME^BONNIE||||||||||||2688684|||||||||||||||||||||||||199912271408||||||002376853
5.1.4.3.OML
Mensajeparardenes,tantodeestudiosdelaboratoriocomootrostiposderdenes.AunqueelmensajeORM
puedeserutilizadoconestepropsito,OMLtienelaventajadepermitirutilizardatosreferidosalamuestrayal
contenedordemuestras.Eleventodisparadordeestemensajeescualquieraquealtereelestadodeunaorden,
desdelacreacinhastasuejecucin,pasandoporcancelacinomodificacin.
MSH|^~\&|OP|Entgastric|OF|Chem|200309060820||OML^O21^OML_O21|msgOP123|T|2.5.1|123
PID|1||12345^5^M10^Memphis_Hosp^PI||EVERYMAN^ADAM^^JR^^^L||19800101|M
PV1|1|O|Ward|||||||||||||||12345
ORC|NW|12345^gastric||666^gastric|||||200309060710|2221^NURSE^NANCY|||||||||||Entgastric^^^^^^FI^^^EG02
TQ1|||||||||A
OBR||12345678^gastric||82951^GlucoseToleranceTest^C4||||||1234^BLEEDER|P|||||222222^PHYSICIAN^^^^DR|821
OBX|1|NM|GLUCOSE||75|g|||||F|||200309060735
SPM|1|123456781^gastric||SER|||||||P||||||200309060735|||||||||1
SPM|2|123456782^gastric||SER|||||||P||||||200309060755|||||||||1
36
http://www.hl7.org/special/committees/vocab/v26_appendix_a.pdf
36
SPM|3|123456783^gastric||SER|||||||P||||||200309060815|||||||||1
5.1.4.4.OMP
Mensajeparardenesdefarmaciaotratamientos.
MSH|^&~\|Pharm|GenHosp|CIS|GenHosp|1998052911150700||OMP^O09^OMP_O09|...
PID|...
ORC|NW|1000^OE||||E|^Q6H^D10^^^R|...
RXO|^Polycillin500mgTAB^|500||MG|||||Y||40|...
RXR|PO|...
5.1.4.5.ORL
Respuestaamensajesderdenesdelaboratorio(OML).Seutilizacomoacknowledge.Ejemplo:
MSH|^~\&|OF|Automation|OP|Cytology|200310060826||ORL^O34^ORL_O34|301|T|2.5.1
MSA|AA|101
PID|1||6543210^^^AbbevilleHospital^PI||ILL^JOHN^^^^^L||19810101|M
SPM|1|456_1^Cytology||BLD|||||||P||||||200310060735|200310060821||||||||1
ORC|OK|||555^Urology|SC||||200310060710|^NURSE^JANET|||||||||||Urology^^^^^^FI^^^UR01
TQ1|1||||||||R
OBR|1|456^Cytology||85027^Hemogramandplateletcount,automated^C4||||||^COLLECT^JOHN|S|||||^URO^^^^DR
ORC|OK|||555^Urology|SC||||200310060710|^NURSE^JANET|||||||||||Urology^^^^^^FI^^^UR01
TQ1|1||||||||R
OBR|1|457^Cytology||85009^DifferentialWBCCount,buffycoat^C4||||||^COLLECT^JOHN|S|||||^URO^^^^DR
5.1.4.6.ORM
Mensajeparardenesengeneral,seutilizaporcompatibilidadhaciaatrs.Serecomiendautilizarmensajesms
especficosparalasrdenescomoOMLparardenesdelaboratorio.ORMpermitecrearrdenes,onotificarde
cancelacinomodificacindelasmismas.Ejemplo:
MSH|^~\&|MESA_OF|XYZ_RADIOLOGY|MESA_IM|XYZ_IMAGE_MANAGER|||ORM^O01|100112|P|2.3.1||
PID|||M4000^^^ADT1||KING^MARTIN||19450804|M||WH|820JORIEBLVD^^CHICAGO^IL^60523|||||||20984000|
PV1||E|ED||||1234^WEAVER^TIMOTHY^P^^DR|5101^NELL^FREDERICK^P^^DR|||||||||||V100^^^ADT1||||||||||||||
|||||||||||200008201100|||||||V|
ORC|NW|A100Z^MESA_ORDPLC|B100Z^MESA_ORDFIL||SC||1^once^^^^S||200008161510|^ROSEWOOD^RANDOLPH||7101^ESTRADA^J
AIME^P^^DR||(314)5551212|200008161510||92222910^IHERAD^IHECODE231||
OBR|1|A100Z^MESA_ORDPLC|B100Z^MESA_ORDFIL|P1^Procedure1^ERL_MESA^X1_A1^SPActionItem
X1_A1^DSS_MESA|||||||||xxx||Radiology^^^^R|7101^ES
TRADA^JAIME^P^^DR||XR999999|RP123456|SPS123456||||MR|||1^once^^^^S|||WALK|||||||||||A|||RP_X1^RPActionItem
RP_X1^DSS_MESA
ZDS|1.2.1^100^Application^DICOM
5.1.4.7.ORU
Mensajedeobservaciones.Seutilizaparacomunicarresultadosdelaboratorioydeimagenologavinculadosauna
orden,haciadiversossistemas.Ejemplo:
MSH|^~\&|LAB|SCC|STOCKELL|0010|201201020155||ORU^R01|25238212|P|2.3
PID|1||222225||Pluto^Dog^A||19560101|M|||1248KINNEYS
LANE^^PORTSMOUTH^PORTSMOUTH^OH^45662||7402565000|||M||1111115|
37
PV1|1||ERF||5780629||1111^EPMG^INC.||||||||||1111^EPMG^INC.|||||||||||||||||||||||||||201201020110
ORC|RE|017161095001|730203266|73020326|||^^^201201020119^^S||201201020120|INFO||8480^MCKAIN^CHRISTINE|ERF
OBR|1|||LIP^Lipase|||201201020133|||SND||||201201020134||8480^MCKAIN^CHRISTINE|||||||||F
OBX|1|NM|LIP^Lipase^SL^LIPL||200|U/L|65230||||F|||201201020154
5.1.4.8.OUL
Mensajedeobservacionesdelaboratorio,seutilizaparaenviarresultadosdeestudiosvinculadosaunamuestra.Se
utilizafrecuentementeenlagestindeestudiosyresultadosdentrodellaboratorio.Ejemplo:
MSH|^~\&|OF|Chemistry|ORT||200309060825||OUL^R22^OUL_R22|msgOF103|T|2.5.1
PID|1||12345^5^M10^Memphis_Hosp^PI||EVERYMAN^ADAM^^JR^^^L||19800101|M
PV1|1|O|Ward|||||||||||||||12345
ORC|SC|12345^gastric||666^gastric|IP||||200309060824|222221^NURSE^NANCY|||||||||||Entgastric^^^^^^FI^^^EG02
OBR||12345678^gastric|555^chemistry|82951^GlucoseTolerance
Test^C4||||||1234^BLEEDER|P|||||222222^PHYSICIAN^^^^DR|821||||||||I
TQ1|||||||||A
OBX|1|NM|GLUCOSE||75|g|||||F|||200309060735
OBX|2|NM|302646^GLUCOSE40MPOSTDOSEGLUCOSE^LN||||||||X
SPM|1|123451^gastric||SER|||||||P||||||200309060735|200309060821||Y||||||1
SPM|2|123452^gastric||SER|||||||P||||||200309060755|200309060821||Y||||||1
SPM|3|123453^gastric||SER|||||||P||||||200309060815|200309060821||N|RB^Brokencontainer|||||1
5.1.4.9.RDS
Mensajededispensacindefarmaciaotratamiento.Sueleutilizarsecomonotificacindesdelossistemasde
enfermeradondesegestionalaejecucindelaadministracindeunmedicamentooelcumplimientodecierto
tratamiento.
MSH|^&~\|PIMS|GenHosp|IE||1998052911150700||RDS^O13^RDS_O13||...
PID|||555444222111^^^MPI&GenHosp&L^MR||Everyman^Adam||19600614|M||C|99Oakland#
106^^Pasadena^CA^91131||^^^^^626^5641111|^^^^^626^5647654|||||343132266|||N|...
ORC|RE||89968665||||||1998052910300700|||77^Hippocrates^Harold^H^III^DR^MD||^^^^^510^2673600|...
RXE|1^BID^^19980529|^Verapamil|120||mg^milligram^FDB.MDDB||...RXD|1|00378112001^VerapamilHydrochloride120
mgTAB^NDC|1998052911150700|100|||1331665|3|...
RXR|PO|...
FT1|1|||1998052911150700||CO^CoPay^HL70017|00378112001^VerapamilHydrochloride120mgTAB^NDC
|||1|5&USD^TP|...
FT1|2|||1998052911150700||PY^Payment^HL70017|00378112001^VerapamilHydrochloride120mgTAB^NDC
|||1|5&USD|...
5.1.4.10.RRD
Mensajederespuestaaladispensacindefarmaciaotratamiento(RDS).Seutilizacomoacknowledge.
38
5.1.3.Eventosdisparadores
ElprotocoloHL7v2.xsebasaenelenvodemensajesytodomensajeenviadodebetenerasociadounevento
disparador.Esteeventoocurretantoporaccindeunapersonacomodeunsistemaenelmundoreal,yayudaa
diferenciarlascondicionesbajolascualesserecibeunmensajedeciertotipo,debidoaquemensajesdeunmismo
tipopuedenserdisparadospordistintoseventosbajodistintascondiciones.Loseventosestndefinidosenlatabla
0003deHL7.Acontinuacinsedescribenalgunosdeloseventosdisparadoresmsutilizados.
5.1.3.1.Eventosparaadmisiones,altasytransferencias(ADT)
LossiguienteseventosdisparanmensajesdetipoADT:
A01
Notificacindevisitaoadmisin.Seutilizacuandoelpacienteeshospitalizadoyseleasignaunlugarfsicocomoun
cuartoocama.
A02
Notificacindetransferencia.Seutilizacuandoelpacienteestransferidodeunaubicacinaotra.
A03
Notificacindealta.Seutilizacuandofinalizalaatencinalpacienteyellugarqueocupabaquedalibreparaser
asignadoaotropaciente.
A04
Notificacinderegistrodepaciente.Seutilizaparanotificarcuandounpacienteambulatorioesrecibidoparauna
consulta.
A05
Notificacindepreadmisindelpaciente.Seutilizaparanotificarelcomienzodelprocesodepreadmisin,oseael
registrodelpacienteprevioaserhospitalizado(A01).
A08
Notificacindemodificacindeinformacindelpaciente.Seutilizaparanotificarcambiostantodelavisitao
encuentro,comodatosdemogrficosdelpaciente.SeutilizacuandonoexisteotroeventoAXXmsespecfico.
A11
Notificacindecancelacindeadmisin.
A12
Notificacindecancelacindetransferencia.
A40
Notificacindeunindeidentificadoresdelpaciente.Seutilizacuandodosomsregistrosdepacientes,que
correspondenalmismopaciente,sonconsolidados.
Porunalistacompletadeeventos,vealatabla0003enlasespecificacionesdeHL7v2.537 .
37
https://www.hl7.org/implement/standards/product_brief.cfm?product_id=143
39
5.1.4.Tiposdesegmentos
Cmosecomentpreviamente,unmensajeestcompuestodeunaseriedesegmentos,dondeelprimeroesel
cabezaldelmensajeMSH(messageheader).Lossegmentosseutilizarnenlaseccin7.6dondesedescribirn
distintostipodemensajesHL7.Acontinuacinsedescribenalgunosdelostiposdesegmentosmsutilizados.
5.1.4.1.MSH(MessageHeader)
Informacindelcabezaldelmensaje,incluyecamposconlaidentificacindelemisoryreceptordelmensaje,versin
deHL7utilizada,identificadordelatransaccin,fechadeenvo,etc.
5.1.4.2.EVN(Event)
Segmentoconinformacinsobreeltipodeevento.Seutilizaparacomunicarinformacindecontextonecesaria
sobreeleventodisparadorparaqueelmensajeseaprocesadocorrectamenteporelreceptor.
5.1.4.3.PID(PatientIdentification)
Estesegmentocontieneinformacindeidentificacindelpaciente.Seutilizaentodotipodemensajesparasabera
qupacientecorrespondeunaorden,unresultado,unaadmisin,etc.Contieneinformacindeidentificadores,
nombresyapellidos,fechadenacimiento,sexo,informacindecontacto,etc.
5.1.4.4.NK1(NextofKin)
Estesegmentoseutilizaparaespecificarinformacindepersonasasociadasalpaciente,comounapersonade
contacto,unacompaante,unfamiliar,etc.Incluyeinformacincomonombresyapellidos,tipoderelacinconel
paciente,informacindecontacto,etc.
5.1.4.5.PV1(PatientVisit)
Estesegmentoesutilizadoporaplicacionesderegistracinogestindepacientesparacomunicarinformacinsobre
unacuentaosobrelavisitadelpaciente(ej.unahospitalizacinoconsultamdica).Contieneinformacinacercadel
tipodepaciente,identificadoresdepreadmisinydeadmisin,tipodeadmisin,elservicioalquefueadmitido,
informacinsobrelosmdicos(quienadmite,quienrefiere,mdicoconsultante,etc.),informacinfinanciera,etc.
5.1.4.6.OBX(Observation)
Segmentodeobservaciones,engeneralcontieneelresultadodeunestudioindividual.
5.1.4.7.OBR(ObservationRequest)
40
Segmentodepedidodeobservacin,esutilizadoenlasrdenesdeestudiosparaindicarcadaestudiopedidodentro
deunaorden.
5.1.4.8.ORC(CommonOrder)
Segmentoquerepresentaunaordenquepuedecontenervariospedidosdeestudios.Contieneinformacincomo
quinordenaelestudio,quinlodebeejecutar,fechayhoradelpedido,desdequelugaroserviciosesolicitaronlos
estudios,etc.
5.1.4.9.AL1(Allergies)
Segmentoquecontieneinformacindelasalergiasdelpaciente,comoeltipodealrgeno,lareaccinylagravedad.
5.1.4.10.NTE(NotesandComments)
Estesegmentoseutilizaparaagregarcomentariosentextoplanoasociadosaotrossegmentos.Porejemplo,enun
mensajederesultadosdelaboratoriocadaresultadocontenidoenunsegmentoOBXpuedetenercerooms
comentariosasociados.
5.1.4.11.MSA
SegmentodemessageacknowledgementquecontienelainformacinprincipaldelosmensajesACKyseda
informacingeneraldelprocesamientodelmensajerecibidoporelreceptor.
5.1.4.12.ERR
Segmentoqueincluyeinformacindeerrores,utilizadoenlosmensajesACK.
5.1.4.13.RXO(PrescriptionOrder)
Estesegmentoseutilizaparaespecificarinformacinderdenesdefarmaciaotratamientosmedicamentosos.
Contieneinformacindelasustanciaaadministrar,ladosis,formafarmacutica(comprimidos,cpsulas,polvo,
crema,etc.),etc.
41
5.1.5.Tiposdedatos
Cadacampodeunsegmentotieneasociadountipodedatoquedefinelaestructurainternadelosdatosenun
mensajeHL7.Lostiposdedatosestndefinidosenelcaptulo2,anexoAdelestndar.Acontinuacinsedescriben
algunosdelostiposdedatosmsutilizados:
5.1.5.1.AD(Address)
Especificaladireccindeunapersona,lugaruorganizacin.
5.1.5.2.CE(CodedElement)
EstetipodedatofuereemplazadoporCWE.
5.1.5.3.CWE(CodedwithExceptions)
Especificadatoscodificadoscondetallesasociados,comocdigoalternativoytambinpermiteomitirelcdigo
cuandohayuntextoasociado.
5.1.5.4.CX(ExtendedCompositeIDwithCheckDigit)
EspecificaIdentificadoresconinformacinadministrativavinculada.
5.1.5.5.DT(Date)
SeutilizaelformatoYYYYMMDDconDDyMMopcionales,porloqueestetipodedatopuedetenerunlargomximo
deochocaracteres.
5.1.5.6.DTM(Date/Time)
Especificaunpuntodetiempoformadoconlafecha,tiempoyzonahoraria.
5.1.5.7.HD(HierarchicDesignator)
Identificaunaentidadresponsabledeasignarogestionaridentificadoresdeobjetos(pacientes,mdicos,etc.).
5.1.5.8.ID(CodedValuefromHL7DefinedTables)
EsunvalorcodificadoqueseobtienedelastablasyadefinidasdentrodeHL7.
42
5.1.5.9.EI(EntityIdentifier)
Seutilizaengeneralparacolocaridentificadoresgeneradosautomticamente.Contieneinformacindelsistemaque
generelidentificador.
5.1.5.10.FT(FormattedText)
EstetipodedatoderivadeTX,yloextiendepermitiendolainclusindecaracteresdeformateo,loscualesdeben
comenzarconunpunto.,yparaincluircaracteresdeformateoenuncampoesnecesariorodearlosconelcarcter
deescape,engeneral\.Acontinuacinsecomentanalgunosdeestoscaracteres:
".br":Terminalalneaactualycomienzaunanueva.
".in<N>":IndentacindeltextoconNespaciosenblanco.
Resaltadodetexto:
\H\:Comienzaelmodoresaltado(highlightedtext).
\N\:Terminaelmodoresaltado(normaltext).
Insercindecaracteresespecialeseneltexto:
\F\:Separadordecampos"|"
\S\:Separadordecomponente"^"
\T\:Separadordesubcomponente"&"
\R\:Separadorderepeticin"~"
\E\:Carcterdeescape"\"
UnejemplodedatoFTconcaracteresdeformateo:
|Firstline.\.br\\in4\Secondline.\.br\\.br\
\.H\Tablemode:\N\\.br\+++\.br\
\F\cell1/1\F\cell2/1\F\\.br\+++\.br\
\F\cell1/2\F\cell2/2\F\\.br\+++\.br\
Unusuariofinalloveracomo:
Firstline.
Secondline.
Tablemode:
+++
|cell1/1|cell2/1|
+++
|cell1/2|cell2/2|
+++
43
5.1.5.11.IS(CodedValuefromUserDefinedTables)
Esunvalorcodificadoqueseobtienedetablasdefinidasporelusuario.
5.1.5.12.MSG(MessageType)
Contieneeltipodemensaje,eventodisparadorycdigodeestructuradelmensajedentrodelsegmentoMSH.
5.1.5.13.NM(Numeric)
Representaundatonumrico,quepuedecontenersignoypuntodecimal.Eltamaomximoesde16caracteres.
5.1.5.14.PL(PersonLocation)
Estetipodedatocontieneinformacinsobreellugarfsicodeunapersona,comopuntodecuidado,cuarto,cama,
centro,edificio,piso,etc.
5.1.5.15.SI(SequenceID)
Contieneundatonumricopositivodelargomximode4dgitos.
5.1.5.16.ST(StringData)
Representadatosentextolibre,paratextoscortos(menosde1000caracteres).Puedeincluircualquiercarcterde
controldeHL7menoselterminadordesegmento,perosedebeutilizarelcarcterdeescapeantedichoscaracteres
decontrol.
5.1.5.17.TS(TimeStamp)
EstetipodedatofuesustituidoporDTMenHL7v2.5.
5.1.5.18.TX(TextData)
Contienedatosentextolibre,orientadosaservisualizadosmediantealgunainterfazdeusuariooaserimpresosen
papel.Elseparadorderepeticin(~)seinterpretacomoterminadordeprrafo.Serespetanlosespaciosque
aparecenantesdeltexto,yellargomximoes65536caracteres.
5.1.5.19.XCN(ExtendedCompositeIDnumberandnameforpersons)
Contieneinformacinquepermiteidentificaraunapersona.Estetipodedatoescomplejoysedefineenfuncinde
otrostiposdedatos.EssimilaraXPN,peroagregainformacindeidentificacindelapersona.
44
5.1.5.20.XPN(ExtendedPersonName)
Contieneinformacindelosnombresyapellidosdeunapersona,msprefijos,sufijosyotrainformacinquepuede
serincluidaenelnombrecompletodeunapersona.
5.1.5.21.XTN(ExtendedTelecommunicationNumber)
Permiterepresentarnmerosdetelfono,nmerosdefax,correoselectrnicos,tantodeltrabajocomodelhogar,
msinformacincontextual.
5.1.6.Definicionesdemensajes
ParaimplementarHL7v2.xesnecesariosaberleerlasespecificacionesdelestndarysusperfiles.Comprenderla
definicindemensajesessumamentenecesario.Enestaseccinsevernlasdistintasformasdeespecificacinde
mensajesytransaccionesquetieneHL7v2.x.
5.1.6.1.DefinicinestticademensajesHL7
Estetipodedefinicinhacefocoenlaparteestructuraldelosmensajes,definiendoestructurasdemensajes,
segmentosycampos.Paraladefinicindemensajesseutilizalasintaxisabstractademensajesbasadaensegmentos,
contenidosentrellaves{}paradenotarmultiplicidadyentreparntesisrectos[]paradenotarocurrenciaopcional.
Ejemplosdedefinicionesestticasaniveldemensajes:
ADT^A01^ADT_A01
ADTMessage
MSH
MessageHeader
[{SFT}]
SoftwareSegment
EVN
EventType
PID
PatientIdentification
[PD1]
AdditionalDemographics
Tabla2:extractodeladefinicinestticadelmensajeADTparaeleventoA01
45
ACK^varies^ACK
ACKMessage
MSH
MessageHeader
[{SFT}]
SoftwareSegment
MSA
MessageAcknowledgement
[{ERR}]
ErrorSegment
Tabla3:definicinestticadelmensajeACKparacualquierevento
Enlatabla2sedefinepartedelmensajeADTqueselanzaanteeleventodisparadorA01.Lossegmentosdeeste
mensajecumplen:
MSHesobligatorio.
SFTesopcionalypuedetenermltiplesocurrencias.
EVNyPIDsonobligatorios.
PD1esopcionalypuedetenersolounaocurrencia.
Sedebenotarqueelidentificadordelmensajesecomponedeltipodemensaje(ADT),deleventodisparador(A01)y
delidentificadordeestructura(ADT_A01).Lautilidaddelidentificadordeestructuraesparapoderreutilizarlamisma
estructuraparaotromensajedelmismotipo,perocondistintoeventodisparador.Estotieneunefectoanivelde
softwarequeesnecesarioconsiderarcuandosedesarrolla:puedeparecerquealgunosmensajesnoestndefinidos
peroesporqueesosmensajesreutilizanestructurasdeotros.
PorejemploelmensajeADTconeventoA04utilizalaestructuraADT_A01:
ADT^A04^ADT_A01
ADTMessage
MSH
MessageHeader
[{SFT}]
SoftwareSegment
EVN
EventType
PID
PatientIdentification
[PD1]
AdditionalDemographics
Tabla4:extractodeladefinicinestticadelmensajeADTparaeleventoA04
46
47
5.1.6.2.Definicinestticadesegmentos
Ladefinicinestticaaniveldesegmentostienelasiguienteestructura:
SEQ
LEN
DT
Usage
Cardinality
TBL#
ElementName
SI
SetIDPID
20
CX
RE
[0..1]
PatientID
20
CX
[1..*]
PatientIdentifierList
20
CX
AlternatePatientIDPID
48
XPN
[1..*]
PatientName
48
XPN
RE
[0..*]
MothersMaidenName
26
TS
RE
[0..1]
Date/TimeofBirth
IS
RE
[0..1]
0001
Sex
Tabla5:extractodedefinicinestticaaniveldesegmentosparaPID
EstatabladefineloscamposdentrodeunsegmentoPID,indicando:
Lugardelcampodentrodelsegmento
Largodelcampoenbytes
Tipodedatocorrespondienteacadacampo
Usodelcampo,donde:
o R=Requerido
o RE=Requeridoperopuedeestarvaco
Laaplicacinemisoradebeenviardatossilostiene.
Laaplicacinreceptoradebeprocesarcorrectamenteelmensajeaunquenovengandatos.
o O=Opcional
o C=Condicional
o CE=Condicionalperopuedeestarvaco
o X=Nosoportado/Nocorresponde
Cardinalidaddecadacampo
o Definelacantidaddeocurrenciasposiblesdedatosencadacampo.
Nmerodetabla
o Sieldatoparaelcampodebeobtenersedeunatabla.
Nombredelcampo
48
5.1.6.3.Definicinestticadecampos
Ladefinicinaniveldecampostienelasiguienteestructura:
SEQ
LEN
DT
OPT
TBL#
COMPONENTNAME
20
ST
Identifier
199
ST
Text
20
ID
0396
NameofCodingSystem
20
ST
AlternateIdentifier
199
ST
AlternateText
20
ID
0396
NameofAlternateCodingSystem
10
ST
CodingSystemVersionID
10
ST
AlternateCodingSystemVersion
ID
199
ST
OriginalText
Tabla6:definicinestticadecamposdetipoCWE
Comosepuedeapreciar,ladefinicinaniveldecamposdescribelaestructurainternadelostiposdedatosasociados
acadacampo.EnlatablaanteriorsedescribeeltipodedatoCWE(CodedWithExceptions).Enestatablasedefinen:
Lugarqueocupacadacomponentedentrodeltipodedato
Largodecadacomponenteenbytes
Tipodedatodecadacomponente
o Seutilizaparatiposdedatoscomplejosquedependendeotrostiposdedatos.
Nmerodelatabladedondeseobtienenlosvaloresvlidosparaelcomponente.
Nombredelcomponente.
Referenciaalcaptuloyseccindondesedefinecadacomponente.
49
5.1.7.HL7v2.5codificadocomoXML
LacodificacinmscomndelosmensajesHL7v2.xesER7(verseccin3.3),perolosmensajesHL7v2.xpuedenser
codificadosenXML.Amododeejemplo,aqusemuestraelmismomensajeADTdelaseccin5.1.4.2,peroenXML
(lossegmentosNK1yPV1seremovieronparasimplificarelejemplo):
<?xmlversion="1.0"encoding="UTF8"?>
<ADT_A01xmlns="urn:hl7org:v2xml">
<MSH>
<MSH.1>|</MSH.1>
<MSH.2>^~\&</MSH.2>
<MSH.3>
<HD.1>EPIC</HD.1>
</MSH.3>
<MSH.4>
<HD.1>EPICADT</HD.1>
</MSH.4>
<MSH.5>
<HD.1>SMS</HD.1>
</MSH.5>
<MSH.6>
<HD.1>SMSADT</HD.1>
</MSH.6>
<MSH.7>
<TS.1>199912271408</TS.1>
</MSH.7>
<MSH.8>CHARRIS</MSH.8>
<MSH.9>
<MSG.1>ADT</MSG.1>
<MSG.2>A04</MSG.2>
</MSH.9>
<MSH.10>1817457</MSH.10>
<MSH.11>
<PT.1>D</PT.1>
</MSH.11>
<MSH.12>
<VID.1>2.5</VID.1>
</MSH.12>
</MSH>
<EVN>
<EVN.1>A04</EVN.1>
<EVN.2>
<TS.1>199912271300</TS.1>
</EVN.2>
</EVN>
<PID>
<PID.2>
<CX.1>0493575</CX.1>
<CX.4>
<HD.1>2</HD.1>
</CX.4>
<CX.5>ID1</CX.5>
</PID.2>
<PID.3>
<CX.1>454721</CX.1>
</PID.3>
50
<PID.5>
<XPN.1>
<FN.1>DOE</FN.1>
</XPN.1>
<XPN.2>JOHN</XPN.2>
</PID.5>
<PID.6>
<XPN.1>
<FN.1>DOE</FN.1>
</XPN.1>
<XPN.2>JOHN</XPN.2>
</PID.6>
<PID.7>
<TS.1>19480203</TS.1>
</PID.7>
<PID.8>M</PID.8>
<PID.10>
<CE.1>B</CE.1>
</PID.10>
<PID.11>
<XAD.1>
<SAD.1>254MYSTREETAVE</SAD.1>
</XAD.1>
<XAD.3>MYTOWN</XAD.3>
<XAD.4>OH</XAD.4>
<XAD.5>44123</XAD.5>
<XAD.6>USA</XAD.6>
</PID.11>
<PID.13>
<XTN.1>(216)1234567</XTN.1>
</PID.13>
<PID.16>
<CE.1>M</CE.1>
</PID.16>
<PID.17>
<CE.1>NON</CE.1>
</PID.17>
<PID.18>
<CX.1>400003403</CX.1>
</PID.18>
</PID>
</ADT_A01>
UnaformasencilladeobtenerelXMLapartirdeER7esmediantelaherramientaHAPITestPanel38 .
38
http://hl7api.sourceforge.net/hapitestpanel/
51
5.2.HL7v3
HL7v3estdivididoen23dominios,similaresaloscaptulosdeHL7v2.x,cadaunoespecializadoendefinirmensajes
odocumentosenfuncindeconceptosespecficos.TodosesosmensajesydocumentossiguenelReference
InformationModeldeHL7v3,porloquemantienenciertogradodecompatibilidadaniveldelmodelobsico.
Losdominiosson:
1. Contabilidadyfacturacin:Cubrelacreacinygestindelascuentasdepagodelospacientes,conelfinde
recolectarlospagosycrditos(transaccionesfinancieras)paraapoyarlapresentacindereclamoso
reembolsosdefacturas.
2. Prestacindeatencinmdica:Habilitalainformacinnecesariaparaelcuidadocontinuodelosindividuos,
poblacionesyotrossujetosdeatencin.
3. Reclamosyreembolso:Refierealafacturacin(incluyendolaverificacindeautorizacinyelegibilidad),
adjudicacinypagos(incluyendoajustesyconsultasdelascuentas)deserviciosdesalud.
4. Apoyoalasdecisionesclnicas:Seencargadedefinirmensajeraparainfobuttons.Losinfobuttonsson
instrumentosdeinformacinenpuntosdeatencin,quegeneranconsultasonlineautomticamentesobre
recursosdeinformacindesalud,utilizandoinformacinextradadelaHistoriaClnicaElectrnica(HCE)del
pacienteydeinformacindelcontexto(datosdemogrficos,datosdelaatencinmdicaactual,etc).Estas
consultassirvenparaproveeralprofesionaldelasaluddeinformacintilenelcuidadodeesepaciente
especfico.
5. Arquitecturadedocumentoclnico:DefineunasintaxisbasadaenXMLparadefinirdocumentacinclnica
estructurada.UndocumentoCDApuedeincluirinformacindedistintostipos:texto,imgenes,sonidos,y
otroscontenidosmultimedia.LaestructuradedocumentosCDAesflexible,pudiendorepresentarmuchos
tiposdedocumentosclnicosdiferentes.
6. Clnicagenmica:Permitelainterrelacindeinformacinclnicaygenmica.Granpartedelainformacin
genmica,anesgenrica,porejemploelgenomahumanosonlassecuenciasdeADNquesecreencomunes
atodoserhumano.Lavisindemedicinapersonalizadaestbasadaendichascorrelaciones,quehacenuso
deinformacingenmicapersonal,quesediferenciaentredospersonascualesquiera.
7. Declaracionesclnicas:Definemensajeratilparalacomunicacindedeclaracionesclnicas.Estdefinidode
formaamplia,porloqueunamismadeclaracinclnicapodratenermltiplesformasderepresentacin.Por
lotanto,paraserusadoefectivamente,esnecesariodefinirrestriccionessobreelmodelodemensajespara
cadacontextodeterminado.
8. Tiposdemensajesdeelementoscomunes:Estedominioseencargadedefinirpartesdeestructuras
comunesyreutilizablesparalosmensajesdediversosdominios.
9. Medidasdecalidad:Defineunestndarparalarepresentacindemedidasdecalidadensalud,comoun
documentoelectrnico.Unamedidadecalidadesunaherramientacuantitativaqueproporcionaindicadores
derendimientodeunindividuouorganizacin,enrelacinconunaaccinoprocesoespecfico,ocomo
medidaderesultadosclnicos.
10. Inmunizacin:Refierealacomunicacindeinformacinsobrelainmunizacin:administracindevacunasy
suerosalaspersonas,paraprevenirenfermedadesinfecciosas.
11. Laboratorio:Constadelosmensajesnecesariosparalacomunicacindeinformacindeestudiosy
observacionesdelaboratorio,incluyendoreascomo:qumica,hematologa,serologa,histologa,citologa,
anatomapatolgica,microbiologayvirologa.
12. Registrosmdicos:Apoyalagestinyconsultadedocumentosclnicos.
13. Administracindepacientes:Definelainformacindemogrficadelpaciente,lacualserconsumidadesde
otrossistemascomoregistrosclnicososistemasfinancieros.
14. Administracindepersonal:Contieneladefinicinderoles,relaciones,credenciales,certificados,
capacidades,competencias,cualificaciones,privilegios,responsabilidadesyasignacindetareas,emitidos
para,ogestionadospor,distintasentidades(personas,organizaciones,dispositivos,etc).
15. Farmacia:Seencargadedefinirmensajeraparalaprescripcin,dispensacin,yadministracinde
medicamentos,tantoenfarmaciasexternascomointernasalainstitucin.Tambindefinemensajeraparala
solicituddeinformacindelregistrodemedicacindeunpaciente(drogras,recetas,etc).
52
16. Registros:Seencargadelosregistrosadministrativosdepersonas,pacientes,proveedores,equipamientoy
lugaresdeprestacindeserviciossanitarios.
17. ReportesdeSaludPblica:Incluyelosmensajesparaapoyarladenunciaeinvestigacindeenfermedadesen
elcontextodelaSaludPblica.
18. Productosregulados:Incluyelasnormaselaboradasparalaaprobacindeproductosregulados,ylos
mensajesparacomunicarinformacindeestosproductos.
19. Estudiosregulados:Incluyenormaselaboradasparaelintercambiodeinformacinsobrelarealizacinde
estudiosregulados,ylacomunicacindelainformacinrecolectadaduranteesosestudios.
20. Coordinacin:Ofreceunconjuntogenricodemensajesparapoderimplementarcualquiercontextode
coordinacin.
21. Mensajescompartidos:Contienedefinicionesdetiposdemensajescomunes,quesonreutilizadosporotros
dominios.
22. Muestras:Comprendelosmensajesrelacionadosconcualquiertipodemuestra.Lainformacincontenidoes
delapropiamuestra,desuenvase,ydeloscontenidosdeesteantes,duranteydespusdequelamuestra
fuecolocadaeneste.
23. Dispositivosteraputicos:Comprendemensajesnecesariosparalacomunicacinrelacionadaconlaterapiay
lasobservacioneshechaspordispositivosmdicos.Enlaactualidadestcentradoenlosdispositivos
cardacosimplantables.
EnestecursonosconcentraremoseneldominiodeCDA(ArquitecturadeDocumentoClnico).
5.2.1.ReferenceInformationModel(RIM)
ElmodelodereferenciadeHL7v3sirvecomobaseparalosmensajesydocumentosdefinidosentodoslosdominios.
ElcorazndelRIMestcompuestoporseisclasesbsicasdeinformacin:
ElementoscentralesdelHL7v3RIM
Entity:esunobjetofsicoogrupodeobjetosfsicos,uorganizacionescapacesdeparticiparenactosatravsdeun
rol.Personas,animales,ydispositivossonalgunosejemplos.
Role:competenciadeunaentidadquejuegaunrolenunacto
Participation:representalaasociacinentreunrolyunacto.
Act:permiteregistraralgoquefuerealizado,queestsiendorealizado,quepuedeserrealizadooquefuepedido
paraserrealizadoenelfuturo.Laadministracindemedicamentos,elregistrodesignosvitales,losresultadosde
estudiosdelaboratorio,sonalgunosejemplos.
53
VisincompletadelHL7v3RIM
5.2.2.ClinicalDocumentArchitecture(CDA)
LosdocumentosCDAcontienenuncabezalconlosdatosdelpaciente,mdico,centro,etc.yuncuerpoconel
registrodeunaconsulta,visitaocontactomdico.CDAtieneunformatoXML,dondeesposibledefinir3niveles:
Nivel1:Noestructurado(cuerpoendatosbinarios,textolibre,etc)
Nivel2:Estructurado,textolibre(divididoenseccionesdondelosregistrosserealizanentextolibre)
Nivel3:Estructurado,codificado(lasseccionestienenasuvezentradascodificadas)
5.2.2.1.EstructuradelCDAenXML
ElelementorazdelXMLes"ClinicalDocument",dondesepuedendestacarlossubelementosquecorrespondenal
cabezalyalcuerpodelCDA.Enestecaso,elcuerpoesestructurado(niveles2o3):
<ClinicalDocument...>
...cabezal(header)...
<component>
<structuredBody>
<component>
<section>
<title></title>
...
</section>
</component>
</structuredBody>
</component>
54
</ClinicalDocument>
Dentrodelcabezal,encontramosalgunoselementoscomo:
<typeId.../>
<id.../>
<code.../>
<title>...</title>
<effectiveTime.../>
<confidentialityCode.../>
<languageCode.../>
<recordTarget>...informacindelpaciente...</recordTarget>
<author>...informacindelmdicoresponsable...</author>
<custodian>...informacindelcustodiodeldocumento...</custodian>
...
TipodedocumentoCDA(valoresfijos):
<typeIdextension="POCD_HD000040"root="2.16.840.1.113883.1.3"/>
Identificadordeldocumento:
<idroot="db734647fc99424ca8647e3cda82e703"/>
Cdigoindicadordeltipodedocumentoparticular:
<codecode="341339"codeSystem="2.16.840.1.113883.6.1"displayName="Summarizationofepisodenote"/>
Ttulodeldocumento:
<title>ConsultaAmbulatoria</title>
Dayhoraenlaquesecreeldocumento:
<effectiveTimevalue="201212240930000300"/>
Cdigodeconfidencialidad:
<confidentialityCodecode="N"codeSystem="2.16.840.1.113883.5.25"/>
Idiomaenelqueestexpresadoeldocumento:
<languageCodecode="esAR"/>
5.2.2.2.Paciente
<recordTarget>
<patientRole>
<!Identificadorytipodeidentificador,puedetenermsdeuno>
<idextension="41162380"root="2.16.858.1.858.68909"/>
55
<patient>
<name>
<given>Pablo</given>
<given>Federico</given>
<family>Pazos</family>
<family>Gutirrez</family>
</name>
<administrativeGenderCodecode="M"codeSystem="2.16.840.1.113883.5.1"/>
<birthTimevalue="19811024"/>
<ethnicGroupCodecode="Blanca"codeSystem="1.2.3.4.5.6.11111"/>
</patient>
</patientRole>
</recordTarget>
5.2.2.3.Autordeldocumento(ej.mdicoresponsable)
Eselresponsabledelaautora,puedenoserquieningresalosdatosenelsistema.Elautortieneotrosatributosque
sepuedenusarcomoelrolylafuncinparticularquecumpleenlaatencin.
<author>
<!Momentodelaautoradeldocumento,ej.comienzodelaatencin>
<timevalue="20000407130000+0500"/>
<assignedAuthor>
<idroot="20cf14fbb65c4c8ca54db0cca834c18c"/>
<assignedPerson>
<name><prefix>Dr.</prefix><given>Robert</given><family>Dolin</family></name>
</assignedPerson>
<!Paraquorganizacintrabajabaenelmomentodeautoradeldocumento>
<representedOrganization>
<idroot="2.16.840.1.113883.19.5"/>
<name>HospitalMadariaga</name>
</representedOrganization>
</assignedAuthor>
</author>
5.2.2.4.Organizacinencargadadecustodiarlosdocumentos(ej.MinisteriodeSalud)
<custodian>
<assignedCustodian>
<representedCustodianOrganization>
<idroot="2.16.840.1.113883.19.6"/>
<name>MinisteriodeSalud</name>
</representedCustodianOrganization>
</assignedCustodian>
</custodian>
5.2.2.5.EjemplodeunaseccinNivel2dentrodelcuerpodelCDA
Estaesunaseccinsimplequecontieneinformacindesignosvitalesentextolibre(nivel2)enunformatodetabla.
56
<component>
<section>
<codecode="12345"codeSystem="2.16.840.1.113883.6.1"codeSystemName="LOINC"displayName="Signos"/>
<title>Signos</title>
<text>
<table>
<tbody>
<tr>
<th>Signo</th>
<th>Valor</th>
<th>Observacin</th>
</tr>
<tr>
<td>Presinarterial</td>
<td>120/90mmHg</td>
</tr>
<tr>
<td>Frecuenciacardiaca</td>
<td>75latidos/min</td>
</tr>
<tr>
<td>Frecuenciarespiratoria</td>
<td>16respiraciones/min</td>
</tr>
<tr>
<td>Temperatura</td>
<td>37C</td>
</tr>
</tbody>
</table>
</text>
</section>
</component>
5.2.3.ValidandoCDA
HL7proveeunaseriedeesquemasXML(XSD)quepermitevalidarsintcticamentelosdocumentosclnicos
generadosorecibidosporunsistema.Dentrodelcursoutilizaremosunaversinunificadadelesquemaparapoder
validarnuestrosdocumentosCDA.
57
6.ServiciosWeb
LosServiciosWebusualmenteestnasociadosconSOAP,peroeltrmino"ServicioWeb"esmsamplioyrefierea
cualquiertipodeservicioqueseproveesobrelaWeb,independientementedelprotocolodecomunicacinquese
utiliceparaimplementarlo.REST(REpresentationalStateTransfereningls)surgecomounaalternativalivianaa
SOAPparalaimplementacindeServiciosWeb,peroadiferenciadeSOAP,RESTesnoesunprotocolode
comunicacin,sinounconjuntodeprcticasquedefinenunestiloarquitectnicoparaimplementarServiciosWeb
mssimplesylivianos.
6.1.REST
RESTdefineciertasreglasquepermitenejecutaroperacionessobrerecursos.Laimplementacinmsfrecuentees
utilizandoHTTPcomoprotocolodetransporteylosmtodosHTTPcomooperacionesoverbosaserejecutados
sobreciertorecurso.CadarecursodeunaaplicacinesidentificadomedianteunaURL.RESTnodefinelas
estructurasdedatosquedeberesponderelservidor,estodebeserunacuerdoentreclienteyservidor,porejemplo
sepodradevolverXML,JSONyotroformato,ysuestructurainternadependerdecadarecurso.
UnadelascaractersticasbsicasdeRESTesquees"stateless",oseaquecadapedidocontienetodoelestado
necesarioparaejecutarciertafuncin,yunpedidonodependedelestadodeotropedidoanterior.
Otracaractersticaesquelosrecursospuedenvincularseentresmediantelinks.Porejemplosiunahistoriaclnica
contuvieraunconjuntodedocumentos,desdeelrecurso"historia"sepodrantenerlinksalosrecursos
"documento",yaseaalacoleccindedocumentosoacadadocumentoindividual.
6.1.1.MtodosHTTPyoperacionesREST
TalcomovimosenlaseccindeProtocolosdeComunicacin,HTTPproveemtodosqueindicanalservidorcmo
debeprocesarelpedidoHTTP.
MtodoHTTP
OperacinREST
Accin
GET
Obtieneunrecurso.
Obtenerconjuntosdeobjetosuobjetosindividuales.
POST
Cambiaelestadodeunrecurso.
Crearobjetosdentroderecursos.
PUT
Creaomodificaelcontenidodeun
recursoexistente.
Crearomodificarobjetos.Sirveparacrearcuandoel
clienteconocelaURLdelrecursoacrear,sinose
conocelaURLdelobjetoacrear,sedebeusarPOST.
Eliminacontenidodeunrecurso
existente.
Eliminarobjetos.
DELETE
58
IdempotenciaycachHTTP
LosmtodoGET,PUTyDELETEsonidempotentes,loquesignificaquesucesivasllamadasidnticas,utilizandounode
esosmtodos,retornarnelmismoresultado.SedebetenercuidadoenlaimplementacindelmtodoDELETE,
porquesisehaceunaeliminacinfsicadelrecurso,elDELETEnoseraidempotente.Porotrolado,POSTnoes
idempotente,yaquesucesivasllamadasaPOSTsobreunrecurso,crearnnuevasinstanciasdelrecurso,ydevolver
resultadosdistintos.
UnadelastantascaractersticasdelprotocoloHTTPeselcach,quepermiteacelerarlastransacciones
notablemente,almacenandoresultadosasociadosaciertasURLsdelladodelcliente.Deestemodoseevitala
ejecucindeaccionesyobtencindedatosdesdeelservidor,loqueesmslentoquesolamenteleerdenuevolos
datosdelladodelcliente.ElcachdeHTTPfuncionacuandoseutilizanmtodosidempotentes,porlotantoentodas
lasoperacionesqueseimplementanporRESTmenoslasqueutilizanelmtodoPOST.
Ejemplos
Porejemplo,podramosdecirqueenelmbitohospitalariotenemoslossiguientesrecursos:
Historias:HistoriaClnicaElectrnicadelospacientes
Paciente:pacientesdenuestrohospital
rdenes:rdenesdeestudiosdiagnsticos
Resultados:resultadosdeestudiosdiagnsticos
Prescripciones:prescripcionesdemedicamentos
Dispensaciones:dispensacionesdemedicamentosapacientes
Siquisiramosoperarsobreestosrecursos,podramosdefinirlassiguientesURLsparaidentificarlos:
/historias
/pacientes
/ordenes
/resultados
/prescripciones
/dispensaciones
MtodosHTTPyrecursos
PedidoHTTP
Accin
GET/historias
Obtienetodaslashistoriasclnicas.
GET/historias/1234
Obtienelahistoriaclnica1234.
POST/historias
Creaunanuevahistoriaclnica,laURLserdeterminadaporelservidor.
PUT/historias/9876
Creaunanuevahistoriaclnica"9876",laURLesdeterminadaporelcliente.
59
PUT/historias/1234
Modificaelcontenidodelahistoriaclnica"1234".
DELETE/historias/1234
Elimialahistoriaclnica"1234"
EnloscasosdePOSTyPUT,esprobablequeelclienteenveunobjetoenelcuerpodelpedidoHTTP,conla
informacindelrecursoacrearoasermodificado.Porejemplo,unpedidoHTTPcompletoparacrearunahistoria
clnica,usandoobjetosJSON,sera:
POST/historiasHTTP/1.1
Host:www.mihospital.com
ContentType:application/json
{
"hce_uid":4455,
"paciente_uid":4567,
"creado":"20151201T00:00:00.000Z",
"documentos":[]
}
Siquisiramosmodificarelrecursocreado,agregandoundocumento,podramosenviarelsiguientepedidoHTTP:
PUT/historias/4455HTTP/1.1
Host:www.mihospital.com
ContentType:application/json
{
"hce_uid":1234,
"paciente_uid":4567,
"creado":"20151201T00:00:00.000Z",
"documentos":[
{
"fecha":"20151202T00:00:00.000Z",
"tipo":"notadeconsulta",
"texto":"elpacientepresenta..."
}
]
}
Estaseraunaformadeagregarundocumentoalahistoriaclnicadeunpaciente,oseamodificandoelrecurso
/historias.Sinembargo,podratenerseunrecurso/documentosquedependadelrecurso/historias,porquelos
documentosloexistenenelcontextodeunahistoriaclnica.EntoncessepodratenerlasiguienteURL:
/historias/{hce_uid}/documentos,dondeunGETobtendratodoslosdocumentosdentrodeunahistoria,unPOST
crearaunnuevodocumentodentrodelahistoria,etc.
Yparaobtenerlalistadetodaslashistoriasclnicasexistentes,sloharamos:
GET/historiasHTTP/1.1
Host:www.mihospital.com
60
Larespuestadelservidordeberaserconsistenteconlosformatosdeobjetosutilizadosparacrearrecursosy
modificarrecursosconpedidosPOSTyPUT.Peroutilizandoelcabezal"Accept"podramossolicitarlealservidorque
enlugarderetornarunobjetoJSON,retorneunobjetoXML,conlosmismosdatos/estructuradenuestrosrecursos.
XML:
GET/historiasHTTP/1.1
Host:www.mihospital.com
Accept:application/xml
JSON:
GET/historiasHTTP/1.1
Host:www.mihospital.com
Accept:application/json
Dadoqueelmismorecursopuedepedirseendistintosformatos(XML,JSON,HTML,etc.),decimosqueunmismo
recursotienedistintasrepresentaciones.
DebesealarsequenotodoslosmtodosHTTPtienensiempreuncorrespondientefuncionaldentrodeunsistema,
porejemplosepodraconvenirquelashistoriasclnicasnopuedeneliminarse,porlotantoDELETEnoaplicaraal
recurso/historias.
ComopuedeapreciarsehayelementosRESTquequedanabiertasalaimplementacin,dadoqueRESTesunestilo
arquitectnico,unagua,nounaespecificacinrigurosadeunprotocolodecomunicacin.
Resumendecaractersticas:
Cadarecursotieneunidentificador,laURL.
Losrecursospuedenvincularsemediantelinks.
RESTutilizamtodosestndardeHTTP.
Unrecursopuedetenermltiplesrepresentaciones.
Nosemantieneelestadoentrepedidos(stateless).
RESTycdigosdeestadoHTTP
RESTreutilizaloscdigodeestadodefinidosporHTTP(verseccin2.3.4).Porejemplo,siseintentaaccederaun
recursoynosetienenlospermisosparaaccederlo,larespuestadelservidorcontendrelestado403Forbidden.Sise
intentacrearunrecursoenviandounpedidoPOST,sisepudocrearelrecurso,elservidorretornar201Created.
AqupuedeencontrarunalistacompletadecdigosdeestadodeHTTP:
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
AqupuedeencontrarunalistadecdigosdeestadoHTTPquesonutilizadoscomnmenteenREST:
http://www.restapitutorial.com/httpstatuscodes.html
61
6.2.RESTvsSOAP
EnlasiguientetablasecomparanalgunosaspectosdelenfoquedeRESTcontraelprotocoloSOAPparala
implementacindeServiciosWeb.
Caracterstica
REST
SOAP
Protocolo
ReutilizaHTTP
Defineunonuevo(sobreHTTPengeneral)
Representacin
Cualquiera(XML,JSON,HTML,PDF,...)
XML
Estado
Stateless
StatelessStateful
Contrato
Documentacin
WSDL
MtodosHTTP
GET,POST,PUT,DELETE
POST
CachHTTP
Si,paraoperacionesGET,PUTyDELETE
No,porquePOSTnoesidempotente
Estado
ReutilizaloscdigosdeestadodeHTTPpara
informaralclientedeerroreseinformacin
sobrelasrespuestas.
NoutilizacdigosHTTP,utilizaelelemento
SOAPFaultparainformardeerrores.
62