1 | ECXLABN ;ALB/JAP,BIR/CML-Lab Extract for DSS (New Format - With LMIP Codes) ; 10/23/07 3:01pm
|
---|
2 | ;;3.0;DSS EXTRACTS;**1,11,8,13,28,24,30,31,32,33,39,42,46,70,71,80,92,107,105**;Dec 22, 1997;Build 70
|
---|
3 | BEG ;entry point
|
---|
4 | D SETUP I ECFILE="" Q
|
---|
5 | D ^ECXTRAC,^ECXKILL
|
---|
6 | Q
|
---|
7 | ;
|
---|
8 | START ; entry when queued
|
---|
9 | K ^LRO(64.03),^TMP($J,"ECXP")
|
---|
10 | N ECDOCPC
|
---|
11 | S LRSDT=ECSD,LREDT=ECED,QFLG=0
|
---|
12 | D ^LRCAPDSS
|
---|
13 | ;quit if no completion date for API compile
|
---|
14 | I '$P($G(^LRO(64.03,1,1,1,0)),U,4) Q
|
---|
15 | ;quit if tasked and user sends stop request
|
---|
16 | I $D(ZTQUEUED),$$S^%ZTLOAD D Q
|
---|
17 | .S QFLG=1
|
---|
18 | .K ^LRO(64.03) S ^LRO(64.03,0)="WKLD LOG FILE^64.03^"
|
---|
19 | ;otherwise, continue
|
---|
20 | K ECXDD D FIELD^DID(64.03,1,,"SPECIFIER","ECXDD")
|
---|
21 | S ECPROF=$E(+$P(ECXDD("SPECIFIER"),"P",2)),ECLRN=1 K ECXDD
|
---|
22 | F S ECLRN=$O(^LRO(64.03,ECLRN)) Q:'ECLRN D Q:QFLG
|
---|
23 | .Q:'$D(^LRO(64.03,ECLRN,0))
|
---|
24 | .S EC1=^LRO(64.03,ECLRN,0),ECDOC=ECPROF_$P(EC1,U,2)
|
---|
25 | .S ECDOCNPI=$$NPI^XUSNPI("Individual_ID",$P(EC1,U,2),$P(EC1,U,4))
|
---|
26 | .S:+ECDOCNPI'>0 ECDOCNPI="" S ECDOCNPI=$P(ECDOCNPI,U)
|
---|
27 | .S ECLOC=$P(EC1,U,15),EC=$P(EC1,U,3),ECDOCPC=$$PRVCLASS^ECXUTL($P(EC1,U,2),$P(EC1,U,4))
|
---|
28 | .I EC]"" D GET
|
---|
29 | K ^LRO(64.03),^TMP($J,"ECXP") S ^LRO(64.03,0)="WKLD LOG FILE^64.03^"
|
---|
30 | K ECDOCNPI,ECXAGC,ECXL1,ECXL2
|
---|
31 | Q
|
---|
32 | ;
|
---|
33 | GET ;get data
|
---|
34 | N X,ECXSTN,QFLAG
|
---|
35 | S ECF=$S($P(EC,";",2)="DPT(":2,$P(EC,";",2)="LRT(67,":67,1:0) Q:'ECF
|
---|
36 | S ECIFN=$P(EC,";"),QFLAG=0
|
---|
37 | ;resolve ecloc
|
---|
38 | S ECXL1=+$P(ECLOC,";",1),ECXL2=$P(ECLOC,";",2)
|
---|
39 | I ECF=2 S ECLOC=$S(ECXL1>0:ECXL1,1:"") I ECXL2]"",ECXL2'="SC(" S ECLOC=""
|
---|
40 | I ECF=67 D S ECLOC=ECXSTN
|
---|
41 | .S (ECXSTN,ECXAGC)=""
|
---|
42 | .I (ECXL2'="DIC(4,")!('$D(^DIC(4,ECXL1))) S ECXSTN="XXXXX",ECXAGC="XX" Q
|
---|
43 | .S ECXSTN=$P(^DIC(4,ECXL1,"99"),U,1),ECXAGC=$E($P(^(99),U,5),1,2)
|
---|
44 | .S:ECXSTN="" ECXSTN="ZZZZZ" S:ECXAGC="" ECXAGC="ZZ"
|
---|
45 | S ECDT=$P(EC1,U,13),ECD=$P(ECDT,"."),ECTM=$$ECXTIME^ECXUTL(ECDT)
|
---|
46 | S ECWKLD=$P(EC1,U,11),ECWK="" I $D(^LAM(ECWKLD,0)) S ECWK=$P(^(0),U,2)
|
---|
47 | S (ECXADMDT,ECTREAT,ECNA,ECSN,ECMN,ECPTTM,ECPTPR,ECCLAS)="",ECA="O",ECXERR=0
|
---|
48 | S (ECPTNPI,ECASPR,ECCLAS2,ECASNPI)=""
|
---|
49 | ;get the patient data if record is in file #2
|
---|
50 | I ECF=2 D PAT(ECIFN,ECDT,.ECXERR)
|
---|
51 | Q:ECXERR
|
---|
52 | ;get patient data if record is in file #67
|
---|
53 | I ECF=67 S ECSN="000123456",ECNA="RFRL" I $D(^LRT(67,ECIFN,0)) D Q:QFLAG
|
---|
54 | .S ECXMPI="",EC0=^LRT(67,ECIFN,0),ECNA=$E($P($P(EC0,U),",")_" ",1,4)
|
---|
55 | .S ECSN=$P(EC0,U,9),ECXERI="" D
|
---|
56 | ..S ECNA=$TR(ECNA,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
---|
57 | ..I ECSN="" S ECSN="000123456" Q
|
---|
58 | ..S ECSN=$TR(ECSN," "),ECSN=$TR(ECSN,"-")
|
---|
59 | ..I ($L(ECSN)<9)!($L(ECSN)>10) S ECSN="000123456" Q
|
---|
60 | ..I $L(ECSN)=9,ECSN'?9N S ECSN="000123456" Q
|
---|
61 | ..I $L(ECSN)=10,ECSN'?9N1"P" S ECSN="000123456"
|
---|
62 | ..I '$$SSN^ECXUTL5(ECSN,ECF) S QFLAG=1
|
---|
63 | ;
|
---|
64 | ;- Only set treating spec (TS) to TS in file #64.03 if it does not exist
|
---|
65 | I ECA="I",ECTREAT="" S ECTREAT=$P($G(^DIC(45.7,+$P(EC1,U,10),0)),U,2)
|
---|
66 | S (ECXDOM,ECXDSSD)=""
|
---|
67 | S X=$G(^ECX(727.831,+ECTREAT,0)) S:X'="" ECXDOM=$P(X,U,2)
|
---|
68 | ;
|
---|
69 | ;- Get ordering stop code and ordering date
|
---|
70 | S ECXORDST=+$P(EC1,U,15),ECXORDST=$S(ECXORDST:$P($G(^ECX(728.44,ECXORDST,0)),U,2),1:"")
|
---|
71 | S ECXORDDT=$S($P(EC1,U,14):$$ECXDATE^ECXUTL($P(EC1,U,14),ECXYM),1:"")
|
---|
72 | ;
|
---|
73 | ;- Get Production Division - ECXDIEN added p-80
|
---|
74 | N ECXPDIV,ECXDIEN S ECXDIEN=$O(^DIC(4,"D",ECINST,"")),ECXPDIV=$$RADDIV^ECXDEPT(ECXDIEN) ;P-46
|
---|
75 | K ECXDIEN
|
---|
76 | ;
|
---|
77 | ;- Observation patient indicator (YES/NO)
|
---|
78 | S ECXOBS=$$OBSPAT^ECXUTL4(ECA,ECTREAT)
|
---|
79 | ;
|
---|
80 | ;- If no encounter number don't file record
|
---|
81 | S ECXENC=$$ENCNUM^ECXUTL4(ECA,ECSN,ECXADMDT,ECD,ECTREAT,ECXOBS,ECHEAD,,) Q:ECXENC=""
|
---|
82 | ;create extract record only if patient name and accession area exist
|
---|
83 | I ECNA]"" S ECT=$P(EC1,U,8),ECURG=$P(EC1,U,9),EC=+$P(EC1,U,7) I EC D
|
---|
84 | .S:ECF=2 ECACA=EC_U_$P($G(^LRO(68,EC,0)),U,11)
|
---|
85 | .S:ECF=67 ECACA=ECXAGC_U_$P($G(^LRO(68,EC,0)),U,11)
|
---|
86 | .D FILE
|
---|
87 | Q
|
---|
88 | ;
|
---|
89 | PAT(ECXDFN,ECXDATE,ECXERR) ;get/set patient data
|
---|
90 | N X,OK,PT
|
---|
91 | ;get data
|
---|
92 | I $D(^TMP($J,"ECXP",ECXDFN)) D
|
---|
93 | .S PT=^TMP($J,"ECXP",ECXDFN),ECNA=$P(PT,U)
|
---|
94 | .S ECSN=$P(PT,U,2),ECXMPI=$P(PT,U,3),ECXERI=$P(PT,U,4)
|
---|
95 | ;set data and save for later
|
---|
96 | I '$D(^TMP($J,"ECXP",ECXDFN)) D Q:'OK
|
---|
97 | .K ECXPAT S OK=$$PAT^ECXUTL3(ECXDFN,$P(ECSD,"."),"1;3",.ECXPAT)
|
---|
98 | .I 'OK S ECXERR=1 Q
|
---|
99 | .S ECNA=ECXPAT("NAME"),ECSN=ECXPAT("SSN"),ECXMPI=ECXPAT("MPI")
|
---|
100 | .S ECXERI=ECXPAT("ERI")
|
---|
101 | .S ^TMP($J,"ECXP",ECXDFN)=ECNA_U_ECSN_U_ECXMPI_U_ECXERI
|
---|
102 | ;get date specific data
|
---|
103 | S X=$$INP^ECXUTL2(ECXDFN,ECXDATE),ECA=$P(X,U),ECMN=$P(X,U,2),ECTREAT=$P(X,U,3),ECXADMDT=$P(X,U,4)
|
---|
104 | S X=$$PRIMARY^ECXUTL2(ECXDFN,$P(ECXDATE,"."),ECPROF)
|
---|
105 | S ECPTTM=$P(X,U,1),ECPTPR=$P(X,U,2),ECCLAS=$P(X,U,3),ECPTNPI=$P(X,U,4)
|
---|
106 | S ECASPR=$P(X,U,5),ECCLAS2=$P(X,U,6),ECASNPI=$P(X,U,7)
|
---|
107 | Q
|
---|
108 | ;
|
---|
109 | FILE ;file record
|
---|
110 | ;node0
|
---|
111 | ;facility^patient number^SSN (or equivalent)^name^in/out ECA^
|
---|
112 | ;day^accession area^abbreviation^test^urgency^treating spec^
|
---|
113 | ;location^provider and file^
|
---|
114 | ;movement number^file^time^workload code^primary care team^
|
---|
115 | ;primary care provider
|
---|
116 | ;node1
|
---|
117 | ;mpi^dss dept^provider npi^pc provider npi^pc prov person class^
|
---|
118 | ;assoc pc prov^assoc pc prov person class^assoc pc prov npi^
|
---|
119 | ;dom ECXDOM^observ pat ind ECXOBS^encounter num ECXENC^
|
---|
120 | ;ord stop code ECXORDST^ord date ECXORDDT^production division
|
---|
121 | ;ECXPDIV^^ordering provider person class^emergency response indicator
|
---|
122 | ;(FEMA) ECXERI^associate pc provider npi ECASNPI^primary care provider
|
---|
123 | ;npi ECPTNPI^provider npi ECDOCNPI
|
---|
124 | ;ECDOCPC
|
---|
125 | N DA,DIK
|
---|
126 | S EC7=$O(^ECX(ECFILE,999999999),-1),EC7=EC7+1
|
---|
127 | S ECODE=EC7_U_EC23_U_ECINST_U_ECIFN_U_ECSN_U_ECNA_U_ECA_U
|
---|
128 | S ECODE=ECODE_$$ECXDATE^ECXUTL(ECD,ECXYM)_U_ECACA_U_ECT_U_ECURG_U
|
---|
129 | ;convert specialty to PTF Code for transmission
|
---|
130 | N ECXDATA
|
---|
131 | S ECXDATA=$$TSDATA^DGACT(42.4,+ECTREAT,.ECXDATA)
|
---|
132 | S ECTREAT=$G(ECXDATA(7))
|
---|
133 | ;done
|
---|
134 | S ECODE=ECODE_ECTREAT_U_ECLOC_U_ECDOC_U_ECMN_U_ECF_U_ECTM_U_ECWK_U
|
---|
135 | S ECODE=ECODE_ECPTTM_U_ECPTPR_U
|
---|
136 | ;(ECACA=acc area^abbreviation)
|
---|
137 | S ECODE1=ECXMPI_U_ECXDSSD_U_U_U_ECCLAS_U_ECASPR_U
|
---|
138 | S ECODE1=ECODE1_ECCLAS2_U_U_ECXDOM_U_ECXOBS_U_ECXENC_U
|
---|
139 | S ECODE1=ECODE1_ECXORDST_U_ECXORDDT_U_ECXPDIV_U
|
---|
140 | I ECXLOGIC>2004 S ECODE1=ECODE1_U_ECDOCPC
|
---|
141 | I ECXLOGIC>2006 S ECODE1=ECODE1_U_ECXERI
|
---|
142 | I ECXLOGIC>2007 S ECODE1=ECODE1_U_ECASNPI_U_ECPTNPI_U_ECDOCNPI
|
---|
143 | S ^ECX(ECFILE,EC7,0)=ECODE,^ECX(ECFILE,EC7,1)=ECODE1,ECRN=ECRN+1
|
---|
144 | S DA=EC7,DIK="^ECX("_ECFILE_"," D IX1^DIK K DIK,DA
|
---|
145 | I $D(ZTQUEUED),$$S^%ZTLOAD S QFLG=1
|
---|
146 | Q
|
---|
147 | ;
|
---|
148 | SETUP ;Set required input for ECXTRAC
|
---|
149 | S ECHEAD="LAB"
|
---|
150 | D ECXDEF^ECXUTL2(ECHEAD,.ECPACK,.ECGRP,.ECFILE,.ECRTN,.ECPIECE,.ECVER)
|
---|
151 | Q
|
---|
152 | ;
|
---|
153 | QUE ; entry point for the background requeuing handled by ECXTAUTO
|
---|
154 | D SETUP,QUE^ECXTAUTO,^ECXKILL Q
|
---|