Scott Roth · Jul 8, 2025 go to post

I attempted that..

DEVCLIN>set patient = {"resourceType":"Bundle","type":"searchset","total":1,"link":[{"relation":"self","url":"https://ihismufhirnp.osumc.edu/fhir-poc/api/FHIR/R4/Patient?identifier=OSUMRN|415012765"}],"entry":[{"link":[{"relation":"self","url":"https://ihismufhirnp.osumc.edu/fhir-poc/api/FHIR/R4/Patient/efz6cSnh6If5cehlzObXZuO7BwSc77oXLYSL-92FLdec3"}],"fullUrl":"https://ihismufhirnp.osumc.edu/fhir-poc/api/FHIR/R4/Patient/efz6cSnh6If5cehlzObXZuO7BwSc77oXLYSL-92FLdec3","resource":{"resourceType":"Patient","id":"efz6cSnh6If5cehlzObXZuO7BwSc77oXLYSL-92FLdec3","extension":[{"valueCodeableConcept":{"coding":[{"system":"urn:oid:1.2.840.114350.1.13.172.3.7.10.698084.130.768080.39128","code":"male","display":"male"}]},"url":"http://open.epic.com/FHIR/StructureDefinition/extension/legal-sex"},{"valueCodeableConcept":{"coding":[{"system":"urn:oid:1.2.840.114350.1.13.172.3.7.10.698084.130.768080.35144","code":"male","display":"male"}]},"url":"http://open.epic.com/FHIR/StructureDefinition/extension/sex-for-clinical-use"},{"extension":[{"valueCoding":{"system":"http://terminology.hl7.org/CodeSystem/v3-NullFlavor","code":"UNK","display":"Unknown"},"url":"ombCategory"},{"valueString":"Unknown","url":"text"}],"url":"http://hl7.org/fhir/us/core/StructureDefinition/us-core-race"},{"extension":[{"valueString":"Unknown","url":"text"}],"url":"http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity"},{"valueCode":"248153007","url":"http://hl7.org/fhir/us/core/StructureDefinition/us-core-sex"},{"valueCodeableConcept":{"coding":[{"system":"http://loinc.org","code":"LA29518-0","display":"he/him/his/his/himself"}]},"url":"http://open.epic.com/FHIR/StructureDefinition/extension/calculated-pronouns-to-use-for-text"}],"identifier":[{"use":"usual","type":{"text":"CEID"},"system":"urn:oid:1.2.840.114350.1.13.172.3.7.3.688884.100","value":"OSRDR3259GL4948"},{"use":"usual","type":{"text":"EPI"},"system":"urn:oid:1.2.840.114350.1.13.172.3.7.5.737384.0","value":"E4377"},{"use":"usual","type":{"text":"EXTERNAL"},"system":"urn:oid:1.2.840.114350.1.13.172.3.7.2.698084","value":"Z5151278"},{"use":"usual","type":{"text":"FHIR"},"system":"http://open.epic.com/FHIR/StructureDefinition/patient-dstu2-fhir-id","value":"TCPNfJueZx8Fjvm4g.lzD.vutNNRpQMfDXDRXJVlKkpcB"},{"use":"usual","type":{"text":"FHIR STU3"},"system":"http://open.epic.com/FHIR/StructureDefinition/patient-fhir-id","value":"efz6cSnh6If5cehlzObXZuO7BwSc77oXLYSL-92FLdec3"},{"use":"usual","type":{"text":"INTERNAL"},"system":"urn:oid:1.2.840.114350.1.13.172.3.7.2.698084","value":"  Z5151278"},{"use":"usual","type":{"text":"OSUMRN"},"system":"urn:oid:1.2.840.114350.1.13.172.2.7.5.737384.100","value":"415012765"},{"use":"usual","type":{"text":"WPRINTERNAL"},"system":"urn:oid:1.2.840.114350.1.13.172.3.7.2.878082","value":"2545814"}],"active":true,"name":[{"use":"official","text":"Case Stontest","family":"Stontest","given":["Case"]},{"use":"usual","text":"Case Stontest","family":"Stontest","given":["Case"]}],"gender":"male","birthDate":"1995-02-27","deceasedBoolean":false,"managingOrganization":{"reference":"Organization/eQi5EjSoIVOTHT0BXoZ4mNA3","display":"WILSON HEALTH"}},"search":{"mode":"match"}}]}

DEVCLIN>set r4Patient = ##class(HS.FHIRModel.R4.Patient).fromDao(patient)

DEVCLIN>zwrite r4Patient.toString()
"{""resourceType"":""Bundle"",""link"":[{}]}"

DEVCLIN>
Scott Roth · Jul 8, 2025 go to post

