1 | RGJCREC ;SF/JC,LTL-MPI/PD SUBSCRIPTION PROCESSOR ;05/12/98
|
---|
2 | ;;1.0;CLINICAL INFO RESOURCE NETWORK;**1,8,19**;30 Apr 99
|
---|
3 | ;
|
---|
4 | ;Reference to $$UPDATE^MPIFAPI supported by IA #2706
|
---|
5 | ;Reference to $$SEND2^VAFCUTL1 supported by IA #2779
|
---|
6 | ;Reference to ^DPT( supported by IA #2969
|
---|
7 | ;
|
---|
8 | REC ;Receive inbound MPI/PD Subscription request
|
---|
9 | ;Read in message for file 774 Master File Update
|
---|
10 | ;
|
---|
11 | Q:($G(HL("MTN"))'="MFN")!($G(HL("ETN"))'="Z15") ;only process MPI/PD MFN/Z15 messages
|
---|
12 | K RGS,RGSEG,RGFS,RGCS,RGEC,RGSS,RGFILE,RGACT,RGCD,RGID,RGICN,RGSSN,RGPN,RGLL,RGTP,RGAD,RGTD,RGRAP,RGCMOR,RGDFN,RGPPFI,RGSCN,RGCURI,RGFROM,RGTO,RGSTUB,RGAD1,RGL,RGRC,HLER
|
---|
13 | N RGLOG,RGMTXT,X D START^RGHLLOG(HLMTIEN,"SCN_REQ","")
|
---|
14 | ;
|
---|
15 | S RGS="",U="^" N J
|
---|
16 | S RGFS=HL("FS") ;Field
|
---|
17 | S RGCS=$E(HL("ECH"),1) ;Component
|
---|
18 | S RGRC=$E(HL("ECH"),2) ;Repetition
|
---|
19 | S RGEC=$E(HL("ECH"),3) ;Escape
|
---|
20 | S RGSS=$E(HL("ECH"),4) ;Sub-component separator
|
---|
21 | F RGI=1:1 X HLNEXT Q:HLQUIT'>0 S (RGSEG,RGS(RGI))=HLNODE D
|
---|
22 | .S J=0 F S J=$O(HLNODE(J)) Q:'J S RGS(RGI,J)=HLNODE(J)
|
---|
23 | .D PARS
|
---|
24 | ;K RGLL ;TS 3-27-98
|
---|
25 | ;D PARS add this to hl7 processing logic above
|
---|
26 | I $D(RGFILE) Q:RGFILE'=774
|
---|
27 | ;Pt DFN
|
---|
28 | S RGDFN=$$GETDFN^MPIF001(+RGICN)
|
---|
29 | I +$$SEND2^VAFCUTL1(RGDFN,"T") D CLEAN Q ;don't process test patients
|
---|
30 | ;Validate DFN/ICN/SSN on receiving system
|
---|
31 | I RGDFN'>0 D D CLEAN Q
|
---|
32 | . S RGMTXT=""
|
---|
33 | . D EXC^RGHLLOG(210,"Msg#"_$G(HL("MID"))_" Bad DFN, "_$G(RGDFN)_", for "_$G(RGPN)_" (ICN#"_$G(RGICN)_")"_RGMTXT,RGDFN) D STOP^RGHLLOG(1) Q
|
---|
34 | I $P(^DPT(RGDFN,0),U,9)'=RGSSN D D CLEAN Q
|
---|
35 | . S RGMTXT=" See the Exception Handling document on the MPI/PD web site."
|
---|
36 | . D EXC^RGHLLOG(213,"Msg#"_$G(HL("MID"))_" Mismatched SSN,"_$P(^DPT(RGDFN,0),U,9)_"/"_$G(RGSSN)_" for "_$G(RGPN)_" (ICN#"_$G(RGICN)_")"_RGMTXT,RGDFN) D STOP^RGHLLOG(1) Q
|
---|
37 | ;Pt CMOR/Subscription Control Number
|
---|
38 | S RGPPFI=$$GETVCCI^MPIF001(RGDFN)
|
---|
39 | I +RGPPFI<1 D D CLEAN Q
|
---|
40 | . S RGMTXT=""
|
---|
41 | . D EXC^RGHLLOG(211,"Msg#"_$G(HL("MID"))_" Bad CMOR "_$G(RGPPFI)_" for DFN#"_$G(RGDFN)_RGMTXT,RGDFN) D STOP^RGHLLOG(1) Q
|
---|
42 | ;Verify that sender and receiver agree on CMOR
|
---|
43 | I RGCMOR'=RGPPFI D D CLEAN Q
|
---|
44 | . S RGMTXT=""
|
---|
45 | . D EXC^RGHLLOG(211,"Msg#"_$G(HL("MID"))_" Mismatched CMOR, "_$G(RGCMOR)_"/"_$G(RGPPFI)_" for "_$G(RGPN)_" (ICN#"_$G(RGICN)_")"_RGMTXT,RGDFN) D STOP^RGHLLOG(1) Q
|
---|
46 | S RGSCN=$$GETSCN(RGDFN)
|
---|
47 | I RGSCN="" D D CLEAN Q
|
---|
48 | . S RGMTXT=""
|
---|
49 | . D EXC^RGHLLOG(228,"Msg#"_$G(HL("MPI"))_" "_$G(RGPN)_" Does not exist in patient database. "_RGMTXT,RGDFN) D STOP^RGHLLOG(1) Q
|
---|
50 | ;Current Site ien
|
---|
51 | S RGCURI=+$$SITE^VASITE()
|
---|
52 | ;If not CMOR, don't update anyone else
|
---|
53 | I $$IFVCCI^MPIF001(RGDFN)'=1 D FIL K RGLL Q ;TS 3-27-98
|
---|
54 | ;If filing data at owner site, que update to CLINICAL SUBSCRIBERS
|
---|
55 | D REC1
|
---|
56 | ;Add new clinical subscriber to local registry
|
---|
57 | D FIL
|
---|
58 | D REC2
|
---|
59 | CLEAN K RGSTUB,RGLL ;TS 3-27-98
|
---|
60 | D STOP^RGHLLOG(0)
|
---|
61 | K RGS,RGSEG,RGFS,RGCS,RGEC,RGSS,RGFILE,RGACT,RGCD,RGID,RGICN,RGSSN,RGPN,RGLL,RGTP,RGAD,RGTD,RGRAP,RGCMOR,RGDFN,RGPPFI,RGSCN,RGCURI,RGFROM,RGTO,RGSTUB,RGAD1,RGL,RGRC,RGI
|
---|
62 | Q
|
---|
63 | REC1 ;Update clinical subscribers with newest one
|
---|
64 | D GET^RGRSDYN1(RGDFN,RGSCN,0,"",.RGLL)
|
---|
65 | N I S I=0 F S I=$O(RGLL("LINKS",I)) Q:I<1 D
|
---|
66 | .S RGFROM=RGLL ;New Subscriber
|
---|
67 | .I $E(RGFROM,1,2)'="VA" D START^RGHLLOG(HLMTIEN,"SCN_REQ","") D EXC^RGHLLOG(224,"MSG#"_$G(HL("MID"))_" Unable to send Subscription Request from "_RGFROM_". This is not a MPI/PD site.",RGDFN) D CLEAN Q
|
---|
68 | .S RGTO=$P(RGLL("LINKS",I),U,2) ;Destination (Clinical Subscriber)
|
---|
69 | .I $E(RGTO,1,2)'="VA" D START^RGHLLOG(HLMTIEN,"SCN_REQ","") D EXC^RGHLLOG(224,"MSG#"_$G(HL("MID"))_" Unable to send Subscription Request to "_RGTO_". This is not a MPI/PD site.",RGDFN) D CLEAN Q
|
---|
70 | .S RGSTUB=RGFROM_U_RGTO_U_RGICN_U_RGPN_U_RGTP_U_RGAD_U_$G(RGTD)
|
---|
71 | .D:RGFROM'=RGTO EN^RGEQ("SCN_REQ",RGSTUB) ;put on Event Queue
|
---|
72 | Q
|
---|
73 | REC2 ;Update newest subscriber with previous subscribers and CMOR
|
---|
74 | ;change 4/10/98 CMC to get links
|
---|
75 | K RGLL("LINKS")
|
---|
76 | D GET^RGRSDYN1(RGDFN,RGSCN,0,"",.RGLL)
|
---|
77 | S I=0 F S I=$O(RGLL("LINKS",I)) Q:I<1 D
|
---|
78 | .S RGTO=RGLL
|
---|
79 | .I $E(RGTO,1,2)'="VA" D START^RGHLLOG(HLMTIEN,"SCN_REQ","") D EXC^RGHLLOG(224,"MSG#"_$G(HL("MID"))_" Unable to send Subscription Request to "_RGTO_". This is not a MPI/PD site.",RGDFN) D CLEAN Q
|
---|
80 | .S RGFROM=$P(RGLL("LINKS",I),U,2)
|
---|
81 | .I $E(RGFROM,1,2)'="VA" D START^RGHLLOG(HLMTIEN,"SCN_REQ","") D EXC^RGHLLOG(224,"MSG#"_$G(HL("MID"))_" Unable to send Subscription Request from "_RGFROM_". This is not a MPI/PD site.",RGDFN) D CLEAN Q
|
---|
82 | .S RGSTUB=RGFROM_U_RGTO_U_RGICN_U_RGPN_U_RGTP_U_RGAD_U_$G(RGTD)
|
---|
83 | .I RGTO'=RGFROM D EN^RGEQ("SCN_REQ",RGSTUB)
|
---|
84 | ;Now send current institution (CMOR)
|
---|
85 | K RGL
|
---|
86 | D LINK^HLUTIL3(RGCURI,.RGL) S RGL=$O(RGL(0)) Q:RGL<1
|
---|
87 | ;changed cmc 5/9/98
|
---|
88 | S RGSTUB=RGL(RGL)_U_RGLL_U_RGICN_U_RGPN_U_RGTP_U_RGAD_U_$G(RGTD)
|
---|
89 | D:RGL(RGL)'=RGLL EN^RGEQ("SCN_REQ",RGSTUB)
|
---|
90 | K RGSTUB
|
---|
91 | Q
|
---|
92 | PARS ;Parse it
|
---|
93 | I $E(RGSEG,1,3)="MFI" D
|
---|
94 | .S RGFILE=+$P(RGSEG,RGFS,2) ;File number
|
---|
95 | I $E(RGSEG,1,3)="MFE" D
|
---|
96 | .S RGACT=$P(RGSEG,RGFS,2) ;Action
|
---|
97 | .S RGCD=$P(RGSEG,RGFS,4) ;creation date
|
---|
98 | .S RGID=$P(RGSEG,RGFS,5) D ;Primary Key
|
---|
99 | ..S RGICN=+RGID,RGSSN=$P(RGID,RGSS,2),RGPN=$P(RGID,RGCS,2) ;ICN,Patient Name
|
---|
100 | I $E(RGSEG,1,3)="ZSD" D
|
---|
101 | .S RGLL=$P(RGSEG,RGFS,2) ;Link
|
---|
102 | .S RGTP=$P(RGSEG,RGFS,3) ;Type
|
---|
103 | .S RGAD=$P(RGSEG,RGFS,4) ;Activation Date
|
---|
104 | .S RGTD=$P(RGSEG,RGFS,5) ;Termination Date
|
---|
105 | .S RGRAP=$P(RGSEG,RGFS,6) ;Receiving Application
|
---|
106 | .S RGCMOR=$P(RGSEG,RGFS,7) ;Coordinating Master of Record
|
---|
107 | Q
|
---|
108 | GETSCN(RGDPT) ;Return existing SCN or Activate a new subscription for this patient
|
---|
109 | ;RGDPT=PATIENT DFN
|
---|
110 | N RGAR,RGAN
|
---|
111 | ;get subscription control #
|
---|
112 | S RGSCN=+$P($$MPINODE^MPIFAPI(RGDPT),"^",5)
|
---|
113 | ;if no SCN, create new and update 991.05, then return result
|
---|
114 | I 'RGSCN S RGSCN=$$ACT^HLSUB S RGAR(991.05)=RGSCN S RGAN=$$UPDATE^MPIFAPI(RGDPT,"RGAR") I RGAN=-1 S RGSCN=""
|
---|
115 | Q RGSCN
|
---|
116 | FIL ;File message
|
---|
117 | ;Normalize dates
|
---|
118 | N RGCHK,RGTD1
|
---|
119 | S RGAD1=$$DTHF^RGHLUT(RGAD)
|
---|
120 | I $G(RGTD)]"" S RGTD1=$$DTHF^RGHLUT(RGTD)
|
---|
121 | ;check to see if this subscriber is yourself
|
---|
122 | D LINK^HLUTIL3(+$$SITE^VASITE,.RGCHK) Q:$O(RGCHK(0))="" S RGCHK=RGCHK($O(RGCHK(0)))
|
---|
123 | I $G(RGCHK)'=RGLL D UPD^HLSUB(RGSCN,RGLL,RGTP,RGAD1,$G(RGTD1),$G(RGRAP),.HLER)
|
---|
124 | Q
|
---|
125 | GETINST(LINK) ;returns institution ien from logical link
|
---|
126 | N DIC,X,Y
|
---|
127 | I $G(LINK)="" Q 0
|
---|
128 | S DIC=870,DIC(0)="EMQZ",X=LINK D ^DIC
|
---|
129 | I Y=-1 Q Y
|
---|
130 | Q $P(Y(0),"^",2)
|
---|