| 1 | HLMA3 ;OIFO-O/RJH-API TO LOGICAL LINK FILE ;12/29/04  17:03 | 
|---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**126**;Oct 13, 1995 | 
|---|
| 3 | Q | 
|---|
| 4 | ; | 
|---|
| 5 | IEDOMAIN() ; | 
|---|
| 6 | ; API for retrieving domain of site's local Interface Engine | 
|---|
| 7 | ; from logical link VA-VIE | 
|---|
| 8 | ; | 
|---|
| 9 | ; no input | 
|---|
| 10 | ; output: | 
|---|
| 11 | ; return DNS domain if available, else return null string. | 
|---|
| 12 | ; | 
|---|
| 13 | N HLTEMP | 
|---|
| 14 | ; retrive data from DNS Domain field of file #870 | 
|---|
| 15 | S HLTEMP("VA-VIE-IEN")=$O(^HLCS(870,"B","VA-VIE",0)) | 
|---|
| 16 | S HLTEMP("DOMAIN")=$P($G(^HLCS(870,+$G(HLTEMP("VA-VIE-IEN")),0)),"^",8) | 
|---|
| 17 | Q HLTEMP("DOMAIN") | 
|---|
| 18 | ; | 
|---|
| 19 | LINKAPI(LINK,DOMAIN,AUTOSTAR) ; | 
|---|
| 20 | ; API for updating fields, DNS Domain and Autostart, of logical link | 
|---|
| 21 | ; the API may only be applied to production account. | 
|---|
| 22 | ; inputs: | 
|---|
| 23 | ; LINK -     1. ien of HL Logical Link file (#870), or | 
|---|
| 24 | ;            2. name (field 'Node'- #.01) of HL Logical Link file | 
|---|
| 25 | ;               (#870) | 
|---|
| 26 | ; DOMAIN -   data for DNS domain field (field #.08) | 
|---|
| 27 | ; AUTOSTAR - data for Autostart field (field #4.5), | 
|---|
| 28 | ;            0 for Disabled, 1 for Enabled. | 
|---|
| 29 | ;            Otherwise, data won't be updated | 
|---|
| 30 | ; | 
|---|
| 31 | ; output could be either of the following: | 
|---|
| 32 | ; 1^DOMAIN,AUTOSTART have been updated | 
|---|
| 33 | ; 1^DOMAIN has been updated | 
|---|
| 34 | ; 1^AUTOSTART has been updated | 
|---|
| 35 | ; -1^none has been updated | 
|---|
| 36 | ; -1^the api may not be applied to non-production account | 
|---|
| 37 | ; | 
|---|
| 38 | N HLTEMP,HLZ | 
|---|
| 39 | ;retrieve data from HL Communication Server Parameter file (#869.3) | 
|---|
| 40 | ; - Default Processing Id (#.03) | 
|---|
| 41 | ; | 
|---|
| 42 | S HLTEMP("PARAM")=$$PARAM^HLCS2 | 
|---|
| 43 | S HLTEMP("DEFAULT-PROCESSING-ID")=$P(HLTEMP("PARAM"),"^",3) | 
|---|
| 44 | ; | 
|---|
| 45 | ; quit if this is a non-production account | 
|---|
| 46 | Q:HLTEMP("DEFAULT-PROCESSING-ID")'="P" "-1^the api may not be applied to non-production account" | 
|---|
| 47 | ; | 
|---|
| 48 | ; get input data for link ien or name | 
|---|
| 49 | S HLTEMP("IEN")=$G(LINK) | 
|---|
| 50 | I 'HLTEMP("IEN")&($L(HLTEMP("IEN"))) S HLTEMP("IEN")=+$O(^HLCS(870,"B",HLTEMP("IEN"),0)) | 
|---|
| 51 | ; | 
|---|
| 52 | ; quit if no ien | 
|---|
| 53 | Q:'HLTEMP("IEN") "-1^none has been updated" | 
|---|
| 54 | ; | 
|---|
| 55 | ; get input data for DNS domain field | 
|---|
| 56 | S HLTEMP("DOMAIN")=$G(DOMAIN) | 
|---|
| 57 | ; | 
|---|
| 58 | ; get IP address for the domain | 
|---|
| 59 | I $L(HLTEMP("DOMAIN")) S HLTEMP("IP")=$$ADDRESS^XLFNSLK(HLTEMP("DOMAIN")) | 
|---|
| 60 | ; | 
|---|
| 61 | ; invalid domain, set it to null | 
|---|
| 62 | I $L(HLTEMP("DOMAIN")),'$G(HLTEMP("IP")) S HLTEMP("DOMAIN")="" | 
|---|
| 63 | ; | 
|---|
| 64 | ; get input data for Autostart field | 
|---|
| 65 | S HLTEMP("AUTOSTART")=$G(AUTOSTAR) | 
|---|
| 66 | ; | 
|---|
| 67 | ; quit if invalid data for both fields | 
|---|
| 68 | Q:($L(HLTEMP("DOMAIN"),".")'>2)&'((HLTEMP("AUTOSTART")="0")!(HLTEMP("AUTOSTART")="1")) "-1^none has been updated" | 
|---|
| 69 | I $L(HLTEMP("DOMAIN"),".")>2 D | 
|---|
| 70 | . S HLZ(870,HLTEMP("IEN")_",",.08)=HLTEMP("DOMAIN") | 
|---|
| 71 | I (HLTEMP("AUTOSTART")="0")!(HLTEMP("AUTOSTART")="1") D | 
|---|
| 72 | . S HLZ(870,HLTEMP("IEN")_",",4.5)=HLTEMP("AUTOSTART") | 
|---|
| 73 | D FILE^DIE("S","HLZ","HLZ") | 
|---|
| 74 | ; | 
|---|
| 75 | ; both fields are updated | 
|---|
| 76 | Q:$D(HLZ(870,HLTEMP("IEN")_",",.08))&($D(HLZ(870,HLTEMP("IEN")_",",4.5))) "1^DOMAIN,AUTOSTART have been updated" | 
|---|
| 77 | ; | 
|---|
| 78 | ; only update DNS Domain field | 
|---|
| 79 | Q:$D(HLZ(870,HLTEMP("IEN")_",",.08)) "1^DOMAIN has been updated" | 
|---|
| 80 | ; | 
|---|
| 81 | ; only update Autostart field | 
|---|
| 82 | Q:$D(HLZ(870,HLTEMP("IEN")_",",4.5)) "1^AUTOSTART has been updated" | 
|---|
| 83 | ; | 
|---|
| 84 | IP(DA,HLIP) ; | 
|---|
| 85 | ; 1. API to update field TCP/IP Address, #870,400.01. | 
|---|
| 86 | ; 2. called from input transform of #870,.08 DNS Domain to update | 
|---|
| 87 | ;    field TCP/IP Address, #870,400.01. | 
|---|
| 88 | ; | 
|---|
| 89 | ; input: | 
|---|
| 90 | ; DA -   1. ien of HL Logical Link file (#870), or | 
|---|
| 91 | ;        2. name (field 'Node'- #.01) of HL Logical Link file (#870) | 
|---|
| 92 | ; HLIP - IP addresses | 
|---|
| 93 | ; | 
|---|
| 94 | ; output: | 
|---|
| 95 | ; return IP address updated to the field if valid, | 
|---|
| 96 | ; else return null string. | 
|---|
| 97 | ; | 
|---|
| 98 | N HLZ,HLI,HLTEMP | 
|---|
| 99 | ; | 
|---|
| 100 | ; get input data | 
|---|
| 101 | S DA=$G(DA) | 
|---|
| 102 | I 'DA&($L(DA)) S DA=+$O(^HLCS(870,"B",DA,0)) | 
|---|
| 103 | ; | 
|---|
| 104 | ; invalid ien | 
|---|
| 105 | Q:'DA "" | 
|---|
| 106 | ; | 
|---|
| 107 | ; invalid ip | 
|---|
| 108 | Q:('HLIP) "" | 
|---|
| 109 | ; | 
|---|
| 110 | ; get port number | 
|---|
| 111 | S HLTEMP("PORT")=+$P($G(^HLCS(870,DA,400)),"^",2) | 
|---|
| 112 | ; | 
|---|
| 113 | ; invalid port | 
|---|
| 114 | Q:'HLTEMP("PORT") "" | 
|---|
| 115 | ; | 
|---|
| 116 | S HLTEMP("IP")="" | 
|---|
| 117 | S HLTEMP("IP-VALID")=0 | 
|---|
| 118 | S HLTEMP("IP-COUNT")=$L($G(HLIP),",") | 
|---|
| 119 | F HLI=1:1:HLTEMP("IP-COUNT") D  Q:HLTEMP("IP-VALID") | 
|---|
| 120 | . S HLTEMP("IP")=$P(HLIP,",",HLI) | 
|---|
| 121 | . D CALL^%ZISTCP(HLTEMP("IP"),HLTEMP("PORT")) | 
|---|
| 122 | . I 'POP D | 
|---|
| 123 | .. D CLOSE^%ZISTCP | 
|---|
| 124 | .. S HLTEMP("IP-VALID")=HLTEMP("IP") | 
|---|
| 125 | ; | 
|---|
| 126 | ; invalid ip, return null | 
|---|
| 127 | Q:'HLTEMP("IP-VALID") "" | 
|---|
| 128 | ; | 
|---|
| 129 | ; valid data to update the field | 
|---|
| 130 | S HLZ(870,DA_",",400.01)=HLTEMP("IP-VALID") | 
|---|
| 131 | D FILE^DIE("E","HLZ","HLZ") | 
|---|
| 132 | ; | 
|---|
| 133 | ; return the valid ip | 
|---|
| 134 | Q HLTEMP("IP-VALID") | 
|---|
| 135 | ; | 
|---|
| 136 | FACILITY(LINK,DELIMITR) ; | 
|---|
| 137 | ; API for retrieving the station number and domain fields of logical | 
|---|
| 138 | ; link (file #870) and to be usd for populating in field MSH-6 | 
|---|
| 139 | ; (receiving facility) of message header. | 
|---|
| 140 | ; | 
|---|
| 141 | ; output format: institution number<delimiter>domain<delimiter>DNS | 
|---|
| 142 | ; | 
|---|
| 143 | ; inputs: | 
|---|
| 144 | ; LINK -       1. ien of HL Logical Link file (#870), or | 
|---|
| 145 | ;              2. name (field 'Node'- #.01) of HL Logical Link file | 
|---|
| 146 | ;               (#870) | 
|---|
| 147 | ; DELIMITR -  such as "~", "^", etc. | 
|---|
| 148 | ; | 
|---|
| 149 | ; output: | 
|---|
| 150 | ;        1.  institution number<delimiter>domain<delimiter>DNS | 
|---|
| 151 | ;        2.  <null> if input data is invalid | 
|---|
| 152 | ; | 
|---|
| 153 | ; note: if the domain retrieved from DNS domain field with "HL7." | 
|---|
| 154 | ;       or "MPI." prefixed at the beginning of the domain, the | 
|---|
| 155 | ;       prifixed "HL7." or "MPI." will be removed, in order to | 
|---|
| 156 | ;       meet the current implementation of Vista HL7.  Current | 
|---|
| 157 | ;       VISTA HL7 domain is retrieved from MailMan domain field, | 
|---|
| 158 | ;       the "HL7." or "MPI." is not prefixed at the beginning of | 
|---|
| 159 | ;       the domain when it is populated in field MSH-6 (receiving | 
|---|
| 160 | ;       facility) of message header. | 
|---|
| 161 | ; | 
|---|
| 162 | N HLLINK,HLCINS,HLCDOM | 
|---|
| 163 | ; | 
|---|
| 164 | ; get input data for link ien or name | 
|---|
| 165 | S HLLINK=$G(LINK) | 
|---|
| 166 | I 'HLLINK,HLLINK]"" D | 
|---|
| 167 | .S HLLINK=$O(^HLCS(870,"B",HLLINK,0)) | 
|---|
| 168 | ; | 
|---|
| 169 | ; quit if no ien | 
|---|
| 170 | Q:'HLLINK "" | 
|---|
| 171 | ; | 
|---|
| 172 | ; get DELIMITR | 
|---|
| 173 | S DELIMITR=$G(DELIMITR) | 
|---|
| 174 | ; | 
|---|
| 175 | ; quit if invalid DELIMITR | 
|---|
| 176 | Q:$L(DELIMITR)'=1 "" | 
|---|
| 177 | ; | 
|---|
| 178 | ; retrive data from DNS Domain field of file #870 | 
|---|
| 179 | S HLCDOM("DNS")=$P($G(^HLCS(870,+HLLINK,0)),"^",8) | 
|---|
| 180 | ; | 
|---|
| 181 | ; remove the first piece if the first piece is "HL7" or "MPI" | 
|---|
| 182 | I ($P(HLCDOM("DNS"),".")="HL7")!($P(HLCDOM("DNS"),".")="MPI") D | 
|---|
| 183 | . S HLCDOM("DNS")=$P(HLCDOM("DNS"),".",2,99) | 
|---|
| 184 | ; | 
|---|
| 185 | S (HLCINS,HLCDOM)="" | 
|---|
| 186 | S HLCINS=$P(^HLCS(870,HLLINK,0),U,2) | 
|---|
| 187 | S HLCDOM=$P(^HLCS(870,HLLINK,0),U,7) | 
|---|
| 188 | ; | 
|---|
| 189 | ; quit if no data in institution and domain fields | 
|---|
| 190 | Q:('HLCINS)&('HLCDOM)&('$L(HLCDOM("DNS"))) "" | 
|---|
| 191 | ; | 
|---|
| 192 | ; initialize result | 
|---|
| 193 | S HLLINK("RESULT")="" | 
|---|
| 194 | ; | 
|---|
| 195 | ; if instition ien exists | 
|---|
| 196 | I HLCINS D | 
|---|
| 197 | . S HLCINS=$P($G(^DIC(4,HLCINS,99)),U) | 
|---|
| 198 | . ; | 
|---|
| 199 | . ; if valid station number exists | 
|---|
| 200 | . I HLCINS D | 
|---|
| 201 | .. ; set station number to the first piece of the result | 
|---|
| 202 | .. S HLLINK("RESULT")=HLCINS | 
|---|
| 203 | ; | 
|---|
| 204 | ; if MailMan domain ien exists | 
|---|
| 205 | I HLCDOM D | 
|---|
| 206 | . ;get MailMan domain name | 
|---|
| 207 | . S HLCDOM=$P(^DIC(4.2,HLCDOM,0),U) | 
|---|
| 208 | ; | 
|---|
| 209 | ; DNS domain overides MailMan domain | 
|---|
| 210 | I ($L(HLCDOM("DNS"),".")>2) D | 
|---|
| 211 | . S HLCDOM=HLCDOM("DNS") | 
|---|
| 212 | ; | 
|---|
| 213 | ; set third piece as "DNS" if domain is valid | 
|---|
| 214 | I ($L(HLCDOM,".")>2) D | 
|---|
| 215 | . ; set domain to the 2nd and 3rd pieces of the result | 
|---|
| 216 | . S HLLINK("RESULT")=HLLINK("RESULT")_DELIMITR_HLCDOM_DELIMITR_"DNS" | 
|---|
| 217 | Q HLLINK("RESULT") | 
|---|
| 218 | ; | 
|---|