Found that the FHIR R4 Patient Resource that I was receiving from my EMR did not follow the Model R4 Patient Resource, so once the fromDao tries to transform the JSON it does not map correctly to the model R4 Patient.

Scott Roth · Jul 7, 2025 go to post

I did not have any luck with either option within the DTL editor..

<INVALID OREF>Transform+16^osuwmc.Epic.FHIR.DTL.ResponsePatientSearch.1 -- logged as '-' number - @' set iter = target.name.list.%GetIterator()'

What I am trying to do is take the R4.PatientResponse and return it into a Data Class Structure format for those that are within my Team who can't read FHIR response or know how to code around it to use to update an HL7 message.

I tried taking the R4.PatientResponse and transforming it into a Record Map data class structure without success.

Scott Roth · Jul 3, 2025 go to post

How would I iterate through the string result to parse the family and given name...

{"use":"official","text":"Archie Obrotest","family":"Obrotest","given":["Archie"]}
Scott Roth · Jul 1, 2025 go to post

I was a part of a presentation at #Ready2025 very similar to what you are looking for. At Ready 2025, I worked with @John Goodgame , @Justin Owens, @Julio Rodriguez to present a Change Control Audit (Stealth Control) in which a task queries for changes and inserts the data into SQL tables that could be alerted or queried on.

When it is posted look for a session named...Partnering for Success Collaborative Innovations in Interoperability

@John Goodgame is talking with Product to see if this could be included, or might be publishing the code somewhere for others to use.

Scott Roth · Jun 18, 2025 go to post

This is how i solved the issue


 Set tSC = pRequest.NewResponse(.tResponse)  Quit:$$$ISERR(tSC) tSC
 Set tResponse.encodedMessage = $get(encodedMessage)
 set dMsg = $SYSTEM.Encryption.Base64Decode(tResponse.encodedMessage)
 set pResponse = ##class(EnsLib.HL7.Message).%New()
 set pResponse = ##class(EnsLib.HL7.Message).ImportFromString($Get(dMsg))
 set pResponse.DocType = ##class(EnsLib.HL7.Schema).ResolveSchemaTypeToDocType(pResponse.TypeVersion,pResponse.Name)
Scott Roth · Jun 18, 2025 go to post

This is how I solved the issue...

 Set tSC = pRequest.NewResponse(.tResponse)  Quit:$$$ISERR(tSC) tSC
 Set tResponse.encodedMessage = $get(encodedMessage)
 set dMsg = $SYSTEM.Encryption.Base64Decode(tResponse.encodedMessage)
 set pResponse = ##class(EnsLib.HL7.Message).%New()
 set pResponse = ##class(EnsLib.HL7.Message).ImportFromString($Get(dMsg))
 set pResponse.DocType = ##class(EnsLib.HL7.Schema).ResolveSchemaTypeToDocType(pResponse.TypeVersion,pResponse.Name)
Scott Roth · Jun 17, 2025 go to post

How would I do nested iterations if I need to get something from say example "external Positions"

