1 | RGADT2 ;HIRMFO/GJC-TFL FILE SEEDING ROUTINE (PD-MPI LOAD) ;09/21/99
|
---|
2 | ;;1.0;CLINICAL INFO RESOURCE NETWORK;**4,17,20**;30 Apr 99
|
---|
3 | Q ; quit if called from the top
|
---|
4 | ;
|
---|
5 | EN ; entry point to check the TREATING FACILITY LIST (TFL-391.91) file
|
---|
6 | ; for the proper LAST TREATMENT DATE. This code is part of the post
|
---|
7 | ; init for RG*1*4. This can also be called from the EN1 entry point
|
---|
8 | ; to determine the LAST TREATMENT DATE for a specific patient.
|
---|
9 | ; Closely linked to the MFU event message broadcasts used to update
|
---|
10 | ; the TFL (#391.91) file.
|
---|
11 | ;
|
---|
12 | ;IA: 2053 - FILE^DIE
|
---|
13 | ;IA: 2070 - check for national ICN, 1st piece "MPI" node (global read)
|
---|
14 | ;IA: 2701 - $$IFLOCAL^MPIF001
|
---|
15 | ;IA: 2546 - GETGEN/PARSE^SDOE
|
---|
16 | ;IA: 2988 - FILE^VAFCTFU
|
---|
17 | ;IA: 2541 - $$KSP^XUPARAM
|
---|
18 | ;IA: 2953 - ^SCE("ADFN"
|
---|
19 | ;IA: 10061 - IN5^VADPT
|
---|
20 | ;IA: 10103 - $$FMDIFF/$$NOW^XLFDT
|
---|
21 | ;IA: 10104 - $$STRIP^XLFSTR
|
---|
22 | ;IA: 10070 - ^XMD
|
---|
23 | ;IA: 10141 - $$PARCP/$$UPCP^XPDUTL
|
---|
24 | ;
|
---|
25 | Q:$P($G(^RGSITE(991.8,1,1)),"^",2) ; seeding process ran in the past
|
---|
26 | ;
|
---|
27 | S:$D(ZTQUEUED) ZTREQ="@"
|
---|
28 | S U="^",RGSITE=$$KSP^XUPARAM("INST") ;defines the local facility
|
---|
29 | S RGSTRT=$$NOW^XLFDT(),RGCNT=0
|
---|
30 | ; check to see if software is part of an KIDS install. If not, no
|
---|
31 | ; checkpoints needed.
|
---|
32 | S RGICN=$S($D(XPDNM):+$$PARCP^XPDUTL("POST2"),1:0)
|
---|
33 | ; check ALL patients with an Integration Control Number (ICN) for a
|
---|
34 | ; given facility, make sure the DATE LAST TREATED field in the TFL
|
---|
35 | ; file is correct.
|
---|
36 | F S RGICN=$O(^DPT("AICN",RGICN)) Q:RGICN'>0 D
|
---|
37 | . S RGDFN=0
|
---|
38 | . F S RGDFN=$O(^DPT("AICN",RGICN,RGDFN)) Q:RGDFN'>0 D EN1(RGDFN)
|
---|
39 | . S RGCNT=RGCNT+1 ; increment record counter
|
---|
40 | . S:$D(XPDNM) RGSAVE=$$UPCP^XPDUTL("POST2",RGICN)
|
---|
41 | . Q
|
---|
42 | S RGFIN=$$NOW^XLFDT() D EMAIL^RGADT2 ; send completion message to user
|
---|
43 | ; populate the 'MPI/PD SEEDING COMP DATE/TIME' (#12) field in the CIRN
|
---|
44 | ; SITE PARAMETER FILE (#991.8) (do not re-seed a facility)
|
---|
45 | K RGFDA S RGFDA(991.8,"1,",12)=$$NOW^XLFDT()
|
---|
46 | D FILE^DIE("K","RGFDA"),KILL
|
---|
47 | QUIT
|
---|
48 | ;
|
---|
49 | EN1(RGDFN,RGSUP) ; determine the LAST TREATMENT DATE for a single
|
---|
50 | ; patient called from our seeding process above.
|
---|
51 | ; input: RGDFN - the dfn of the patient
|
---|
52 | ; RGSUP - if 1, suppress add entries to the ADT HL7 PIVOT
|
---|
53 | ; (#391.71) file for TF messaging - VAFCTFMF (optional)
|
---|
54 | ; output: RGDATE - patient's DATE LAST TREATED
|
---|
55 | ; RGENVR - event reason
|
---|
56 | ;
|
---|
57 | Q:$$LOCICN(RGDFN,$G(RGICN)) ; local ICN
|
---|
58 | S U="^"
|
---|
59 | S RGSITE=$$KSP^XUPARAM("INST") ;defines the local facility
|
---|
60 | S (RGLAST,RGADMDIS)=$$ADMDIS(RGDFN) ; dt_"^"_event type or ""
|
---|
61 | S RGADMDIS=$S(RGADMDIS]"":$P(RGADMDIS,"^"),1:"") ; event dt or null
|
---|
62 | S:$P(RGLAST,"^",2)=3!(RGLAST="") RGENCDT=$$ENCDT(RGDFN,RGADMDIS)
|
---|
63 | ; patient has been discharged or has never been admitted. Has this
|
---|
64 | ; individual been checked out of a clinic?
|
---|
65 | I $D(RGENCDT)#2,($P(RGLAST,U)) S RGLAST=$S(+RGENCDT>+RGLAST:RGENCDT,1:RGLAST)
|
---|
66 | I $D(RGENCDT)#2,('$P(RGLAST,U)) S RGLAST=RGENCDT
|
---|
67 | S RGTYPE=$P(RGLAST,"^",2),RGDATE=+RGLAST
|
---|
68 | ; input variables to FILE^VAFCTFU
|
---|
69 | ; RGDFN - patient ien ; RGSITE - treating facility
|
---|
70 | ; RGDATE - date last treated ; RGENVR - event reason
|
---|
71 | ;
|
---|
72 | I RGDATE D SETMSG,FILE^VAFCTFU(RGDFN,RGSITE_U_RGDATE_U_RGENVR,$G(RGSUP))
|
---|
73 | ; update the TFL file for the site running the seeding process,
|
---|
74 | ; then build the HL7 message with the new DATE LAST TREATED &
|
---|
75 | ; ADT/HL7 EVENT REASON values & send them to our CMOR/subscribers.
|
---|
76 | ;
|
---|
77 | D:$G(XPDNM)'="RG*1.0*4" KILL ; single patient operation, kill all
|
---|
78 | ; variables (EN1 re-entrant when running post-install for RG*1.0*4)
|
---|
79 | Q
|
---|
80 | ;
|
---|
81 | KILL ; kill and quit
|
---|
82 | K DFN,RGADMDIS,RGCNT,RGDATE,RGDFN,RGENCDT,RGENVR,RGFDA,RGFIN,RGICN
|
---|
83 | K RGLAST,RGSAVE,RGSITE,RGSTRT,RGTYPE
|
---|
84 | Q
|
---|
85 | ;
|
---|
86 | ADMDIS(DFN) ; find the patient's last admission and discharge dates if
|
---|
87 | ; they exist.
|
---|
88 | ; Input: DFN - ien of the patient (file 2)
|
---|
89 | ;Output: a valid discharge/admission date/time concatenated with
|
---|
90 | ; the event type (1=admission, 3=discharge) -or- null
|
---|
91 | N %,VAERR,VAIP S VAIP("D")="LAST" D IN5^VADPT
|
---|
92 | I '+$G(VAIP(17,1)),('+$G(VAIP(13,1))) Q ""
|
---|
93 | ; no discharge date, no admission date, return null
|
---|
94 | I '+$G(VAIP(17,1)) Q $P($G(VAIP(13,1)),U)_"^1"
|
---|
95 | ; no discharge date, return admission date
|
---|
96 | I '+$G(VAIP(13,1)) Q $P($G(VAIP(17,1)),U)_"^3"
|
---|
97 | ; no admission date, return discharge date
|
---|
98 | I +$G(VAIP(17,1))>(+$G(VAIP(13,1))) Q +$G(VAIP(17,1))_"^3"
|
---|
99 | ; return discharge date
|
---|
100 | Q +$G(VAIP(13,1))_"^1" ; return admission date
|
---|
101 | ;
|
---|
102 | ENCDT(DFN,INPDT) ; find the last patient check out date/time. 'ADFN'
|
---|
103 | ; cross-reference accessed through DBIA: 2953
|
---|
104 | ; Input: DFN - ien of the patient (file 2)
|
---|
105 | ; INPDT - date (if any) returned from the inpatient admission/
|
---|
106 | ; discharge subroutine
|
---|
107 | ;Output: a valid discharge/admission date/time concatenated with
|
---|
108 | ; the event type (5=check out) -or- null
|
---|
109 | Q:'DFN "" ; we need dfn defined
|
---|
110 | K RGDATA,RGPURGE,RGX,RGX1,RGX2 N RGX3
|
---|
111 | S RGX=9999999.9999999,RGX2=0,RGX3=""
|
---|
112 | F S RGX=$O(^SCE("ADFN",DFN,RGX),-1) Q:'RGX!(INPDT>RGX) D Q:RGX2
|
---|
113 | . S RGX1=0 F S RGX1=$O(^SCE("ADFN",DFN,RGX,RGX1)) Q:'RGX1 D Q:RGX2
|
---|
114 | .. D GETGEN^SDOE(RGX1,"RGDATA")
|
---|
115 | .. D PARSE^SDOE(.RGDATA,"EXTERNAL","RGPARSE")
|
---|
116 | .. I $G(RGPARSE(.12))="CHECKED OUT" S RGX2=1,RGX3=RGX
|
---|
117 | .. K RGDATA,RGPARSE
|
---|
118 | .. Q
|
---|
119 | . Q
|
---|
120 | K RGDATA,RGPURGE,RGX,RGX1,RGX2
|
---|
121 | Q RGX3_"^5" ; X is either null or the date/time of the check out
|
---|
122 | ;
|
---|
123 | SETMSG ; define the variables used to build a HL7 message (RGADT1)
|
---|
124 | S DFN=RGDFN
|
---|
125 | S RGENVR=$S(RGTYPE=1:"A1",RGTYPE=3:"A2",1:"A3") ;A1=adm;A2=dis;A3=CO
|
---|
126 | Q
|
---|
127 | ;
|
---|
128 | EMAIL ; Send a completion email message to the user who installed this patch,
|
---|
129 | ; RG*1*4. Show the number of records processed, elapsed time and the
|
---|
130 | ; number of records processed per minute.
|
---|
131 | N RGELAPS,RGARY,RGMIN
|
---|
132 | S XMDUZ=.5,XMY(DUZ)="",XMTEXT="RGARY(1,"
|
---|
133 | S XMSUB="CIRN-CPRS DATE LAST TREATED seeding (#391.91 ; .03) results"
|
---|
134 | S RGMIN=$$FMDIFF^XLFDT(RGFIN,RGSTRT,2)/60 ; # of sec x (1 min/60 sec)
|
---|
135 | S:RGMIN=0 RGMIN=1 ; avoid a possible divide by zero
|
---|
136 | S RGELAPS=$$FMDIFF^XLFDT(RGFIN,RGSTRT,3)
|
---|
137 | S RGARY(1,1)="# of processed patients, in the PATIENT (#2) file"
|
---|
138 | S RGARY(1,2)="with an ICN: "_RGCNT
|
---|
139 | S RGARY(1,3)="TFL seeding process run time: "_RGELAPS_" (DD HH:MM:SS format)"
|
---|
140 | S RGARY(1,4)="# of records processed per minute: "_$$STRIP^XLFSTR($J((RGCNT/RGMIN),8,2)," ")
|
---|
141 | D ^XMD K XMDUZ,XMSUB,XMTEXT,XMY
|
---|
142 | Q
|
---|
143 | ;
|
---|
144 | LOCICN(DFN,ICN) ; check if this patient has a national ICN without having a
|
---|
145 | ; local ICN. This function is used when an entire site (all patients)
|
---|
146 | ; is seeding, or for individual patient seeding.
|
---|
147 | ; note: IA 2070 covers the hit on the 'MPI' node
|
---|
148 | ; IA 2701 covers the call to $$IFLOCAL^MPIF001
|
---|
149 | ;input variables:
|
---|
150 | ; DFN(required)-Patient ien (PATIENT file #2)
|
---|
151 | ; ICN(optional)-Integration Control Number(fld: 991.01, file 2)
|
---|
152 | ;output variable:
|
---|
153 | ; FLAG-0 if the patient has a national ICN and not a local ICN, else 1
|
---|
154 | N FLAG S FLAG=1
|
---|
155 | I +$G(ICN) D
|
---|
156 | . I $P($G(^DPT(DFN,"MPI")),"^")=ICN,('$$IFLOCAL^MPIF001(DFN)) S FLAG=0
|
---|
157 | . Q
|
---|
158 | E D
|
---|
159 | . I $P($G(^DPT(DFN,"MPI")),"^"),('$$IFLOCAL^MPIF001(DFN)) S FLAG=0
|
---|
160 | . Q
|
---|
161 | Q FLAG
|
---|