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