| 1 | VAFHUTL ;ALB/CM/PHH/EG/GAH UTILITIES ROUTINE ; 10/18/06
|
---|
| 2 | ;;5.3;Registration;**91,151,568,585,725**;Jun 06, 1996;Build 12
|
---|
| 3 | ;
|
---|
| 4 | ;
|
---|
| 5 | LTD(DFN) ;
|
---|
| 6 | ;This function will find the last time seen at the facility
|
---|
| 7 | ;
|
---|
| 8 | ; Input: DFN -- pointer to the patient in file #2
|
---|
| 9 | ;
|
---|
| 10 | ; Output: FileMan Date/time ^ I,D,R,A,S ^ HL7 Date/time ^ Variable PTR
|
---|
| 11 | ;
|
---|
| 12 | ; I = inpatient, D = discharge, R = Registration, A = Appointment
|
---|
| 13 | ; S = Stop Code
|
---|
| 14 | ;
|
---|
| 15 | ; If Unsuccessful, Output: -1^error message
|
---|
| 16 | ;
|
---|
| 17 | N LTD,X,FLG,LAST,VARPTR
|
---|
| 18 | ;
|
---|
| 19 | S FLG=""
|
---|
| 20 | ; - need a patient
|
---|
| 21 | I '$G(DFN) Q "-1^Missing Parameters for LTD function"
|
---|
| 22 | ;
|
---|
| 23 | ; - if current inpatient, set LTD = today and quit
|
---|
| 24 | I $G(^DPT(DFN,.105)) S LTD=DT,FLG="I" I $D(^DGPM("ATID1",DFN)) S LAST=9999999.9999999-($O(^DGPM("ATID1",DFN,""))) G LTDQ
|
---|
| 25 | ;
|
---|
| 26 | ; - get the last discharge date
|
---|
| 27 | S LTD=+$O(^DGPM("ATID3",DFN,"")) S:LTD FLG="D",LAST=9999999.9999999-LTD,LTD=LAST\1 S:LTD>DT (LAST,LTD)=DT
|
---|
| 28 | ;
|
---|
| 29 | ; - get the last registration date and compare to LTD
|
---|
| 30 | S X=+$O(^DPT(DFN,"DIS",0)) I X S X=9999999-X S:(X\1)>LTD LAST=X,LTD=X\1,FLG="R",VARPTR=DFN_";DPT("
|
---|
| 31 | ;
|
---|
| 32 | ; - get the last appointment and compare to LTD
|
---|
| 33 | N SDDATE,SDARRAY,SDCLIEN,SDSTAT
|
---|
| 34 | S SDDATE=LTD,SDARRAY("FLDS")=3,SDARRAY(4)=DFN
|
---|
| 35 | I $$SDAPI^SDAMA301(.SDARRAY)>0 D
|
---|
| 36 | .S SDCLIEN=0
|
---|
| 37 | .F S SDCLIEN=$O(^TMP($J,"SDAMA301",DFN,SDCLIEN)) Q:'SDCLIEN!(SDDATE>DT) D
|
---|
| 38 | ..F S SDDATE=$O(^TMP($J,"SDAMA301",DFN,SDCLIEN,SDDATE)) Q:'SDDATE!(SDDATE>DT) D
|
---|
| 39 | ...S SDSTAT=$P($P(^TMP($J,"SDAMA301",DFN,SDCLIEN,SDDATE),"^",3),";")
|
---|
| 40 | ...I SDSTAT="R" D
|
---|
| 41 | ....S LAST=SDDATE,LTD=SDDATE\1,FLG="A"
|
---|
| 42 | ....I $D(VARPTR) K VARPTR
|
---|
| 43 | K ^TMP($J,"SDAMA301")
|
---|
| 44 | ;
|
---|
| 45 | ; - get the last standalone after LTD
|
---|
| 46 | S X=$$GETLAST^SDOE(DFN,LTD_".9999")
|
---|
| 47 | I X S LAST=+$$SCE^DGSDU(X,1,0),LTD=LAST\1,FLG="S",VARPTR=X_";SCE("
|
---|
| 48 | ;
|
---|
| 49 | LTDQ I '$D(LAST) Q "-1^No last date"
|
---|
| 50 | I '$D(VARPTR) S VARPTR=$$VPTR(FLG,DFN,LAST)
|
---|
| 51 | I +VARPTR<1 Q "-1^No last date"
|
---|
| 52 | Q LAST_"^"_FLG_"^"_$$HLDATE^HLFNC(LAST,"TS")_"^"_VARPTR
|
---|
| 53 | ;
|
---|
| 54 | ;
|
---|
| 55 | VPTR(TYPE,DFN,EDATE) ;
|
---|
| 56 | ;Gets pointer for inpatient/outpatient event
|
---|
| 57 | ;
|
---|
| 58 | I '$D(TYPE)!('$D(DFN))!('$D(EDATE)) Q "-1^Missing Parameters for VPTR function"
|
---|
| 59 | N PTR,IND
|
---|
| 60 | I TYPE'="A"&(TYPE'="D")&(TYPE'="I") Q "-1^NOT IN or OUT PATIENT"
|
---|
| 61 | I TYPE="I"!(TYPE="D") D
|
---|
| 62 | .;inpatient or discharge
|
---|
| 63 | .S IND=$O(^DGPM("APID",DFN,"")),PTR=$O(^DGPM("APID",DFN,IND,""))
|
---|
| 64 | .I $D(^DGPM(PTR)) S PTR="-1^MISSING ENTRY"
|
---|
| 65 | .I +PTR>0 S PTR=PTR_";DGPM("
|
---|
| 66 | I TYPE="A" D
|
---|
| 67 | .;outpatient appointment
|
---|
| 68 | .I $D(^SCE("ADFN",DFN,LAST)) S PTR=$O(^SCE("ADFN",DFN,LAST,"")) S:('$D(^SCE(+PTR,0))) PTR=DFN_";DPT(" S:($D(^SCE(+PTR,0))) PTR=PTR_";SCE("
|
---|
| 69 | .I '$D(^SCE("ADFN",DFN,LAST)) S PTR=DFN_";DPT("
|
---|
| 70 | Q PTR
|
---|
| 71 | ;
|
---|
| 72 | GETF(SEG) ;NOT USED ANY MORE
|
---|
| 73 | ;This function will return all of the available fields for the SEG
|
---|
| 74 | ;segment as found in the HL7 DHCP PARAMETER file, as a string,
|
---|
| 75 | ;separated by commas
|
---|
| 76 | ;
|
---|
| 77 | ;Input: SEG - HL7 Segment
|
---|
| 78 | ;Output: Successful - string of field numbers seperated by commas
|
---|
| 79 | ;If unsuccessful, -1^error message will be returned.
|
---|
| 80 | ;
|
---|
| 81 | ;NOTE: HL("SAN") must be defined as Sending Application in file 771
|
---|
| 82 | ;N ENT,FLDS
|
---|
| 83 | ;I '$D(HLENTRY)!('$D(SEG)) Q "-1^MISSING PARAMETERS"
|
---|
| 84 | ;do lookup in #771 for HLENTRY
|
---|
| 85 | ;S DIC="^HL(770,",DIC(0)="MQZ",X=HLENTRY D ^DIC
|
---|
| 86 | ;I +Y<0 Q "-1^NO ENTRY IN FILE 771"
|
---|
| 87 | ;S ENT=$P(^HL(770,+Y,0),"^",8) I ENT="" Q "-1^NO ENTRY IN APPLICATION FIELD"
|
---|
| 88 | ;
|
---|
| 89 | N ENT,FLDS
|
---|
| 90 | I $G(HL("SAN"))]"",$G(SEG)]""
|
---|
| 91 | E Q "-1^MISSING PARAMETERS HL(SAN)!SEG"
|
---|
| 92 | ;
|
---|
| 93 | S ENT=$O(^HL(771,"B",HL("SAN"),0))
|
---|
| 94 | I 'ENT Q "-1^NO ENTRY IN FILE 771"
|
---|
| 95 | ;
|
---|
| 96 | S DIC="^HL(771,ENT,""SEG"",",X=SEG,DIC(0)="MQZ" D ^DIC
|
---|
| 97 | K DIC,X
|
---|
| 98 | I +Y<0 K Y Q "-1^NO ENTRY IN SUBFILE #771.05"
|
---|
| 99 | S FLDS=$P(^HL(771,ENT,"SEG",+Y,"F"),"^") K Y
|
---|
| 100 | Q FLDS
|
---|
| 101 | ;
|
---|
| 102 | UPDATE(PIVOT,ADATE,APTR,REMOVE) ;
|
---|
| 103 | ;
|
---|
| 104 | ;This function will allow the updating of PIVOT number entry, updating
|
---|
| 105 | ;EVENT DATE/TIME and the VARIABLE POINTER and setting of the DELETED
|
---|
| 106 | ;field.
|
---|
| 107 | ;
|
---|
| 108 | ;Input: PIVOT - Pivot Number
|
---|
| 109 | ; ADATE - Event Date/Time (new)
|
---|
| 110 | ; APTR - Variable Pointer (new)
|
---|
| 111 | ; REMOVE - 1 or null if 1 set DELETED field
|
---|
| 112 | ;
|
---|
| 113 | ;Output: 0 if successful
|
---|
| 114 | ; -1^error message if not successful
|
---|
| 115 | ;
|
---|
| 116 | I '$D(PIVOT) Q "-1^MISSING PARAMETERS"
|
---|
| 117 | I '$D(^VAT(391.71,"D",PIVOT)) Q "-1^NO PIVOT ENTRY"
|
---|
| 118 | I '$D(REMOVE) S REMOVE=""
|
---|
| 119 | I APTR?.N1";".A1"(" D
|
---|
| 120 | .I $P(APTR,";",2)="DPT(" S APTR="P.`"_+APTR
|
---|
| 121 | .I $P(APTR,";",2)="SCE(" S APTR="O.`"_+APTR
|
---|
| 122 | .I $P(APTR,";",2)="DGMP(" S APTR="I.`"_+APTR
|
---|
| 123 | S DA=$O(^VAT(391.71,"D",PIVOT,"")) I DA="" Q "-1^BAD CROSS REFERENCE"
|
---|
| 124 | S DIE="^VAT(391.71,",DIC(0)="MQZ",DR=""
|
---|
| 125 | I ADATE'="" S DR=DR_".01///"_ADATE_";"
|
---|
| 126 | I APTR'="" S DR=DR_".05///"_APTR_";"
|
---|
| 127 | S DR=DR_".07///"_REMOVE
|
---|
| 128 | L +^VAT(391.71,DA,0):5
|
---|
| 129 | I '$T Q "-1^Unable to lock entry in Pivot file"
|
---|
| 130 | D ^DIE L -^VAT(391.71,DA,0)
|
---|
| 131 | K DIE,DR,DIC,DA,X,Y
|
---|
| 132 | Q 0
|
---|
| 133 | ;
|
---|
| 134 | SEND(VAR1) ;this function will test for the on/off parameter to send ADT messages.
|
---|
| 135 | ;OUTPUTS 0 will indicate NOT to send
|
---|
| 136 | ; 1 will indicate TO send
|
---|
| 137 | ; 0 in second piece will indicate NOT to send HL7 v2.3
|
---|
| 138 | ; 1 in second piece will indicate to send HL7 v2.3
|
---|
| 139 | N VAR1
|
---|
| 140 | S VAR1=$O(^DG(43,0))
|
---|
| 141 | I +VAR1 S VAR1=$P($G(^DG(43,VAR1,"HL7")),"^",2,3)
|
---|
| 142 | Q VAR1
|
---|
| 143 | ;
|
---|
| 144 | HLQ(DATA) ;this function returns the value passed to it or HLQ
|
---|
| 145 | I $G(DATA)="" Q HLQ
|
---|
| 146 | Q DATA
|
---|
| 147 | ;
|
---|
| 148 | NOSEND() ;function TURNS OFF the on/off parameter to send ADT messages.
|
---|
| 149 | ; used by init to disable all ADT HL7 protocols
|
---|
| 150 | ;
|
---|
| 151 | ;OUTPUTS 1 will indicate it was SET NOT to send
|
---|
| 152 | ; 0 will indicate it failed to SET IT NOT to send
|
---|
| 153 | ;
|
---|
| 154 | N VAR1
|
---|
| 155 | S VAR1=$O(^DG(43,0))
|
---|
| 156 | I +VAR1 S $P(^DG(43,+VAR1,"HL7"),"^",2,3)="0^0" Q 0
|
---|
| 157 | Q 1
|
---|
| 158 | ;
|
---|
| 159 | DPROTO(PNAM) ;returns 0 if protocol disabled field is not null, ie disabled
|
---|
| 160 | ; returns 1 if protocol is NOT disabled
|
---|
| 161 | I $G(PNAM)]"",$P($G(^ORD(101,+$O(^ORD(101,"B",PNAM,0)),0)),"^",3)]"" Q 0
|
---|
| 162 | Q 1
|
---|