| 1 | MDHL7U2 ; HOIFO/WAA -Utilities for CP PROCESSING OBX text  ; 7/26/00 | 
|---|
| 2 | ;;1.0;CLINICAL PROCEDURES;;Apr 01, 2004 | 
|---|
| 3 | ; Supported IA #2263 for XPAR parameter calls. | 
|---|
| 4 | ; Supported IA #3006 for XMXAPIG calls. | 
|---|
| 5 | ; Supported IA #10106 for HL7 calls. | 
|---|
| 6 | ; | 
|---|
| 7 | GET123(MDD702) ; return the IEN for an entry in 123 based on the 702 | 
|---|
| 8 | ; This subroutine will return -1 if no entry is found | 
|---|
| 9 | N CONSULT | 
|---|
| 10 | S CONSULT=-1 | 
|---|
| 11 | I $G(^MDD(702,MDD702,0))'="" D  ; Entry in 702 does exist | 
|---|
| 12 | . S CONSULT=$$GET1^DIQ(702,MDD702,.05,"I") ; Grab pointer to consults | 
|---|
| 13 | . I CONSULT'>0 S CONSULT=-1 Q  ; Bad consult | 
|---|
| 14 | . Q | 
|---|
| 15 | Q CONSULT | 
|---|
| 16 | GETREF(CONSULT) ; Return the physician and pointer to 200 | 
|---|
| 17 | ; in the format pointer200^last^first | 
|---|
| 18 | N NREF,REF,PHY | 
|---|
| 19 | S PHY=-1 | 
|---|
| 20 | S REF=$$GET1^DIQ(123,CONSULT,10,"I") D | 
|---|
| 21 | . Q:REF="" | 
|---|
| 22 | . S NREF=$$GET1^DIQ(123,CONSULT,10,"E") Q:NREF="" | 
|---|
| 23 | . S NREF=$$HLNAME^HLFNC(NREF,"^~\&") | 
|---|
| 24 | . S PHY=REF_"^"_NREF | 
|---|
| 25 | . Q | 
|---|
| 26 | Q PHY | 
|---|
| 27 | ; | 
|---|
| 28 | MG(MG) ; This function is to validate that a mailgroup | 
|---|
| 29 | ; and that there is someone in it | 
|---|
| 30 | ; | 
|---|
| 31 | ; Input: | 
|---|
| 32 | ;  MG the Mailgroup IEN in the file | 
|---|
| 33 | ; | 
|---|
| 34 | ; Output: | 
|---|
| 35 | ;  1 = Valid mail group with people in it | 
|---|
| 36 | ;  0 = Invalid group with No people in it | 
|---|
| 37 | ; | 
|---|
| 38 | N X,MGU | 
|---|
| 39 | S X=0 I '$G(MG) Q X | 
|---|
| 40 | S MGU=$$GET1^DIQ(3.8,+MG_",",.01) | 
|---|
| 41 | I MGU'="" D | 
|---|
| 42 | . I $$GOTLOCAL^XMXAPIG(MGU) S X=1 | 
|---|
| 43 | . Q | 
|---|
| 44 | Q X | 
|---|
| 45 | INST(DEV,X) ; Process Device and determine if the device Functioning | 
|---|
| 46 | ; DEV = Name of the device from the .01 field | 
|---|
| 47 | ; X = 1 is true that the device cleared to process | 
|---|
| 48 | ;        0 is false the device is not allowed to process | 
|---|
| 49 | ; X(0) = The device name^IEN^Print name if one^ | 
|---|
| 50 | ;        Processing routine^Routine Checksum^Patch Level | 
|---|
| 51 | ; X(I) = The reasons why it is OR is not allowed to process | 
|---|
| 52 | N LINE,I,J,Y | 
|---|
| 53 | S I=0 | 
|---|
| 54 | S X=0 | 
|---|
| 55 | I DEV'?1N.N S DEV=$O(^MDS(702.09,"B",DEV,0)) I DEV<1 S DEV=0 | 
|---|
| 56 | S LINE=$G(^MDS(702.09,DEV,0)) | 
|---|
| 57 | S X(I)=$S($P(LINE,U)'="":$P(LINE,U),1:"UNKNOWN")_U_DEV_U_$S($P(LINE,U)'="":$P(LINE,U,6),1:"Device Unknown") | 
|---|
| 58 | I LINE="" S I=I+1,X(I)="No Device Found." Q | 
|---|
| 59 | I $P(LINE,U,6)="" S I=I+1,X(I)="No Print Name Defined." | 
|---|
| 60 | I $P(LINE,U,9)="" S I=I+1,X(I)="Active switch is not set for this device." | 
|---|
| 61 | I $P(LINE,U,9)'=1 S I=I+1,X(I)="Device is set to Inactive." | 
|---|
| 62 | I $P(LINE,U,2)="" S I=I+1,X(I)="No Mail Group Defined in the instrument file." | 
|---|
| 63 | E  D | 
|---|
| 64 | . Q:$$MG^MDHL7U2($P(LINE,U,2)) | 
|---|
| 65 | . N MGU | 
|---|
| 66 | . I $$FIND1^DIC(3.8,"","BX","MD DEVICE ERRORS")'=+$P(LINE,U,2) S I=I+1,X(I)="No Mail Group Defined in VISTA." Q | 
|---|
| 67 | . S MGU=$$GET1^DIQ(3.8,+$P(LINE,U,2)_",",.01) | 
|---|
| 68 | . I '$$GOTLOCAL^XMXAPIG(MGU) S I=I+1,X(I)="No User are defined in the "_MGU_" Mail Group." | 
|---|
| 69 | . Q | 
|---|
| 70 | S LINE=$G(^MDS(702.09,DEV,.1)) | 
|---|
| 71 | I $P(LINE,U,1)="" S I=I+1,X(I)="No Processing routine indicated." | 
|---|
| 72 | E  D | 
|---|
| 73 | . N ROU,ROUTINE | 
|---|
| 74 | . S ROUTINE=$P(LINE,U,1) | 
|---|
| 75 | . S ROU=$$VALRTN^MDHL7U2($P(LINE,U,1)) | 
|---|
| 76 | . I 'ROU S I=I+1,X(I)="Processing routine does not exist." | 
|---|
| 77 | . E  D  ; Plug in the needed information about the routine | 
|---|
| 78 | . . N LINE,SCND,HOLD | 
|---|
| 79 | . . S LINE=X(0) | 
|---|
| 80 | . . S $P(LINE,U,4)=ROU ; processing routine | 
|---|
| 81 | . . S X(0)=LINE | 
|---|
| 82 | . . I $E(ROUTINE,1,2)="MD" Q | 
|---|
| 83 | . . I $E(ROUTINE,1,2)="MC" Q | 
|---|
| 84 | . . S X(10)="                  ***WARNING***" | 
|---|
| 85 | . . S X(11)="   This will not stop the processing of instrument." | 
|---|
| 86 | . . S X(12)=" Processing routine "_ROUTINE_" is not in CP Namespace." | 
|---|
| 87 | . . S X(13)="                        " | 
|---|
| 88 | . . S X(14)="                  ***WARNING***" | 
|---|
| 89 | . . Q | 
|---|
| 90 | . Q | 
|---|
| 91 | I $P(LINE,U,2)="" S I=I+1,X(I)="No Package Code." | 
|---|
| 92 | I $P(LINE,U,2)'="M" D | 
|---|
| 93 | . N J,VLD | 
|---|
| 94 | . S VLD=0 | 
|---|
| 95 | . I $P(LINE,U,3) D | 
|---|
| 96 | . . I $P(LINE,U,6)="" S I=I+1,X(I)="No HL7 Instrument ID." | 
|---|
| 97 | . . I '$P(LINE,U,8) S I=I+1,X(I)="No HL7 Link." | 
|---|
| 98 | . . Q | 
|---|
| 99 | . S LINE=$G(^MDS(702.09,DEV,.3)) | 
|---|
| 100 | . F J=1:1:7 S VLD=$P(LINE,U,J) I VLD Q | 
|---|
| 101 | . I 'VLD S I=I+1,X(I)="No Valid Attachment Types indicated." | 
|---|
| 102 | . Q | 
|---|
| 103 | I $$GET^XPAR("SYS","MD IMAGING XFER")="" S I=I+1,X(I)="No Imaging Share indicated in the Systems Parameters" | 
|---|
| 104 | I I=0 S X="1",X(1)="Cleared to Process HL7 Messages" | 
|---|
| 105 | Q | 
|---|
| 106 | VALRTN(RTN) ; Function to check Validity | 
|---|
| 107 | N X | 
|---|
| 108 | S X=RTN X ^%ZOSF("TEST") S X=$T | 
|---|
| 109 | Q X | 
|---|
| 110 | TEXT ;;PROCESS TEXT;.302 | 
|---|
| 111 | N CNT,LN,DEL | 
|---|
| 112 | S SEP=$G(SEP,"^") | 
|---|
| 113 | S CNT=0,LN=0,DEL=0 | 
|---|
| 114 | S MDDZ=$$UPDATE^MDHL7U(MDIEN) ; Create the entry in the multi. | 
|---|
| 115 | Q:'MDDZ | 
|---|
| 116 | S ^MDD(703.1,MDIEN,.1,MDDZ,0)=$P(MDATT(PROC),";",6) | 
|---|
| 117 | S ^MDD(703.1,MDIEN,.1,MDDZ,.2,0)="^^"_LN_"^"_LN_"^"_DT_"^" | 
|---|
| 118 | F  S CNT=$O(^TMP($J,"MDHL7","TEXT",CNT)) Q:CNT<1  D | 
|---|
| 119 | . N LINE | 
|---|
| 120 | . S LINE=$G(^TMP($J,"MDHL7","TEXT",CNT)) Q:LINE="" | 
|---|
| 121 | . I $P(LINE,"|",1)'="OBX" Q | 
|---|
| 122 | . I $S($P(LINE,"|",3)="TX":0,$P(LINE,"|",3)="FT":0,1:1) Q | 
|---|
| 123 | . I $E($P(LINE,"|",6),1,2)="\\" Q | 
|---|
| 124 | . I $E($P(LINE,"|",6),1,2)="//" Q | 
|---|
| 125 | . ; ^-- Quit if the line is not a text line or a freetext line. | 
|---|
| 126 | . S TEXT=$P(LINE,"|",6) Q:TEXT="" | 
|---|
| 127 | . I $D(^TMP($J,"MDHL7","TEXT",CNT))=11 D  Q | 
|---|
| 128 | . . ; Process the first line then go move on the the sub line | 
|---|
| 129 | . . D PROCESS(.TEXT) | 
|---|
| 130 | . . N CNT2 | 
|---|
| 131 | . . S CNT2=0 | 
|---|
| 132 | . . F  S CNT2=$O(^TMP($J,"MDHL7","TEXT",CNT,CNT2)) Q:CNT2<1  D | 
|---|
| 133 | . . . N MSG1 | 
|---|
| 134 | . . . S MSG1=^TMP($J,"MDHL7","TEXT",CNT,CNT2) | 
|---|
| 135 | . . . ; get the next message continution | 
|---|
| 136 | . . . S TEXT=TEXT_$P(MSG1,SEP) | 
|---|
| 137 | . . . D SAVE(TEXT) | 
|---|
| 138 | . . . S TEXT=$P(MSG1,SEP,2,($L(MSG1,SEP))) | 
|---|
| 139 | . . . D PROCESS(.TEXT) | 
|---|
| 140 | . . . Q | 
|---|
| 141 | . . I TEXT'="" S:TEXT["|" TEXT=$P(TEXT,"|") D SAVE(TEXT) | 
|---|
| 142 | . . Q | 
|---|
| 143 | . E  D SAVE(TEXT) | 
|---|
| 144 | . Q | 
|---|
| 145 | S ^MDD(703.1,MDIEN,.1,MDDZ,.2,0)="^^"_LN_"^"_LN_"^"_DT_"^" | 
|---|
| 146 | Q | 
|---|
| 147 | SAVE(TEXT) ; Save the data to the file 703.1 | 
|---|
| 148 | S LN=LN+1 | 
|---|
| 149 | S TEXT=$P(TEXT,SEP) | 
|---|
| 150 | S ^MDD(703.1,MDIEN,.1,MDDZ,.2,LN,0)=TEXT | 
|---|
| 151 | Q | 
|---|
| 152 | PROCESS(TEXT) ; Long lines | 
|---|
| 153 | N I,LN2,DEL | 
|---|
| 154 | S DEL=$L(TEXT,SEP) | 
|---|
| 155 | I DEL'>1 D  Q | 
|---|
| 156 | . D SAVE(TEXT) | 
|---|
| 157 | . S TEXT="" | 
|---|
| 158 | F I=1:1:(DEL-1) D | 
|---|
| 159 | . S LN2=$P(TEXT,SEP,I) | 
|---|
| 160 | . D SAVE(LN2) | 
|---|
| 161 | . ; Process the text and save the data up to the last del piece | 
|---|
| 162 | . Q | 
|---|
| 163 | ; This is to reset TEXT | 
|---|
| 164 | S TEXT=$P(TEXT,SEP,DEL) | 
|---|
| 165 | Q | 
|---|
| 166 | FTOHL7(DATE) ; This subroutine will make a file manager date an HL7 date | 
|---|
| 167 | N HLDATE,YYYY,MM,DD,HMS | 
|---|
| 168 | S HLDATE=($E(DATE,1,3)+1700)_$E(DATE,4,7)_$P(DATE,".",2) | 
|---|
| 169 | I $L(HLDATE)<14 S HLDATE=HLDATE_"00000000000000",HLDATE=$E(HLDATE,1,14) | 
|---|
| 170 | Q HLDATE | 
|---|