"externalPositions": [
        {
          "pureId": 0,
          "appointment": {
            "uri": "string",
            "term": {
              "en_GB": "Some text"
            }
          },
          "appointmentString": {
            "en_GB": "Some text"
          },
          "period": {
            "startDate": {
              "year": 0,
              "month": 1,
              "day": 1
            },
            "endDate": {
              "year": 0,
              "month": 1,
              "day": 1
            }
          },
Scott Roth · Jun 12, 2025 go to post

Not sure I am following, the idea was to take the HL7 message, encode it, and put it into the osuwmc.Nutrition.OSU.CBOARDNetMenuRequest.SendMessageRequest  as the encodedMessage. Using the osuwmc.Nutrition.OSU.CBOARDNetMenuRequest.SendMessageRequest  to pass to the Web Service Class to send outbound to the vendor.

The two Parenthesis was a typo, and I was using the $Get(a) to dereference the %Stream to a string for the osuwmc.Nutrition.OSU.CBOARDNetMenuRequest.SendMessageRequest.

The Soap wizard created the osuwmc.Nutrition.OSU.CBOARDNetMenuRequest.SendMessageRequest as the vendor requires a key value and encoded message in the body of the soap request.

Scott Roth · Jun 11, 2025 go to post

[HealthConnect:3.5.0-1.m1]

it was a group permission issue with the directory. However, once I created the DB, added it to the mirror on the Primary, I cannot get it to Sync with the others in the mirror. I removed it from the mirror for now till I have time to look at it again.

Scott Roth · Jun 11, 2025 go to post

While I have applauded the updates, I have given feedback to the UX design team, as at times it seems clunky if we have big namespaces.

Scott Roth · Jun 10, 2025 go to post

I need to take the Encoded Stream and send it as an Encoded String. How would I take a Stream and send it as a String?

Scott Roth · Jun 6, 2025 go to post

I dismounted, secure copied the IRIS.dat to my backup/DR and mount the Database, but when I attempt to Activate Mirror Database on the backup, I am getting the following error...

sc="0 "_$lb($lb(2073,"/ensemble/TEST/DB/TESTING/",,,,,,,,$lb(,"%SYS",$lb("e^ActivateMirroredDatabase+3^SYS.Mirror.1^2","e^^^0"))))/* ERROR #2073: Mirrored Database '/ensemble/TEST/DB/TESTING/' is not found on this system */
 

but it shows that the database has been mounted in the Terminal.

Scott Roth · Jun 2, 2025 go to post

Still not working right..

Class osuwmc.Nutrition.OSU.CBOARDNetMenuOperation.CBORDHL7Port Extends Ens.BusinessOperation [ ProcedureBlock ]
{

Parameter ADAPTER = "EnsLib.SOAP.OutboundAdapter";

Property LocalInterface As %String(MAXLEN = 255);

Parameter SETTINGS = "LocalInterface:Connection:selector?context={Ens.ContextSearch/TCPLocalInterfaces}";

Method OnInit() As %Status
{
	If 'IsObject(..Adapter.%Client.HttpRequest) {
		Set ..Adapter.%Client.HttpRequest=##class(%Net.HttpRequest).%New()
	}
	Set ..Adapter.%Client.HttpRequest.LocalInterface=$ZStrip($P(..LocalInterface,"("),"*W")
}

Terminating Job 819984 / 'NutritionCBOARDNetMenuSOAP' with Status = ERROR <Ens>ErrException: <SUBSCRIPT>OnInit+1^osuwmc.Nutrition.OSU.CBOARDNetMenuOperation.CBORDHL7Port.1 *IsObject("") -- logged as '-' number - @' If 'IsObject(..Adapter.%Client.HttpRequest) {', %QuitTask=

Scott Roth · Jun 2, 2025 go to post
Class osuwmc.Nutrition.OSU.CBOARDNetMenuOperation.CBORDHL7Port Extends (Ens.BusinessOperation, EnsLib.SOAP.GenericOperation) [ ProcedureBlock ]
{

Parameter ADAPTER = "EnsLib.SOAP.OutboundAdapter";

Property LocalInterface As %String(MAXLEN = 255);

Parameter SETTINGS = "LocalInterface:Connection:selector?context={Ens.ContextSearch/TCPLocalInterfaces}";

Method OnInit() As %Status
{
	set interface = $ZStrip($P(..LocalInterface,"("),"*W")
    Set ..%Client.HttpRequest=##class(%Net.HttpRequest).%New()
	set ..%Client.HttpRequest.LocalInterface = interface
	QUIT $$$OK
}

I tried using ..%Client but got..

ERROR: osuwmc.Nutrition.OSU.CBOARDNetMenuOperation.CBORDHL7Port.cls

ERROR:  osuwmc.Nutrition.OSU.CBOARDNetMenuOperation.CBORDHL7Port.1(4) : MPP5376 : Method or Property '%Client' does not exist in this class.

 TEXT:   Set ..%Client.HttpRequest=##class(%Net.HttpRequest).%New()

ERROR:  osuwmc.Nutrition.OSU.CBOARDNetMenuOperation.CBORDHL7Port.1(5) : MPP5376 : Method or Property '%Client' does not exist in this class.

 TEXT:  set ..%Client.HttpRequest.LocalInterface = interface

When I tried to compile.

Scott Roth · Jun 2, 2025 go to post

I ended up doing..

Class osuwmc.Nutrition.OSU.CBOARDNetMenuOperation.CBORDHL7Port Extends (Ens.BusinessOperation, EnsLib.SOAP.GenericOperation) [ ProcedureBlock ]
{

Parameter ADAPTER = "EnsLib.SOAP.OutboundAdapter";

Property LocalInterface As %String(MAXLEN = 255);

Parameter SETTINGS = "LocalInterface:Connection:selector?context={Ens.ContextSearch/TCPLocalInterfaces}";

Method OnInit() As %Status
{
	set interface = $ZStrip($P(..LocalInterface,"("),"*W")
	set HttpRequest = ##class(%Net.HttpRequest).%New()
	set HttpRequest.LocalInterface = interface
	$$$LOGINFO("CBORDHL7Port OnInit: LocalInterface="_interface)
	QUIT $$$OK
}

The $$$LOGINFO is showing the correct address, but I am still having issues connecting. But thanks

Scott Roth · Jun 2, 2025 go to post

This has been presented in each of the previous Global Summit's conferences. We will be reviewing it again at this years InterSystems READY 2025. Orlando Health has been the mainstay in the Development work of this tool. Please see previous session recordings via You Tube.

Integration Production Tools: HealthShare Health Connect & InterSystems IRIS Health
https://www.youtube.com/watch?v=61Nduu5UyS0&ntb=1&msockid=232752513fc511f08781af03632c4a64

 

Scott Roth · May 30, 2025 go to post

I am not sure I quite understand the question, but I just recently wrote EnsLib.SQL.InboundAdapters that will query MS SQL Server and write the data directly to IRIS Cache Tables I built, so in that sense it is possible. But if you have a service that is listening for a connection to query IRIS Tables, then I think you would want to build like an API listener that then queries the tables.

Scott Roth · May 28, 2025 go to post

Hello Community,

  • My name is Scott Roth
  • I am from the United States, and currently live in Columbus, Ohio.
  • I am a Sr Application Development Analyst for the The Ohio State University Wexner Medical Center
  • I have been in Health Care Integration for 21 years and have been using InterSystems HealthShare Health Connect since 2015. I became a Developer Community Moderator in 2016/2017
  • I’m a Health Care Integration Developer with hands-on experience in HL7. Beyond standard interface development, I focus on enhancing our integration capabilities by exploring new tools, technologies, and architectural approaches to improve interoperability and streamline workflows.
  • Currently working with and on developing the Health Share Provider Directory with Managed Services to hopefully one day replace our homegrown built Provider Master Solution.
  • I can be found on Linked In
  • I will be presenting at InterSystems Ready 2025 on Tuesday afternoon at 2:30  
Scott Roth · May 28, 2025 go to post

Thanks responseData.items.%Get(0).titles.%Get(0).value.%Get("en_US") did the trick

Scott Roth · May 14, 2025 go to post

After talking with the vendor, they mentioned they had a .wsdl that could be used to send the HL7 message via a SOAP connection. I took the wsdl and ran it through the SOAP wizard to create the basic classes. Now we are waiting on a firewall request to allow us to communicate with the vendor over port 443.

Scott Roth · May 7, 2025 go to post

 If the Response you get from a REST call is a %DynamicAbstractObject, how do you know how many levels to go through? 

I tried using JSON2Persistant however the naming convention of the tree that it is building it too long for me to upload it into github, so since I have two values that I need to only retrieve I am attempting to iterate through the JSON and just extract those two values

for example, if I only want to pull the pureId and the portalURL from the response object, how can I iterate through the JSON response to get those values only? 

{
  "count": 0,
  "pageInformation": {
    "offset": 0,
    "size": 0
  },
  "items": [
    {
      "pureId": 0,
      "uuid": "196ab1c9-6e60-4000-88cb-4b1795761180",
      "createdBy": "string",
      "createdDate": "1970-01-01T00:00:00.000Z",
      "modifiedBy": "string",
      "modifiedDate": "1970-01-01T00:00:00.000Z",
      "portalUrl": "string",
      "prettyUrlIdentifiers": [
        "string"
      ],
      "previousUuids": [
        "string"
      ],
      "version": "string",
      "startDateAsResearcher": "1970-01-01",
      "affiliationNote": "string",
      "dateOfBirth": "1970-01-01",
      "employeeStartDate": "1970-01-01",
      "employeeEndDate": "1970-01-01",
      "externalPositions": [
        {
          "pureId": 0,
          "appointment": {
            "uri": "string",
            "term": {
              "en_GB": "Some text"
            }
          },
          "appointmentString": {
            "en_GB": "Some text"
          },
          "period": {
            "startDate": {
              "year": 0,
              "month": 1,
              "day": 1
            },
            "endDate": {
              "year": 0,
              "month": 1,
              "day": 1
            }
          },
          "externalOrganization": {
            "uuid": "196ab1c9-6e60-4000-8b89-29269178a480",
            "systemName": "string"
          }
        }
      ],

when I attempted 

    set itr = responseData.%GetIterator()
    while itr.%GetNext(.key, .value) {
      if key = "pureID"{
        set pResponse.pureID = value
      } elseif key = "portalURL" {
        set pResponse.portalURL = value
      }
    }

both the pureID and portalURL came back blank.

Scott Roth · May 6, 2025 go to post

Typically, it would only be one message schema, but I understand what you mean by creating a copy of the EnsLib.HL7.Operation.TCPOperation. I'll keep that in mind if I want to explore this further.

Scott Roth · May 6, 2025 go to post

How do we take the JSON response, iterate through it to put it into a data class structure that could be used? Using JSON2Persistent, I took a JSON response and converted it into a Data Class Structure.