go to post Yone Moreno · Nov 9, 2023 Thanks @Ashok Kumar , for your kind help. We have developed it as follows: ClassMethod HL7ToCustomEnsReq(request As EnsLib.HL7.Message) As Mensajes.Request.Peticiones.Derivaciones.EnvioPeticiones.operacionRequest { #dim xml As %Stream.GlobalCharacter set tSC = ##class(HS.Gateway.HL7.HL7ToSDA3).GetSDA(request,.xml) $$$ThrowOnError(tSC) set reqObj = ##class(Mensajes.Request.Peticiones.Derivaciones.EnvioPeticiones.operacionRequest).%New() do reqObj.XMLImportSDAString(xml.Read()) set tSC = reqObj.%Save() $$$ThrowOnError(tSC) $$$LOGINFO("reqObj.MSH.MSH1.content: "_reqObj.MSH.MSH1.content) quit reqObj } Where the Request is as follows: Class Mensajes.Request.Peticiones.Derivaciones.EnvioPeticiones.operacionRequest Extends (Ens.Request, HS.SDA3.QuickXML) [ ProcedureBlock ] { Parameter RESPONSECLASSNAME = "Mensajes.Response.Peticiones.Derivaciones.EnvioPeticiones.operacionResponse"; Property MSH As hl7.MSH.CONTENT; Property NTE As list Of hl7.NTE.CONTENT; Property ORMO01PATIENT As hl7.ORMO01.PATIENT.CONTENT; Property ORMO01ORDER As list Of hl7.ORMO01.ORDER.CONTENT; Property SFT As list Of hl7.SFT.CONTENT; Property MSA As hl7.MSA.CONTENT; Property ERR As list Of hl7.ERR.CONTENT; And the Transformation invokes the HL7ToCustomEnsReq() functions like this: Class Transformaciones.HL7.Peticiones.Derivacion.Mensaje.ORM01 Extends Ens.DataTransformDTL [ DependsOn = (EnsLib.HL7.Message, Mensajes.Request.Peticiones.Derivaciones.EnvioPeticiones.operacionRequest) ] { Parameter IGNOREMISSINGSOURCE = 1; Parameter REPORTERRORS = 1; Parameter TREATEMPTYREPEATINGFIELDASNULL = 0; XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ] { <transform sourceClass='EnsLib.HL7.Message' targetClass='Mensajes.Request.Peticiones.Derivaciones.EnvioPeticiones.operacionRequest' sourceDocType='2.5:ORM_O01' targetDocType='2.5:ORM_O01' create='new' language='objectscript' > <assign value='##class(Util.FuncionesComunes).HL7ToCustomEnsReq(source)' property='target' action='set' /> </transform> } } However we do see the $$$LOGINFO("reqObj.MSH.MSH1.content: "_reqObj.MSH.MSH1.content) totally empty: reqObj.MSH.MSH1.content: Being a warning issued as: Could not generate EncounterNumber, skipping Encounter What have we done wrong? How could we understand, improve and fix it? Is this the recommended way to convert an official HL7 Message, to a Ens.Request which is similar to a HL7 message but where each segment and field is an Ensemble class? Thanks for your time, help and effort. We have also read carefully: https://docs.intersystems.com/irisforhealthlatest/csp/documatic/%25CSP.D... Again thanks @Ashok Kumar for your help.
go to post Yone Moreno · Nov 8, 2023 Thanks @Ashok Kumar for your thoughts and time, trying to help us. We have tested it, as follows: ; 08/11/2023 We try to encode the signature with base64Url set base64urlSignature = ##class(%OAuth2.Utils).Base64UrlEncode(signature) $$$LOGASSERT("base64urlSignature: "_base64urlSignature) It shows the following output: base64urlSignature: cvj48UMDm3jtp9amY7rO1eyXmutC9wjMZzREmQOGIL0 So, you are right, it looks like it removes the "=" character at the end, because when we use: set bas64signature = $system.Encryption.Base64Encode(signature) $$$LOGINFO("bas64signature: "_bas64signature) It shows us, the next outpout which contains "=" at the end: bas64signature: cvj48UMDm3jtp9amY7rO1eyXmutC9wjMZzREmQOGIL0= However it does not fix why the JWT's third part is different thant the one provided the simulator and tested with JWT.io We think the difference is due to this line, the one which retrieves the signature: set signature = $SYSTEM.Encryption.HMACSHA(256, unsignedToken, key) $$$LOGINFO("signature: "_signature) How could we understand, deeply understand, and solve this need? Thanks for your help, time, and effort.
go to post Yone Moreno · Nov 7, 2023 Thanks @Ashok Kumar for your help and time. The updated variant: set header = "{""alg"":""HS256""}" $$$LOGINFO("header: "_header) set payload = "{""username"":"""_user_""",""requestID"":"""_pRequest.idPeticion_"""}" $$$LOGINFO("payload: "_payload) set key = ##class(Util.TablasMaestras).getValorMaestra("PDF_LABORATORIO","secretKey_JWT") $$$LOGINFO("key: "_key) set base64header = $system.Encryption.Base64Encode(header) $$$LOGALERT("base64header: "_base64header) set base64payload = $system.Encryption.Base64Encode(payload) $$$LOGALERT("base64payload: "_base64payload) set base64decode = $system.Encryption.Base64Decode(base64payload) $$$LOGALERT("base64decode: "_base64decode) set base64payloadNUEVO = $system.Encryption.Base64Encode(base64decode) $$$LOGALERT("base64payloadNUEVO: "_base64payloadNUEVO) set base64decodeFUNCIONA = $system.Encryption.Base64Decode("eyJ1c2VybmFtZSI6Imhvc3QiLCJyZXF1ZXN0SUQiOiI5NDAzNjgyIn0") $$$LOGALERT("base64decodeFUNCIONA: "_base64decodeFUNCIONA) set base64FUNCIONA = $system.Encryption.Base64Encode(base64decodeFUNCIONA) $$$LOGALERT("base64FUNCIONA: "_base64FUNCIONA) set base64payloadQuitarIgualFinal = $PIECE(base64payload,"=",1) $$$LOGALERT("base64payloadQuitarIgualFinal: "_base64payloadQuitarIgualFinal) set unsignedToken = base64header_"."_base64payloadQuitarIgualFinal $$$LOGINFO("unsignedToken: "_unsignedToken) set signature = $SYSTEM.Encryption.HMACSHA(256, unsignedToken, key) $$$LOGINFO("signature: "_signature) set bas64signature = $system.Encryption.Base64Encode(signature) $$$LOGINFO("bas64signature: "_bas64signature) set token = unsignedToken_"."_bas64signature $$$LOGWARNING("token: "_token) Besides, comparing the one provided by the simulator which works, and the one which generates Ensemble; it is two thirds equals: Header is exactly the same: Payload is equal: However the third one, the signature is not right. We do not know why the lines which get the signature as a "HMAC-SHA256" are not ginving the proper and/or expected string: set signature = $SYSTEM.Encryption.HMACSHA(256, unsignedToken, key) $$$LOGINFO("signature: "_signature) set bas64signature = $system.Encryption.Base64Encode(signature) $$$LOGINFO("bas64signature: "_bas64signature) set token = unsignedToken_"."_bas64signature $$$LOGWARNING("token: "_token) We would need as the simulator has provided: "0LagsAfugccAlAiVyEQ2VbX8dODn0bCOixQROTAYG1I" However Ensemble outputs as a signature this one: "cvj48UMDm3jtp9amY7rO1eyXmutC9wjMZzREmQOGIL0=" -- How could we understand and solve this? We have also read carefully: https://community.intersystems.com/post/how-use-base64-encrypt-string-ex... https://community.intersystems.com/post/hmac-authentication-problem https://docs.intersystems.com/irisforhealthlatest/csp/documatic/%25CSP.D... Could you help us, please?
go to post Yone Moreno · Nov 7, 2023 Yes, you are right: Source: MSH|^~\&|ROCHE|350228|CARESUITE|1419|20231024083456||ORU^R01^ORU_R01|6677130896271347|P|2.5|||AL|AL PID|1||ABC^^^HIS^PI^^^^ABC&&99CENTRO_SCS||ABC^ABC||ABC|M|||| PV1|1|U|UVI08|R||||||MIV^Medicina Intensiva^99SVC|||||||||| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|300^Indice Lipemico^CAT_350228|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|300^Indice Lipemico^CAT_350228||8||0-14||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|2|NM|301^Indice Hemolitico^CAT_350228||1||0-40||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|3|NM|302^Indice Icterico^CAT_350228||1||0-30||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|4|NM|1001^Glucosa. (Sangre)^CAT_350228||112|mg / dl|70-110|H|||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|5|NM|1005^Urea. (Sangre)^CAT_350228||39.4|mg / dl|10-50||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|6|NM|1007^Creatinina. (Sangre)^CAT_350228||0.902|mg / dl|.67-1.17||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|7|NM|1195^Filtrado glomerular estimado (CKD-EPI)^CAT_350228||84.20710618|mL/min|60-999||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|8|NM|1006^?ido ?ico (Urato). (Sangre)^CAT_350228||3.33|mg / dl|3-7||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|9|NM|1019^Prote?as totales. (Sangre)^CAT_350228||6.69|g / dl|6.4-8.3||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|10|NM|1009^Sodio. (Sangre)^CAT_350228||141.6|meq/l|135-145||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|11|NM|1010^Potasio. (Sangre)^CAT_350228||3.87|meq/l|3.5-5.2||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|12|NM|1011^Cloro. (Sangre)^CAT_350228||104.6|meq/l|94-110||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|13|NM|1035^Fosfato. (Sangre)^CAT_350228||3.3|mg / dl|2.7-4.5||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|14|NM|1021^Creatinquinasa (CK). (Sangre)^CAT_350228||186|U/L|20-200||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|15|NM|1027^Troponina T sensible. (Sangre)^CAT_350228||657|ng/L|3-14|H|||F|||20231024065700^^20231024083343||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|16|NM|3191^Procalcitonina. (Sangre)^CAT_350228||2.46|ng/mL|.1|H|||F|||20231024065700^^20231024083343||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|17|NM|4021^Prote?a C Reactiva. (Sangre)^CAT_350228||5.07|mg / dl|0-.5|H|||F|||20231024065700^^20231024083343||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|18|ST|9100^HEMOGRAMA^CAT_350228||*||||||F|||20231024065700^^20231024065749||^^Validado por el sistema^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|19|NM|9111^Hematies^CAT_350228||4.16|10^6/?L|4.4-5.9|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|20|NM|9114^Hemoglobina^CAT_350228||11.4|g / dl|11-17.5||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|21|NM|8017^Hematocrito^CAT_350228||35.4|%|40-54|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|22|NM|8027^VCM^CAT_350228||85|fl|80-99||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|23|NM|8023^HCM^CAT_350228||27.5|pg|26-32||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|24|NM|8026^CHCM^CAT_350228||32.3|g / dl|32-36||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|25|NM|8029^RDW^CAT_350228||17|%|11.5-14.5|H|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|26|NM|8035^Plaquetas^CAT_350228||274|10^3/uL|120-400||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|27|NM|8038^Volumen plaquetar medio^CAT_350228||8.8|fl|7.2-11.1||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|28|NM|8044^Leucocitos^CAT_350228||9|10^3/uL|4-12||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|29|NM|8053^Neutrofilos %^CAT_350228||86.7|%|36-66|H|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|30|NM|8047^Linfocitos %^CAT_350228||6.4|%|24-44|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|31|NM|8028^Monocitos %^CAT_350228||4.8|%|5-11|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|32|NM|8057^Eosinofilos %^CAT_350228||1.9|%|0-7||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|33|NM|8031^Basofilos %^CAT_350228||0.2|%|0-1.5||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|34|NM|8325^FA Neutr?ilos^CAT_350228||7.8|10^3/?L|1.9-8||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|35|NM|9410^FA Linfocitos^CAT_350228||0.6|10^3/?L|.9-5.2|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|36|NM|8319^FA Monocitos^CAT_350228||0.4|10^3/?L|.16-1||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|37|NM|8245^FA Eosin?ilos^CAT_350228||0.2|10^3/?L|0-.8||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|38|NM|8219^FA Bas?ilos^CAT_350228||0|10^3/?L|0-.2||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|39|NM|8073^TP^CAT_350228||12|seg|9-14||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|40|NM|8076^I. QUICK^CAT_350228||92|%|80-130||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|41|NM|8082^Fibrinogeno^CAT_350228||709|mg/dl|200-400|H|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|42|NM|8085^Patron normal APTT^CAT_350228||31|seg|||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|43|NM|8088^APTT^CAT_350228||35.4|seg|25.6-38.4||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|44|ST|9101^Coagulacion^CAT_350228||*||||||F|||20231024065700^^20231024065749||^^Validado por el sistema^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|45|NM|9102^INR^CAT_350228||1.05||||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|46|NM|9170^Patron Normal TP^CAT_350228||11.4|seg|||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|47|NM|9191^APTT Ratio^CAT_350228||1.06||||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| OBX|48|ST|9950^Comentarios AP^CAT_350228||COMENTARIO||||||F|||20231024065700^^20231024065749||^^Validado por el sistema^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| NTE|1||Sospecha Diagn?tica (m?. 50 caracteres):.@@@Otras Pruebas:@@@Datos cl?icos de inter?:@@@Indicaciones-Protocolo AP:|O3K The needed ORC + OBR + TQ1 + OBX output would be: MSH|^~\&|ROCHE|350228|CARESUITE|1419|20231024083456||ORU^R01^ORU_R01|6677130896271347|P|2.5|||AL|AL PID|1||ABC^^^HIS^PI^^^^ABC&&99CENTRO_SCS||ABC^ABC||ABC|M|||| PV1|1|U|UVI08|R||||||MIV^Medicina Intensiva^99SVC|||||||||| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|16288^�ndice lipemia. (Sangre: suero)^CUP||8||0-14||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|16289^�ndice hem�lisis. (Sangre: suero)^CUP||1||0-40||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|16290^�ndice ictericia. (Sangre: suero)^CUP||1||0-30||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|00809^Glucosa. (Sangre)^CUP||112|mg / dl|70-110|H|||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01467^Urea. (Sangre)^CUP||39.4|mg / dl|10-50||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|00560^Creatinina. (Sangre)^CUP||0.902|mg / dl|.67-1.17||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|00723^Filtrado glomerular (GFR) estimado (MDRD 4)^CUP||84.20710618|mL/min|60-999||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|00061^�cido �rico (Urato). (Sangre)^CUP||3.33|mg / dl|3-7||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01269^Prote�nas totales. (Sangre)^CUP||6.69|g / dl|6.4-8.3||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01353^Sodio. (Sangre)^CUP||141.6|meq/l|135-145||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01204^Potasio. (Sangre)^CUP||3.87|meq/l|3.5-5.2||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|00420^Cloro. (Sangre)^CUP||104.6|meq/l|94-110||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|00761^Fosfato. (Sangre)^CUP||3.3|mg / dl|2.7-4.5||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|00562^Creatinquinasa (CK). (Sangre)^CUP||186|U/L|20-200||||F|||20231024065700^^20231024082454||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01458^Troponina T. (Sangre)^CUP||657|ng/L|3-14|H|||F|||20231024065700^^20231024083343||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01219^Procalcitonina. (Sangre)^CUP||2.46|ng/mL|.1|H|||F|||20231024065700^^20231024083343||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01263^Prote�na C Reactiva. (Sangre)^CUP||5.07|mg / dl|0-.5|H|||F|||20231024065700^^20231024083343||TFG^^Taiomara Fernandez^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|ST|01984^Hemograma. (Sangre)^CUP||*||||||F|||20231024065700^^20231024065749||^^Validado por el sistema^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01987^Hemat�es (RBC). (Sangre)^CUP||4.16|10^6/?L|4.4-5.9|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01989^Hemoglobina (HGB). (Sangre)^CUP||11.4|g / dl|11-17.5||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01988^Hematocrito (HCT). (Sangre)^CUP||35.4|%|40-54|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01994^Volumen corpuscular medio (VCM). (Sangre)^CUP||85|fl|80-99||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01986^Hemoglobina corpuscular media (HCM). (Sangre)^CUP||27.5|pg|26-32||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01985^Concentraci�n hemoglobina corpuscular media (CHCM) . (Sangre) ^CUP||32.3|g / dl|32-36||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01558^Amplitud distribuci�n del volumen de los eritrocitos (ADE o RDW). (Sangre)^CUP||17|%|11.5-14.5|H|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01992^Plaquetas (PLT). (Sangre)^CUP||274|10^3/uL|120-400||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|04515^Volumen plaquetar medio (VPM). (Sangre)^CUP||8.8|fl|7.2-11.1||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01990^Leucocitos (WBC). (Sangre)^CUP||9|10^3/uL|4-12||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02140^Neutr�filos absolutos (contaje autom�tico). (Sangre)^CUP||86.7|%|36-66|H|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02032^Linfocitos absolutos (contaje manual). (Sangre)^CUP||6.4|%|24-44|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02078^Monocitos absolutos (contaje autom�tico). (Sangre)^CUP||4.8|%|5-11|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01865^Eosin�filos absolutos (contaje autom�tico). (Sangre)^CUP||1.9|%|0-7||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01660^Bas�filos absolutos (contaje autom�tico). (Sangre)^CUP||0.2|%|0-1.5||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02140^Neutr�filos absolutos (contaje autom�tico). (Sangre)^CUP||7.8|10^3/?L|1.9-8||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02048^Linfocitos absolutos (contaje autom�tico). (Sangre)^CUP||0.6|10^3/?L|.9-5.2|L|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02078^Monocitos absolutos (contaje autom�tico). (Sangre)^CUP||0.4|10^3/?L|.16-1||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01865^Eosin�filos absolutos (contaje autom�tico). (Sangre)^CUP||0.2|10^3/?L|0-.8||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01660^Bas�filos absolutos (contaje autom�tico). (Sangre)^CUP||0|10^3/?L|0-.2||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02203^Tiempo de protrombina (TP) segundos. (Sangre: plasma)^CUP||12|seg|9-14||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02199^Actividad de Protrombina (%) (�ndice de Quick). (Sangre: plasma)^CUP||92|%|80-130||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|01951^Fibrin�geno Clauss. (Sangre: plasma)^CUP||709|mg/dl|200-400|H|||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|10683^CONTROL: Tiempo de tromboplastina parcial activada (TTPA)^CUP||31|seg|||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02433^Tiempo de tromboplastina parcial activada (TTPA). (Sangre)^CUP||35.4|seg|25.6-38.4||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|ST|01874^Estudio coagulaci�n. (Sangre)^CUP||*||||||F|||20231024065700^^20231024065749||^^Validado por el sistema^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|04510^INR (punci�n venosa). (Sangre: plasma)^CUP||1.05||||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|10221^CONTROL: Actividad tiempo protrombina (TP)^CUP||11.4|seg|||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|9^Hematolog�a^CUP^HEL^Hematolog�a Laboratorio^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|NM|02432^Tiempo de Tromboplastina Parcial Activada (TTPA) ratio. (Sangre)^CUP||1.06||||||F|||20231024065700^^20231024083400||~SYSValDaemon~^^System^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| ORC|SC|1024937532^SISTEMAEXTERNO|1024937532^LAB350228O3K||CM||||20231024083456|||maroaje^^^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|||20231024065700||MIV^Medicina Intensiva^99SVC||||HOSPITALIZADOS^^^^^^^FI^^^^1|| OBR|1|1024937532^SISTEMAEXTERNO|1024937532^LAB035228O3K|8^Bioqu�mica^CUP^ACL^An�lisis Cl�nicos^CUP|||20231024065700|||||||20231024065700||MIV^Medicina Intensiva|||^^^|^^^^|^^^^^|20231024083405||.|CM|||||||Taiomara Fernandez^^20231024082454 TQ1|1||||||||R^Normal^HL70485 OBX|1|ST|16329^COMENTARIO: Atenci�n Primaria ^CUP||COMENTARIO||||||F|||20231024065700^^20231024065749||^^Validado por el sistema^^^^^^OMEGA^^^^PN^^^^^^^^^350228&&99CENTROS_SCS|| NTE|1||Sospecha Diagn?tica (m?. 50 caracteres):.@@@Otras Pruebas:@@@Datos cl?icos de inter?:@@@Indicaciones-Protocolo AP:|O3K How could we achieve this, given the two variants of the transformation being exposed as our fist post? How could we express the needed behaviour throught Data Transformation Language? Thanks for your time, reading, asnwering, and thinking about this.
go to post Yone Moreno · Oct 16, 2023 Thanks for your help @Luis Angel Pérez Ramos We have faced the second option, to implement the OnResponse() method in the CHild DICOM Process. We have written: Method OnResponse(request As %Library.Persistent, ByRef response As %Library.Persistent, callrequest As %Library.Persistent, callresponse As %Library.Persistent, pCompletionKey As %String) As %Status { $$$LOGWARNING("OnResponse") $$$LOGWARNING("request.%ClassName(): "_request.%ClassName()) ;$$$LOGWARNING("response.%ClassName(): "_response.%ClassName()) $$$LOGWARNING("callrequest.%ClassName(): "_callrequest.%ClassName()) $$$LOGWARNING("callresponse.%ClassName(): "_callresponse.%ClassName()) if (callresponse.%ClassName() = "consultarEstudiosDatosPacienteVNAResponse"){ set callresponse = ..respuestaConsultaEstudios Quit $$$OK } Quit '$$$OK } It outputs: request.%ClassName(): Document callrequest.%ClassName(): Start callresponse.%ClassName(): Ack It is being called after PrivateSession.Message.Ack. However, we do not know how to handle it properly, to make it continue execution, untils it reaches the final Ens.Response and then just only send it if it is not NULL. Currently the Visual Trace: It shows: [11] DICOM.Document the C-FIND request [12] PrivateSession.Message.Start [13] PrivateSession.Message.Ack [14--17] The LOGS [19] ERROR <Ens>ErrBPTerminated: Finalizando BP Procesos.DICOM.ConsultarEstudiosMedianteFind # debido a un error: ERROR #00: (sin descripción de error)> ERROR #00: (sin descripción de error) We do not know how to implement the OnResponse() properly because it forces us to reply with a %Status, and either if we respond $$$OK or '$$$OK , it halts execution, and replies with a NULL error, or with a NULL. Furthermore, there are not examples of OnResponse() being implemented in the parent internal class: EnsLib.DICOM.Process How could we continue beyond this point? Thanks for your help.
go to post Yone Moreno · Oct 16, 2023 Thank you @Luis Angel Pérez Ramos , for your time, and deep replies. We have removed the pOutput in the Child DICOM Process. In addition, as suggested, we have added inside OnMessage's ending the following: ; 16 10 2023 responder con el listado de estudiosset tSC = ..%responseSet(..respuestaConsultaEstudios)$$$LOGALERT("tSC: "_tSC)$$$LOGALERT($System.Status.GetErrorText(tSC))Quit $$$OK Being the complete Bussines Process ConsultarEstudiosMedianteFind's OnMessage() method as we can read here: /// Messages received here are instances of EnsLib.DICOM.Document sent to this /// process by the service or operation config items. In this demo, the process is ever /// in one of two states, the Operation is connected or not. Method OnMessage(pSourceConfigName As %String, pInput As %Library.Persistent) As %Status { #dim tSC As %Status = $$$OK #dim tMsgType As %String #dim tFindRequest As EnsLib.DICOM.Document do { #; If its a document sent from the service If pSourceConfigName'=..OperationDuplexName { set ..respuestaConsultaEstudios = ##class(Mensajes.Response.DICOM.consultarEstudiosDatosPacienteVNAResponse).%New() set ..respuestaConsultaEstudios.patients = ##class(EsquemasDatos.DICOM.Patient).%New() #; If the operation has not been connected yet If ..CurrentState="OperationNotConnected" { #; We are in the process of establishing the connection to the operation, #; Keep hold of the incoming document Set ..DocumentFromService=pInput Set tSC=..EstablishAssociation(..OperationDuplexName) } elseif ..CurrentState="OperationConnected" { #; We can forward the document to the operation Set tSC=..SendRequestAsync(..OperationDuplexName,..DocumentFromService,0) } } elseif pSourceConfigName=..OperationDuplexName { #; We have received a document from the operation Set tMsgType=pInput.GetValueAt("CommandSet.CommandField",,.tSC) If $$$ISERR(tSC) Quit #; Should only EVER get a C-FIND-RSP $$$ASSERT(tMsgType="C-FIND-RSP") #; TODO: Do Something With the Find Response(s) if pInput.GetValueAt("CommandSet.Status",,.tSC)=0 { Set tSC=..ReleaseAssociation(..OperationDuplexName) $$$LOGINFO("Antes quit Release") quit $$$LOGINFO("Después quit Release") } else { ; Escribimos 11 / 10 / 2023 para responder con los datos de cada estudio DICOM remitido por Sistema Destino set study = ##class(EsquemasDatos.DICOM.Study).%New() set study.accessionNumber = pInput.GetValueAt("DataSet.AccessionNumber",,.tSC) if $$$ISERR(tSC) quit set study.description = pInput.GetValueAt("DataSet.StudyDescription",,.tSC) if $$$ISERR(tSC) quit set study.modality = pInput.GetValueAt("DataSet.ModalitiesInStudy",,.tSC) if $$$ISERR(tSC) quit set study.type = pInput.GetValueAt("DataSet.ImageType",,.tSC) if $$$ISERR(tSC) quit set study.data = pInput.GetValueAt("DataSet.StudyDate",,.tSC) if $$$ISERR(tSC) quit do ..respuestaConsultaEstudios.patients.studies.Insert(study) ; Añadimos 11 / 10 / 2023 para enviar la respuesta DICOM al Enturador Padre ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",pInput,0) ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",study,0) ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",QueryRsp,0) ;Set tSC=..SendRequestSync("EnrutadorConsultarEstudiosVNAv01r00",QueryRsp,0) } } } while (0) ;set pOutput = ..respuestaConsultaEstudios ;Quit pOutput ; 16 10 2023 responder con el listado de estudios set tSC = ..%responseSet(..respuestaConsultaEstudios) $$$LOGALERT("tSC: "_tSC) $$$LOGALERT($System.Status.GetErrorText(tSC)) Quit $$$OK ;$$$LOGINFO("Antes Quit tSC") Quit tSC ;$$$LOGINFO("Despues Quit tSC") } After compiling, we observe the Visual Trace, where both yellow LOGALERTS are being printed various times: Being the interesting part, before the NULL reply is being forwarded from the Child to the Parent, it continues happening, we do observe the NULL response: Besides, we have desactivated the lines mentioned inside OnMessage()'s method, and we have added them inside OnAssociationReleased() as we can see below: Method OnAssociationReleased(pSourceConfigName As %String, pInput As EnsLib.DICOM.Notify.Released) As %Status { #dim tSC As %Status = $$$OK #; The association between this process and the operation has been released, so we are now #; not connected to the operation Set ..CurrentState="OperationNotConnected" ; Añadido el LOGINFO 13 10 2023 para depurar la llamada NULL espúrea que realiza este BP al Proceso Padre $$$LOGINFO("OnAssociationReleased antes de llamar al BP Padre, ..respuestaConsultaEstudios: "_..respuestaConsultaEstudios) ; 16 10 2023 responder con el listado de estudios set tSC = ..%responseSet(..respuestaConsultaEstudios) $$$LOGALERT("tSC: "_tSC) $$$LOGALERT($System.Status.GetErrorText(tSC)) Quit $$$OK ; Añadimos 11 10 2023 ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",..respuestaConsultaEstudios,0) Quit tSC } After that change, we have tried again, and we see this new Visual Trace, where the important part, is that now, the LOGALERTS are only being displayed BEFORE the NULL response is being replied: To summarize, even if we add the following lines to OnMessage() or to OnAssociationReleased(): ; 16 10 2023 responder con el listado de estudiosset tSC = ..%responseSet(..respuestaConsultaEstudios)$$$LOGALERT("tSC: "_tSC)$$$LOGALERT($System.Status.GetErrorText(tSC))Quit $$$OK we still having that strange NULL response that we do not understand. How could we further understand / debug this issue? Thanks for your help and time and replies.
go to post Yone Moreno · Oct 16, 2023 Thanks @Luis Angel Pérez Ramos for your help. How could we change our Parent Bussiness Process EnrutadorConsultarEstudiosVNAv01r00 when it calls its Child DICOM Process ConsultarEstudiosMedianteFind to add the variable by reference? We currently <call> it as follows: <scope xpos='335' ypos='1600' xend='335' yend='2150' > <code name='C002 a Consulta DICOM' xpos='335' ypos='1700' > <![CDATA[ set context.consultaDICOM = context.responseTarjetaC002ToFindDicom(context.responseTarjetaC002)]]> </code> <call name='ConsultarEstudiosFind' target='Procesos.DICOM.ConsultarEstudiosMedianteFind' async='0' xpos='335' ypos='1800' > <request type='Ens.Request' > <assign property="callrequest" value="context.consultaDICOM" action="set" /> </request> <response type='Ens.Response' > <assign property="context.respuestaDICOM" value="callresponse" action="set" /> </response> </call> <code name='LOG' xpos='335' ypos='1900' > <![CDATA[ $$$LOGWARNING("Despues del call ConsultarEstudiosFind") $$$LOGINFO(context.respuestaDICOM) $$$LOGINFO(context.respuestaDICOM.patients.studies.GetAt(1).description)]]> </code> <faulthandlers> <catchall xpos='335' ypos='2000' xend='200' yend='350' > <code name='LOG ERROR' xpos='200' ypos='250' > <![CDATA[ $$$LOGERROR($System.Status.GetErrorText(context.%LastError))]]> </code> </catchall> </faulthandlers> </scope> Which visually is: In addition our Child DICOM Process, has its method's signature as follows, where we have added the Output pOutput variable: Method OnMessage(pSourceConfigName As %String, pInput As %Library.Persistent, Output pOutput As Ens.Response) As %Status Thanks for your time, help, and replies.
go to post Yone Moreno · Oct 13, 2023 Thanks @Luis Angel Pérez Ramos . Now we have changed the method's signature to add the pOutput; as: Method OnMessage(pSourceConfigName As %String, pInput As %Library.Persistent, Output pOutput As Ens.Response) As %Status Then, we have commented (disable) the SendRequestAsync inside OnAssociationReleased(), as: ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",..respuestaConsultaEstudios,0) Finally, we have set our Property which holds the studies' list as follows, inside the OnMessage(), at the ending part of this method: set pOutput = ..respuestaConsultaEstudios Then, when we test it, it just shows us the "NULL", response without the one we do want: Why if we disable the ..SendRequestAsync , our child DICOM Process does NOT reply to the Parent visual Process, with the desired Ens.Response? Why it justs responds with a "NULL" Ens.Response? Thanks again for your time, help, and for reading and writting to us.
go to post Yone Moreno · Oct 13, 2023 Thanks @Shanshan Yu It worked fine. The line which you have written does it take the Query Parameter as needed and as exepected: set pPatientId = pInput.Attributes("Params","patientId",1) Thanks for your help.
go to post Yone Moreno · Oct 13, 2023 Thanks @Luis Angel Pérez Ramos for your tiem and help. First we tried to declare the return type instead of being %Status, being Ens.Response; however it does not allow it: Compilando clase Procesos.DICOM.ConsultarEstudiosMedianteFindERROR #5478: Error de firma de palabra clave en Procesos.DICOM.ConsultarEstudiosMedianteFind:Method:OnMessage, 'ReturnType' debe ser '%Library.Status' o su subclase > ERROR #5030: Se produjo un error mientras se compilaba la clase Procesos.DICOM.ConsultarEstudiosMedianteFind On the other hand, if we keep the return type as %Status, and we just declare an Output vairable pOutput as Ens.Response: Method OnMessage(pSourceConfigName As %String, pInput As %Library.Persistent, Output pOutput As Ens.Response) As %Status And we disable the line inside OnAssociationReleased() which makes the ..SendRequestAsync Method OnAssociationReleased(pSourceConfigName As %String, pInput As EnsLib.DICOM.Notify.Released) As %Status { #dim tSC As %Status = $$$OK #; The association between this process and the operation has been released, so we are now #; not connected to the operation Set ..CurrentState="OperationNotConnected" ; Añadido el LOGINFO 13 10 2023 para depurar la llamada NULL espúrea que realiza este BP al Proceso Padre $$$LOGINFO("OnAssociationReleased antes de llamar al BP Padre, ..respuestaConsultaEstudios: "_..respuestaConsultaEstudios) ; Añadimos 11 10 2023 ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",..respuestaConsultaEstudios,0) Quit tSC } And, we comment the Quit tSC inside the OnMessage() method, and we put a Quit pOutput as follows: /// Messages received here are instances of EnsLib.DICOM.Document sent to this /// process by the service or operation config items. In this demo, the process is ever /// in one of two states, the Operation is connected or not. Method OnMessage(pSourceConfigName As %String, pInput As %Library.Persistent, Output pOutput As Ens.Response) As %Status { #dim tSC As %Status = $$$OK #dim tMsgType As %String #dim tFindRequest As EnsLib.DICOM.Document do { #; If its a document sent from the service If pSourceConfigName'=..OperationDuplexName { set ..respuestaConsultaEstudios = ##class(Mensajes.Response.DICOM.consultarEstudiosDatosPacienteVNAResponse).%New() set ..respuestaConsultaEstudios.patients = ##class(EsquemasDatos.DICOM.Patient).%New() #; If the operation has not been connected yet If ..CurrentState="OperationNotConnected" { #; We are in the process of establishing the connection to the operation, #; Keep hold of the incoming document Set ..DocumentFromService=pInput Set tSC=..EstablishAssociation(..OperationDuplexName) } elseif ..CurrentState="OperationConnected" { #; We can forward the document to the operation Set tSC=..SendRequestAsync(..OperationDuplexName,..DocumentFromService,0) } } elseif pSourceConfigName=..OperationDuplexName { #; We have received a document from the operation Set tMsgType=pInput.GetValueAt("CommandSet.CommandField",,.tSC) If $$$ISERR(tSC) Quit #; Should only EVER get a C-FIND-RSP $$$ASSERT(tMsgType="C-FIND-RSP") #; TODO: Do Something With the Find Response(s) if pInput.GetValueAt("CommandSet.Status",,.tSC)=0 { Set tSC=..ReleaseAssociation(..OperationDuplexName) quit } else { ; Escribimos 11 / 10 / 2023 para responder con los datos de cada estudio DICOM remitido por Sistema Destino set study = ##class(EsquemasDatos.DICOM.Study).%New() set study.accessionNumber = pInput.GetValueAt("DataSet.AccessionNumber",,.tSC) if $$$ISERR(tSC) quit set study.description = pInput.GetValueAt("DataSet.StudyDescription",,.tSC) if $$$ISERR(tSC) quit set study.modality = pInput.GetValueAt("DataSet.ModalitiesInStudy",,.tSC) if $$$ISERR(tSC) quit set study.type = pInput.GetValueAt("DataSet.ImageType",,.tSC) if $$$ISERR(tSC) quit set study.data = pInput.GetValueAt("DataSet.StudyDate",,.tSC) if $$$ISERR(tSC) quit do ..respuestaConsultaEstudios.patients.studies.Insert(study) ; Añadimos 11 / 10 / 2023 para enviar la respuesta DICOM al Enturador Padre ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",pInput,0) ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",study,0) ;Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",QueryRsp,0) ;Set tSC=..SendRequestSync("EnrutadorConsultarEstudiosVNAv01r00",QueryRsp,0) } } } while (0) set pOutput = ..respuestaConsultaEstudios Quit pOutput ;Quit tSC } We observe at the Visual Trace, just only one response, which is the NULL one at step [17]: I still not knowing why it happens, why could it happen? Could you help us please? Thanks for your time and for your help, and even more I am really grateful for your explanations about this issue. Thank you. "Collaboration and helping others with their programming questions isn't just an act of kindness; it's the most powerful way to learn and to help ourselves grow in this ever-evolving field." - Ada Lovelace
go to post Yone Moreno · Oct 13, 2023 Thanks @Luis Angel Pérez Ramos for your reply and your help, thanks. We have added it as: Method OnAssociationReleased(pSourceConfigName As %String, pInput As EnsLib.DICOM.Notify.Released) As %Status { #dim tSC As %Status = $$$OK #; The association between this process and the operation has been released, so we are now #; not connected to the operation Set ..CurrentState="OperationNotConnected" ; Añadido el LOGINFO 13 10 2023 para depurar la llamada NULL espúrea que realiza este BP al Proceso Padre $$$LOGINFO("OnAssociationReleased antes de llamar al BP Padre, ..respuestaConsultaEstudios: "_..respuestaConsultaEstudios) ; Añadimos 11 10 2023 Set tSC=..SendRequestAsync("EnrutadorConsultarEstudiosVNAv01r00",..respuestaConsultaEstudios,0) Quit tSC } However it does only prints it once, and we do not understand why there is a NULL response being replied from this DICOM Process to the Parent Process: Please; Could you help us with this issue? Again, thank you for your time, help, replies, and for being supporting us. In addittion, a sentence which is quite interesting: "Collaboration is not just a buzzword; it's the very heart of what makes programming great. Helping others with their technical questions is not only the best way to learn but also a profound way to help ourselves." - Grace Hopper This sentences shows us both points: Learning through helping: The statement asserts that when you help others with their technical queries, you, in turn, gain knowledge and experience. Teaching or explaining something to someone else often requires a deeper understanding of the subject, which can enhance your own learning. Helping is self-beneficial: Lastly, the sentence suggests that helping others is not just an altruistic act but also a means of self-improvement. By aiding others, you not only contribute to the community but also grow as a programmer and problem solver. It's a win-win situation where both parties benefit.
go to post Yone Moreno · Oct 11, 2023 Thanks for your time and help. I have tried you approach @Luis Angel Pérez Ramos and @Shanshan Yu and @Ashok Kumar , we have written the following code for our REST Service, following your advices and suggestions: /// Ahora se accede mediante: /// https://host:port/api/studies?patientId=XXXX111111111111 /// Class Servicios.REST.DICOM.ConsultarEstudiosVNAv01r00 Extends (%CSP.REST, EnsLib.REST.Service, Ens.BusinessService) { Parameter ADAPTER = "EnsLib.HTTP.InboundAdapter"; Parameter EnsServicePrefix = "|/api"; XData UrlMap { <Routes> <Route Url="/:studies" Method="GET" Call="consultarEstudiosDatosPaciente"/> </Routes> } /// un JSON con el listado de estudios que tiene el paciente + los datos demográficos del paciente /// (nombre, sexo, f.nacimiento, etc...) Method consultarEstudiosDatosPaciente(pInput As %Stream.Object, Output pOutput As %Stream.Object, pStudies As %String) As %Status { $$$LOGALERT("Entra en consultarEstudiosDatosPaciente") Set pOutput = ##class(%GlobalBinaryStream).%New() set claseAux = ##class(%ZEN.Auxiliary.jsonProvider).%New() $$$LOGWARNING("Antes de pPatientId") set pPatientId = %request.Get("patientId") $$$LOGINFO("pStudies: "_pStudies) $$$LOGINFO("pPatientId: "_pPatientId) set objetoEntrada = ##class(Mensajes.Request.DICOM.consultarEstudiosDatosPacienteVNARequest).%New() set objetoEntrada.identificadorPaciente = pPatientId set tSC = claseAux.%ConvertJSONToObject(.req,"Mensajes.Request.DICOM.consultarEstudiosDatosPacienteVNARequest",.objetoEntrada,1) set tSC = ..SendRequestSync("EnrutadorConsultarEstudiosVNAv01r00",objetoEntrada,.objetoSalida) set tSC = claseAux.%WriteJSONStreamFromObject(.pOutput,.objetoSalida,,,,"aeloqtuw") Do:$$$ISOK(tSC) pOutput.SetAttribute("Content-Type","application/json") do pOutput.SetAttribute("Access-Control-Allow-Origin","*") do pOutput.SetAttribute("Access-Control-Allow-Credentials","true") do pOutput.SetAttribute("Access-Control-Allow-Methods","GET") do pOutput.SetAttribute("Access-Control-Allow-Headers","request,Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers") Quit tSC Quit $$$OK } } Where the important part is that we have written the XData UrlMap Route Url as you have written:XData UrlMap { <Routes> <Route Url="/:studies" Method="GET" Call="consultarEstudiosDatosPaciente"/> </Routes> } In addition we have also added to get the patientId from %request as: set pPatientId = %request.Get("patientId") However, unfortunately, it only shows the logs before: set pPatientId = %request.Get("patientId") So then, if we observe the logs it shows us: Tipo Hora Texto Id. Info 2023-10-11 06:58:03.070 Closing TCP Connection Job 3577763 Info 2023-10-11 06:58:03.069 Disconnecting from 10102<-ABC:XYZ/SSL=CBA 3577762 Warning 2023-10-11 06:58:03.067 Antes de pPatientId 3577761 Alert 2023-10-11 06:58:03.066 Entra en consultarEstudiosDatosPaciente Why it fails when tries to retrieve the patientId from %request object via the Get method? Besides, we have added "%CSP.REST" in the extends' class list, because w ehave read that %request variable is a special one inside %CSP.REST, as it states in the documentation below: https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls... How could we really retrieve the patientId as query parameter? How could we fix this issue? Agan thanks for your time, help, and answers: How could we debug and fix / improve this issue to get the Query Parameter as needed?
go to post Yone Moreno · Oct 10, 2023 Again thanks for your time reading and answering this question, that could be repeated, however I think it is needed. Thanks:
go to post Yone Moreno · Sep 12, 2023 One question, why old HealtShare versions did not have this automatic refresh for BPL and DTL? We have used previous version of HealthShare, earlier than 2020, I think that it was 2017, and it did not have automatic refresh for DTLs and BPLs in the Studio. Maybe I am wrong but I remember that previous version, could keep BPLs and DTLs without refreshing every X minutes. 🤔💭
go to post Yone Moreno · Sep 11, 2023 Hi Luis Angel, I hope this message finds you well. I wanted to take a moment to express my sincere appreciation for your insightful post regarding Business Process (BPL) and Data Transformation Language (DTL) web pages' automatic refresh. Your observation about the common frustration among both new and experienced users with regards to automatic page refreshes resonated deeply with me. It's an issue that has often led to frustration and lost work, affecting the overall experience of InterSystems technology users. Your suggestion of implementing an autosave feature is not only practical but also a potential game-changer in addressing this problem. It's a solution that has the power to improve user experience and reduce the negative sentiment associated with such incidents. I believe it would greatly benefit both novice and veteran developers alike. I've taken the liberty of visiting the idea you shared on the InterSystems portal (https://ideas.intersystems.com/ideas/DPI-I-452) and voted in favor of it. It's a fantastic initiative, and I encourage others to do the same. Thank you for taking the initiative to propose this idea and for actively working towards enhancing the InterSystems technology ecosystem. Your contribution is valued, and I look forward to seeing how this idea evolves and potentially becomes a reality. Once again, thank you for your great idea, and I'm excited about the positive impact it could have. Best regards, and again, thanks Luis Angel.
go to post Yone Moreno · Aug 21, 2023 Thanks Elijah Cotterrell for your time explaining how it works and how it can be achieved. It worked as you described. Thanks again for your time and answer it was brilliant. Greetings.
go to post Yone Moreno · Jun 5, 2023 Could you help us? We have previously tried to set directly from the visual Data Transformation Language editor to set both last and nextUpdate time as follows: Class Transformaciones.RESNS.FiltrarFechasyMotivoNoDispensacionAntesDepurarTransf06052023 Extends Ens.DataTransformDTL [ DependsOn = Mensajes.Response.RESNS.RespondingGatewayCrossGatewayRetrieveResponse ] { Parameter IGNOREMISSINGSOURCE = 1; Parameter REPORTERRORS = 1; Parameter TREATEMPTYREPEATINGFIELDASNULL = 0; XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ] { <transform sourceClass='Mensajes.Response.RESNS.RespondingGatewayCrossGatewayRetrieveResponse' targetClass='Mensajes.Response.RESNS.RespondingGatewayCrossGatewayRetrieveResponse' create='new' language='objectscript' > <assign value='source.RegistryResponse' property='target.RegistryResponse' action='set' /> <assign value='source.DocumentResponse' property='target.DocumentResponse' action='set' /> <assign value='source.Solicitante' property='target.Solicitante' action='set' /> <assign value='source.Action' property='target.Action' action='set' /> <assign value='source.MessageId' property='target.MessageId' action='set' /> <assign value='source.RelatesTo' property='target.RelatesTo' action='set' /> <assign value='source.paciente' property='target.paciente' action='set' /> <foreach property='source.RegistryObjectList.ExtrinsicObject()' key='k1' > <foreach property='source.RegistryObjectList.ExtrinsicObject.(k1).Slot()' key='k2' > <if condition='( source.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).name = "lastUpdateTime" )' > <true> <code> <![CDATA[ $$$LOGALERT("Entra lastUpdateTime")]]> </code> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).ValueList.Value.(1)' property='lastUpdateTime' action='set' /> <code> <![CDATA[ $$$LOGINFO("lastUpdateTime: "_lastUpdateTime)]]> </code> <assign value='lastUpdateTime' property='target.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).ValueList.Value.(1)' action='set' disabled='1' /> <assign value='lastUpdateTime' property='target.RegistryObjectList.ExtrinsicObject.(1).Slot.(1)' action='set' /> <code> <![CDATA[ $$$LOGASSERT("Después de set lastUpdateTime: "_lastUpdateTime)]]> </code> </true> </if> <if condition='( source.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).name = "urn:es:ms:ereceta:names:md:nextUpdateTime" )' > <true> <code> <![CDATA[ $$$LOGWARNING("Entra nextUpdateTime")]]> </code> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).ValueList.Value.(1)' property='nextUpdateTime' action='set' /> <code> <![CDATA[ $$$LOGINFO("nextUpdateTime: "_nextUpdateTime)]]> </code> <assign value='nextUpdateTime' property='target.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).ValueList.Value.(1)' action='set' disabled='1' /> <assign value='nextUpdateTime' property='target.RegistryObjectList.ExtrinsicObject.(2).Slot.(1)' action='set' /> <code> <![CDATA[ $$$LOGASSERT("Después de set nextUpdateTime: "_nextUpdateTime)]]> </code> </true> </if> </foreach> </foreach> </transform> } } However, the previous attempt did not work because of it does assign lastUpdateTime and nextUpdateTime but it does not put them in the target message... Currently we have developed and tested this other approach and it does work as intendeed, however; how could we simplify and/or make it more understandable? Class Transformaciones.RESNS.FiltrarFechasyMotivoNoDispensacion Extends Ens.DataTransformDTL [ DependsOn = Mensajes.Response.RESNS.RespondingGatewayCrossGatewayRetrieveResponse ] { Parameter IGNOREMISSINGSOURCE = 1; Parameter REPORTERRORS = 1; Parameter TREATEMPTYREPEATINGFIELDASNULL = 0; XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ] { <transform sourceClass='Mensajes.Response.RESNS.RespondingGatewayCrossGatewayRetrieveResponse' targetClass='Mensajes.Response.RESNS.RespondingGatewayCrossGatewayRetrieveResponse' create='existing' language='objectscript' > <assign value='##class(EsquemasDatos.RESNS.rim.RegistryObjectListType).%New()' property='target.RegistryObjectList' action='set' /> <assign value='0' property='indiceExtrinsicObjectCreados' action='set' /> <assign value='0' property='indiceSlotsCreados' action='set' /> <foreach property='source.RegistryObjectList.ExtrinsicObject()' key='k1' > <foreach property='source.RegistryObjectList.ExtrinsicObject.(k1).Slot()' key='k2' > <if condition='( source.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).name = "lastUpdateTime" )' > <true> <code> <![CDATA[ $$$LOGALERT("Entra lastUpdateTime")]]> </code> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).ValueList.Value.(1)' property='lastUpdateTime' action='set' /> <code> <![CDATA[ $$$LOGINFO("lastUpdateTime: "_lastUpdateTime)]]> </code> <code> <annotation>Creamos Slot lastUpdateTime</annotation> <![CDATA[ set extrinsicObject = ##class(EsquemasDatos.RESNS.rim.ExtrinsicObjectType).%New() do target.RegistryObjectList.ExtrinsicObject.Insert(extrinsicObject) set indiceExtrinsicObjectCreados = target.RegistryObjectList.ExtrinsicObject.Count() set slot = ##class(EsquemasDatos.RESNS.rim.SlotType1).%New() set slot.name = "lastUpdateTime" do target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.Insert(slot) set indiceSlotsCreados = target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.Count() set valueList = ##class(EsquemasDatos.RESNS.rim.ValueListType).%New() set target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.GetAt(indiceSlotsCreados).ValueList = valueList do target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.GetAt(indiceSlotsCreados).ValueList.Value.Insert(lastUpdateTime) ]]> </code> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).id' property='target.RegistryObjectList.ExtrinsicObject.(indiceExtrinsicObjectCreados).id' action='set' /> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).home' property='target.RegistryObjectList.ExtrinsicObject.(indiceExtrinsicObjectCreados).home' action='set' /> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).lid' property='target.RegistryObjectList.ExtrinsicObject.(indiceExtrinsicObjectCreados).lid' action='set' /> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).objectType' property='target.RegistryObjectList.ExtrinsicObject.(indiceExtrinsicObjectCreados).objectType' action='set' /> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).status' property='target.RegistryObjectList.ExtrinsicObject.(indiceExtrinsicObjectCreados).status' action='set' /> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).mimeType' property='target.RegistryObjectList.ExtrinsicObject.(indiceExtrinsicObjectCreados).mimeType' action='set' /> <code> <![CDATA[ $$$LOGASSERT("Después de set lastUpdateTime: "_lastUpdateTime)]]> </code> </true> </if> <if condition='( source.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).name = "urn:es:ms:ereceta:names:md:nextUpdateTime" )' > <true> <code> <![CDATA[ $$$LOGWARNING("Entra nextUpdateTime")]]> </code> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Slot.(k2).ValueList.Value.(1)' property='nextUpdateTime' action='set' > <annotation>Añadimos Slot nextUpdateTime</annotation> </assign> <code> <![CDATA[ $$$LOGINFO("nextUpdateTime: "_nextUpdateTime)]]> </code> <code> <![CDATA[ set slot = ##class(EsquemasDatos.RESNS.rim.SlotType1).%New() set slot.name = "nextUpdateTime" do target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.Insert(slot) set indiceSlotsCreados = target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.Count() set valueList = ##class(EsquemasDatos.RESNS.rim.ValueListType).%New() set target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.GetAt(indiceSlotsCreados).ValueList = valueList do target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.GetAt(indiceSlotsCreados).ValueList.Value.Insert(nextUpdateTime) ]]> </code> <code> <![CDATA[ $$$LOGASSERT("Después de set nextUpdateTime: "_nextUpdateTime)]]> </code> </true> </if> </foreach> </foreach> <foreach property='source.RegistryObjectList.ExtrinsicObject()' key='k1' > <foreach property='source.RegistryObjectList.ExtrinsicObject.(k1).Classification()' key='k3' > <code> <![CDATA[ set node = source.RegistryObjectList.ExtrinsicObject.GetAt(k1).Classification.GetAt(k3).nodeRepresentation]]> </code> <code disabled='1' > <![CDATA[ $$$LOGINFO("node: "_node)]]> </code> <code disabled='1' > <![CDATA[ $$$LOGALERT("$FIND(node, 00): "_$FIND(node, "00"))]]> </code> <if condition='( $FIND(node, "00") = 3)' > <annotation>Si nodeRepresentation empieza por "00"</annotation> <true> <code> <![CDATA[ $$$LOGWARNING("sí empieza por 00 el nodeRepresentation")]]> </code> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Classification.(k3).Slot.(1).ValueList.Value.(1)' property='nodeValue' action='set' /> <code> <![CDATA[ $$$LOGWARNING("nodeValue: "_nodeValue)]]> </code> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Classification.(k3).Name.LocalizedString.(1).value' property='localizedStringValue' action='set' /> <code> <![CDATA[ $$$LOGALERT("localizedStringValue: "_localizedStringValue)]]> </code> <code> <annotation>Generamos y asignamos Slot y Name del motivo NO dispensación</annotation> <![CDATA[ set classification = ##class(EsquemasDatos.RESNS.rim.ClassificationType).%New() do target.RegistryObjectList.ExtrinsicObject.GetAt(k1).Classification.Insert(classification) set indiceClassificationCreados = target.RegistryObjectList.ExtrinsicObject.GetAt(k1).Classification.Count() set slot = ##class(EsquemasDatos.RESNS.rim.SlotType1).%New() set slot.name = "codingScheme" do target.RegistryObjectList.ExtrinsicObject.GetAt(k1).Classification.GetAt(indiceClassificationCreados).Slot.Insert(slot) set indiceSlotsCreados = target.RegistryObjectList.ExtrinsicObject.GetAt(indiceExtrinsicObjectCreados).Slot.Count() set valueList = ##class(EsquemasDatos.RESNS.rim.ValueListType).%New() set target.RegistryObjectList.ExtrinsicObject.GetAt(k1).Classification.GetAt(1).Slot.GetAt(1).ValueList = valueList do target.RegistryObjectList.ExtrinsicObject.GetAt(k1).Classification.GetAt(1).Slot.GetAt(1).ValueList.Value.Insert(nodeValue) set name = ##class(EsquemasDatos.RESNS.rim.InternationalStringType).%New() set localizedString = ##class(EsquemasDatos.RESNS.rim.LocalizedStringType).%New() set localizedString.value = localizedStringValue do name.LocalizedString.Insert(localizedString) set target.RegistryObjectList.ExtrinsicObject.GetAt(k1).Classification.GetAt(1).Name = name ]]> </code> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Classification.(k3).id' property='target.RegistryObjectList.ExtrinsicObject.(k1).Classification.(1).id' action='set' /> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Classification.(k3).classificationScheme' property='target.RegistryObjectList.ExtrinsicObject.(k1).Classification.(1).classificationScheme' action='set' /> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Classification.(k3).classifiedObject' property='target.RegistryObjectList.ExtrinsicObject.(k1).Classification.(1).classifiedObject' action='set' /> <assign value='source.RegistryObjectList.ExtrinsicObject.(k1).Classification.(k3).nodeRepresentation' property='target.RegistryObjectList.ExtrinsicObject.(k1).Classification.(1).nodeRepresentation' action='set' /> </true> </if> </foreach> </foreach> </transform> } } 🤔👁👁🌟🐢🐝🚀👁👁🤔 how could we simplify and/or make it more understandable? Thanks for your replies.
go to post Yone Moreno · May 23, 2023 We would like to share our approach to try to solve this task: First, we add the following lines inside the SOAP Service's method: #dim SAML AS %SAML.Assertion Set SAML = ..SecurityIn.FindElement("Assertion") set writer=##class(%XML.Writer).%New() set status=writer.OutputToString() If $$$ISERR(status) Do $system.OBJ.DisplayError(status) set status=writer.RootObject(SAML) If $$$ISERR(status) Do $system.OBJ.DisplayError(status) set samlString = writer.GetXMLString() $$$LOGASSERT("samlString: "_samlString) set pRequest = ##class(Mensajes.Request.RESNS.RespondingGatewayCrossGatewayQueryRequest).%New() set pRequest.CabeceraSAML = samlString Being the current code as follows: Class Servicios.RESNS.ConsultaRecetas Extends EnsLib.SOAP.Service [ ProcedureBlock ] { /// This is the namespace used by the Service Parameter NAMESPACE = "urn:ihe:iti:xds-b:2007"; /// Use xsi:type attribute for literal types. Parameter OUTPUTTYPEATTRIBUTE = 0; /// Determines handling of Security header. Parameter SECURITYIN = "IGNORE"; /// This is the name of the Service Parameter SERVICENAME = "RespondingGateway_Service"; /// This is the SOAP version supported by the service. Parameter SOAPVERSION = 1.2; /// Namespaces of referenced classes will be used in the WSDL. Parameter USECLASSNAMESPACES = 1; Property sns As %String; Parameter SETTINGS = "sns"; /// Default URL for invoking the WebService. /// The URL may be absolute or relative to the WSDL request URL.. Method RespondingGatewayCrossGatewayQuery(RequestSlotList As EsquemasDatos.RESNS.v02r00.rim.SlotListType, id As %xsd.anyURI(XMLPROJECTION="attribute"), comment As %String(XMLPROJECTION="attribute"), ResponseOption As EsquemasDatos.RESNS.v02r00.query.ResponseOptionType(REFELEMENTQUALIFIED=1,REFNAMESPACE="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0",XMLREF=1), AdhocQuery As EsquemasDatos.RESNS.v02r00.rim.AdhocQueryType(REFELEMENTQUALIFIED=1,REFNAMESPACE="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0",XMLREF=1), federated As %Boolean(XMLPROJECTION="attribute"), federation As %xsd.anyURI(XMLPROJECTION="attribute"), ByRef startIndex As %Integer(XMLPROJECTION="attribute"), maxResults As %Integer(XMLPROJECTION="attribute"), Output ResponseSlotList As EsquemasDatos.RESNS.rim.SlotListType, Output RegistryErrorList As EsquemasDatos.RESNS.rs.RegistryErrorList(REFELEMENTQUALIFIED=1,REFNAMESPACE="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0",XMLREF=1), Output status As EsquemasDatos.RESNS.rim.referenceURI(XMLPROJECTION="attribute"), Output requestId As %xsd.anyURI(XMLPROJECTION="attribute"), Output RegistryObjectList As EsquemasDatos.RESNS.rim.RegistryObjectListType(REFELEMENTQUALIFIED=1,REFNAMESPACE="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0",XMLREF=1), Output totalResultCount As %Integer(XMLPROJECTION="attribute")) [ Final, ProcedureBlock = 1, SoapAction = "urn:ihe:iti:2007:CrossGatewayQuery", SoapBindingStyle = document, SoapBodyUse = literal, SoapMessageName = AdhocQueryResponse, SoapTypeNameSpace = "urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0", WebMethod ] { #dim SAML AS %SAML.Assertion Set SAML = ..SecurityIn.FindElement("Assertion") set writer=##class(%XML.Writer).%New() set status=writer.OutputToString() If $$$ISERR(status) Do $system.OBJ.DisplayError(status) set status=writer.RootObject(SAML) If $$$ISERR(status) Do $system.OBJ.DisplayError(status) set samlString = writer.GetXMLString() $$$LOGASSERT("samlString: "_samlString) set pRequest = ##class(Mensajes.Request.RESNS.RespondingGatewayCrossGatewayQueryRequest).%New() set pRequest.CabeceraSAML = samlString set ..MTOMRequired = 0 set pRequest.RequestSlotList = RequestSlotList [... other unrelated method code ...] } } Second we have added the property in the Request: Class Mensajes.Request.RESNS.RespondingGatewayCrossGatewayQueryRequest Extends Ens.Request [ ProcedureBlock ] { Parameter RESPONSECLASSNAME = "Mensajes.Response.RESNS.RespondingGatewayCrossGatewayQueryResponse"; [... other properties ...] /// 22 05 2023 Añadimos propiedad para guardar la SAML que nos remite Sistema origen MINISTERIO Property CabeceraSAML As %String(MAXLEN = ""); } With the previous changes we get the SAML Assertion in the SOAP Service and then send it to the Process as a String. Third, we need to convert the SAML String to Object in the Web Service Client to send it to nthe Target System as follows: Include Ensemble Class WSCLIENTE.RESNS.ConsultaRecetas Extends %SOAP.WebClient [ ProcedureBlock ] { /// This is the URL used to access the web service. /// This is the namespace used by the Service Parameter NAMESPACE = "urn:ihe:iti:xds-b:2007"; /// Use xsi:type attribute for literal types. Parameter OUTPUTTYPEATTRIBUTE = 0; /// Determines handling of Security header. Parameter SECURITYIN = "ALLOW"; /// This is the name of the Service Parameter SERVICENAME = "RespondingGateway_Service"; /// This is the SOAP version supported by the service. Parameter SOAPVERSION = 1.2; Method RespondingGatewayCrossGatewayQuery(RequestSlotList As EsquemasDatos.RESNS.rim.SlotListType, ResponseOption As EsquemasDatos.RESNS.query.ResponseOptionType, AdhocQuery As EsquemasDatos.RESNS.rim.AdhocQueryType(REFELEMENTQUALIFIED=1,REFNAMESPACE="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0",XMLREF=1), federation As %xsd.anyURI(XMLPROJECTION="attribute"), ByRef startIndex As %Integer(XMLPROJECTION="attribute"), maxResults As %Integer(XMLPROJECTION="attribute"), id As %xsd.anyURI(XMLPROJECTION="attribute"), comment As %String(XMLPROJECTION="attribute"), federated As %Boolean(XMLPROJECTION="attribute"), Output ResponseSlotList As EsquemasDatos.RESNS.rim.SlotListType, Output RegistryErrorList As EsquemasDatos.RESNS.rs.RegistryErrorList(REFELEMENTQUALIFIED=1,REFNAMESPACE="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0",XMLREF=1), Output RegistryObjectList As EsquemasDatos.RESNS.rim.RegistryObjectListType(REFELEMENTQUALIFIED=1,REFNAMESPACE="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0",XMLREF=1), Output requestId As %xsd.anyURI(XMLPROJECTION="attribute"), Output totalResultCount As %Integer(XMLPROJECTION="attribute"), Output status As %xsd.anyURI(XMLPROJECTION="attribute"), CabeceraSAML As %String(MAXLEN="")) [ Final, ProcedureBlock = 1, SoapBindingStyle = document, SoapBodyUse = literal, SoapTypeNameSpace = "urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0", WebMethod ] { $$$LOGALERT("Dentro de WSCLIENTE.RESNS.ConsultaRecetas la CabeceraSAML: "_CabeceraSAML) do ##class(Ens.Util.XML.Reader).ObjectFromString(.objetoSAML,CabeceraSAML,"%SAML.Assertion",) $$$LOGALERT("Dentro de WSCLIENTE.RESNS.ConsultaRecetas el objetoSAML: "_objetoSAML) set x509alias = ##class(Util.TablasMaestras).getValorMaestra("PARAMETROS","aliasCertMSSSI") set password = ##class(Util.TablasMaestras).getValorMaestra("PARAMETROS","pwdCertMSSSI") Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias,password) set ref=$$$KeyInfoX509Certificate set assertion=##class(%SAML.Assertion).CreateX509(credset,ref) ;do ..SecurityOut.AddElement(assertion) do ..SecurityOut.AddElement(objetoSAML) Do (..WebMethod("RespondingGatewayCrossGatewayQuery")).Invoke($this,"urn:ihe:iti:2007:CrossGatewayQuery",.RequestSlotList,.ResponseOption,.AdhocQuery,.federation,.startIndex,.maxResults,.id,.comment,.federated,.ResponseSlotList,.RegistryErrorList,.RegistryObjectList,.requestId,.totalResultCount,.status) } } Where the lines which convert the String back to a %SAML.Assertion object are: do ##class(Ens.Util.XML.Reader).ObjectFromString(.objetoSAML,CabeceraSAML,"%SAML.Assertion",) And the ones which are supposed to send it as saml:Assertion inside SOAP:Header are: set x509alias = ##class(Util.TablasMaestras).getValorMaestra("PARAMETROS","aliasCertMSSSI") set password = ##class(Util.TablasMaestras).getValorMaestra("PARAMETROS","pwdCertMSSSI") Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias,password) set ref=$$$KeyInfoX509Certificate set assertion=##class(%SAML.Assertion).CreateX509(credset,ref) ;do ..SecurityOut.AddElement(assertion) do ..SecurityOut.AddElement(objetoSAML) However when we generate a Log SOAP, we do not observe the saml:Assertion being added . In fact it only shows the following content inside SOAP Header: Output from Web client with SOAP action = urn:ihe:iti:2007:CrossGatewayQuery <?xml version="1.0" encoding="UTF-8" ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV='http://www.w3.org/2003/05/soap-envelope' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:s='http://www.w3.org/2001/XMLSchema' xmlns:wsa='http://www.w3.org/2005/08/addressing'> <SOAP-ENV:Header> <wsa:Action>urn:ihe:iti:2007:CrossGatewayQuery</wsa:Action> <wsa:MessageID>urn:uuid:F5355A1C-F948-11ED-B9D9-005056AAA48E</wsa:MessageID> <wsa:ReplyTo> <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address> </wsa:ReplyTo> <wsa:To>...</wsa:To> </SOAP-ENV:Header> <SOAP-ENV:Body> ... </SOAP-ENV:Body> </SOAP-ENV:Envelope> How would you recommend us to send the SAML as an assertion inside the SOAP Header to the target system from a SOAP Bussiness Operation? Thans for answering this question How would you recommend us to send the SAML as an assertion inside the SOAP Header to the target system from a SOAP Bussiness Operation? Thanks for reading and replying.