Changeset 623 for WorldVistAEHR/trunk/r/DSS_EXTRACTS-ECX/ECXLABR.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/ECXLABR.m
r613 r623 1 ECXLABR ;ALB/JAP,BIR/CML-LAR Extract for DSS (New Format - With LMIP Codes) ; 6/5/07 2:33pm 2 ;;3.0;DSS EXTRACTS;**8,24,33,37,39,46,71,80,107,105**;Dec 22, 1997;Build 70 3 BEG ;entry point from option 4 D SETUP I ECFILE="" Q 5 D ^ECXTRAC,^ECXKILL 6 Q 7 ; 8 START ; entry when queued 9 N X,OK,ECTRS,ECTRANS,ECTRIEN,ECDOC,ECDOCPC 10 K ^LAR(64.036) S LRSDT=ECSD,LREDT=ECED 11 D ^LRCAPDAR 12 ;quit if no completion date for API compile 13 I '$P($G(^LAR(64.036,1,2,1,0)),U,4) Q 14 ;build local array of workload codes for local lab tests linked to 15 ;DSS tests 16 K ECLOC S ECDTST=0 17 F S ECDTST=$O(^ECX(727.2,1,1,ECDTST)) Q:('ECDTST) S ECLTST=0 D 18 .F S ECLTST=$O(^ECX(727.2,1,1,ECDTST,"LOC",ECLTST)) Q:'ECLTST D 19 ..S ECLTIEN=+^ECX(727.2,1,1,ECDTST,"LOC",ECLTST,0) 20 ..S ECWCDA=+$G(^LAB(60,ECLTIEN,64)) 21 ..I ECWCDA S ECWC=$P(^LAM(ECWCDA,0),U,2),ECLOC(ECWCDA)=ECWC 22 K ECLTIEN 23 ;process temporary lab file #64.036 24 S QFLG=0,ECLRN=1 25 F S ECLRN=$O(^LAR(64.036,ECLRN)) Q:('ECLRN)!(QFLG) D 26 .I $D(^LAR(64.036,ECLRN,0)) D 27 ..S EC1=^LAR(64.036,ECLRN,0),ECF=$P(EC1,U,2) 28 ..Q:ECF="" 29 ..S ECXDFN=$P(EC1,U,3),ECPTPR=$P($G(EC1),U,11),ECCLASS="" 30 ..S ECXTIME=$S($P(EC1,U,10)="":"000300",1:$P(EC1,U,10)) 31 ..S ECXDATE=$P(EC1,U,9)_"."_$P(EC1,U,10) 32 ..I ECPTPR S ECCLASS=$$PRVCLASS^ECXUTL(ECPTPR,ECXDATE) 33 ..I ECPTPR S ECPTNPI=$$NPI^XUSNPI("Individual_ID",ECPTPR,+ECXDATE) D 34 ...S:+ECPTNPI'>0 ECPTNPI="" S ECPTNPI=$P(ECPTNPI,U) 35 ..S ECORDT=$$ECXDATE^ECXUTL($P(EC1,U,4),ECXYM) 36 ..S ECORTM=$$ECXTIME^ECXUTL($P(EC1,U,4)_"."_$P(EC1,U,5)) 37 ..S ECREDT=$$ECXDATE^ECXUTL($P(EC1,U,6),ECXYM) 38 ..S ECRETM=$$ECXTIME^ECXUTL($P(EC1,U,6)_"."_$P(EC1,U,7)) 39 ..S ECSCDT=$$ECXDATE^ECXUTL($P(EC1,U,9),ECXYM) 40 ..S ECSCTM=$$ECXTIME^ECXUTL($P(EC1,U,9)_"."_$P(EC1,U,10)) 41 ..S (ECXADMDT,ECXDOM,ECXDSSD,ECXPNM,ECXSSN,ECXA,ECXMN,ECXTS)="" 42 ..I ECF=2 D Q:'OK 43 ...K ECXPAT S OK=$$PAT^ECXUTL3(ECXDFN,ECXDATE,"1;",.ECXPAT) 44 ...Q:'OK 45 ...S ECXPNM=ECXPAT("NAME"),ECXSSN=ECXPAT("SSN"),ECXMPI=ECXPAT("MPI") 46 ...S X=$$INP^ECXUTL2(ECXDFN,ECXDATE),ECXA=$P(X,U),ECXADMDT=$P(X,U,4) 47 ...S ECXMN=$P(X,U,2),ECXTS=$P(X,U,3),ECXDOM=$P(X,U,10) 48 ..;allow for referral patients in future?? 49 ..;I ECF=67 S ECSN="000123456",ECNA="RFRL" 50 ..;loop on results multiple 51 ..; 52 ..;Get production division ECXDIEN added p-80 53 ..N ECXPDIV,ECXDIEN S ECXDIEN=$O(^DIC(4,"D",ECINST,"")),ECXPDIV=$$RADDIV^ECXDEPT(ECXDIEN) ;p-46 54 ..K ECXDIEN 55 ..;- Observation patient indicator (y/n) 56 ..S ECXOBS=$$OBSPAT^ECXUTL4(ECXA,ECXTS) 57 ..; 58 ..;- If no encounter number don't file record 59 ..S ECXENC=$$ENCNUM^ECXUTL4(ECXA,ECXSSN,ECXADMDT,$P(EC1,U,9),ECXTS,ECXOBS,ECHEAD,,) Q:ECXENC="" 60 ..S ECRES=0 61 ..F S ECRES=$O(^LAR(64.036,ECLRN,1,ECRES)) Q:('ECRES)!(QFLG) D 62 ...I $D(^LAR(64.036,ECLRN,1,ECRES,0)) D Q:QFLG 63 ....S EC2=^LAR(64.036,ECLRN,1,ECRES,0),ECN=$P(EC2,U),ECRS=$P(EC2,U,2) 64 ....S ECHL=$E($P(EC2,U,3)),ECWC=+$P(EC2,U,4) 65 ....S ECWC=$S($D(ECLOC(ECWC)):ECLOC(ECWC),1:"") 66 ....; 67 ....; - Free text results translation 68 ....S ECTRANS="",ECTRS=ECRS 69 ....I +ECTRS S ECTRS=$TR(ECTRS,",","") D 70 .....I (ECTRS?.N)!(ECTRS?.N1".".N) S ECRS=ECTRS 71 ....F Q:$E(ECTRS,1)'=" " S ECTRS=$E(ECTRS,2,$L(ECTRS)) 72 ....F Q:$E(ECTRS,$L(ECTRS))'=" " S ECTRS=$E(ECTRS,1,($L(ECTRS)-1)) 73 ....I ECTRS]"" I ECTRS'?.N I ECTRS'?.N1".".N D ;translate 74 .....S ECTRS=$TR(ECRS,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") 75 .....S ECTRIEN="",ECTRIEN=$O(^ECX(727.7,"B",ECTRS,ECTRIEN)) 76 .....S ECTRANS=$S(ECTRIEN:$P(^ECX(727.7,ECTRIEN,0),U,2),1:5) 77 ....; 78 ....I ECWC]"" D FILE 79 K ^LAR(64.036) S ^LAR(64.036,0)="LAB DSS LAR EXTRACT^64.036^" 80 Q 81 ; 82 FILE ;file record 83 ;node0 84 ;facility (ECINST)^dfn (ECXDFN)^ssn (ECXSSN)^name(ECXPNM)^in/out (ECXA)^ 85 ;day(ECSCDT)^ 86 ;lab test code (ECN)^results (ECRS)^hi/lo indicator (ECHL)^ 87 ;date ordered (ECORDT)^time ordered (ECORTM)^date ready (ECREDT)^ 88 ;time ready (ECRETM)^ 89 ;movement file # (ECXMN)^treating specialty (ECXTS)^ 90 ;workload code(ECWC)^ 91 ;node1 92 ;mpi (ECXMPI)^dss dept (ECXDSSD)^dom (ECXDOM)^time (ECSCTM)^ 93 ;observ pat ind (ECXOBS)^encounter num (ECXENC)^prod div ECXPDIV^ 94 ;lab results translation ECXTRANS^ordering provider (ECPTPR)^ 95 ;ordering provider person class (ECCLASS)^ordering provider npi ECPTNPI 96 N DA,DIK 97 S EC7=$O(^ECX(ECFILE,999999999),-1),EC7=EC7+1 98 S ECODE=EC7_U_EC23_U_ECINST_U_ECXDFN_U_ECXSSN_U_ECXPNM_U_ECXA_U 99 S ECODE=ECODE_ECSCDT_U_$$RJ^XLFSTR(ECN,4,0)_U_ECRS_U_ECHL_U_ECORDT_U 100 S ECODE=ECODE_$$LJ^XLFSTR(ECORTM,6,0)_U 101 ;convert specialty to PTF Code for transmission 102 N ECXDATA 103 S ECXDATA=$$TSDATA^DGACT(42.4,+ECXTS,.ECXDATA) 104 S ECXTS=$G(ECXDATA(7)) 105 ;done 106 S ECODE=ECODE_ECREDT_U_$$LJ^XLFSTR(ECRETM,6,0)_U_ECXMN_U_ECXTS_U_ECWC_U 107 S ECODE1=ECXMPI_U_ECXDSSD_U_ECXDOM_U_ECSCTM_U_ECXOBS_U_ECXENC_U_ECXPDIV_U_ECTRANS 108 I ECXLOGIC>2004 S ECODE1=ECODE1_U_2_ECPTPR_U_ECCLASS 109 I ECXLOGIC>2007 S ECODE1=ECODE1_U_ECPTNPI 110 S ^ECX(ECFILE,EC7,0)=ECODE,^ECX(ECFILE,EC7,1)=ECODE1,ECRN=ECRN+1 111 S DA=EC7,DIK="^ECX("_ECFILE_"," D IX1^DIK K DIK,DA 112 I $D(ZTQUEUED),$$S^%ZTLOAD S QFLG=1 113 Q 114 ; 115 SETUP ;Set required input for ECXTRAC 116 S ECHEAD="LAR" 117 D ECXDEF^ECXUTL2(ECHEAD,.ECPACK,.ECGRP,.ECFILE,.ECRTN,.ECPIECE,.ECVER) 118 Q 119 ; 120 QUE ; entry point for the background requeuing handled by ECXTAUTO 121 D SETUP,QUE^ECXTAUTO,^ECXKILL Q 1 ECXLABR ;ALB/JAP,BIR/CML-LAR Extract for DSS (New Format - With LMIP Codes) ; 4/12/07 8:43am 2 ;;3.0;DSS EXTRACTS;**8,24,33,37,39,46,71,80,107**;Dec 22, 1997;Build 9 3 BEG ;entry point from option 4 D SETUP I ECFILE="" Q 5 D ^ECXTRAC,^ECXKILL 6 Q 7 ; 8 START ; entry when queued 9 N X,OK,ECTRS,ECTRANS,ECTRIEN,ECDOC,ECDOCPC 10 K ^LAR(64.036) S LRSDT=ECSD,LREDT=ECED 11 D ^LRCAPDAR 12 ;quit if no completion date for API compile 13 I '$P($G(^LAR(64.036,1,2,1,0)),U,4) Q 14 ;build local array of workload codes for local lab tests linked to 15 ;DSS tests 16 K ECLOC S ECDTST=0 17 F S ECDTST=$O(^ECX(727.2,1,1,ECDTST)) Q:('ECDTST) S ECLTST=0 D 18 .F S ECLTST=$O(^ECX(727.2,1,1,ECDTST,"LOC",ECLTST)) Q:'ECLTST D 19 ..S ECLTIEN=+^ECX(727.2,1,1,ECDTST,"LOC",ECLTST,0) 20 ..S ECWCDA=+$G(^LAB(60,ECLTIEN,64)) 21 ..I ECWCDA S ECWC=$P(^LAM(ECWCDA,0),U,2),ECLOC(ECWCDA)=ECWC 22 K ECLTIEN 23 ;process temporary lab file #64.036 24 S QFLG=0,ECLRN=1 25 F S ECLRN=$O(^LAR(64.036,ECLRN)) Q:('ECLRN)!(QFLG) D 26 .I $D(^LAR(64.036,ECLRN,0)) D 27 ..S EC1=^LAR(64.036,ECLRN,0),ECF=$P(EC1,U,2) 28 ..Q:ECF="" 29 ..S ECXDFN=$P(EC1,U,3),ECPTPR=$P($G(EC1),U,11),ECCLASS="" 30 ..S ECXTIME=$S($P(EC1,U,10)="":"000300",1:$P(EC1,U,10)) 31 ..S ECXDATE=$P(EC1,U,9)_"."_$P(EC1,U,10) 32 ..I ECPTPR S ECCLASS=$$PRVCLASS^ECXUTL(ECPTPR,ECXDATE) 33 ..S ECORDT=$$ECXDATE^ECXUTL($P(EC1,U,4),ECXYM) 34 ..S ECORTM=$$ECXTIME^ECXUTL($P(EC1,U,4)_"."_$P(EC1,U,5)) 35 ..S ECREDT=$$ECXDATE^ECXUTL($P(EC1,U,6),ECXYM) 36 ..S ECRETM=$$ECXTIME^ECXUTL($P(EC1,U,6)_"."_$P(EC1,U,7)) 37 ..S ECSCDT=$$ECXDATE^ECXUTL($P(EC1,U,9),ECXYM) 38 ..S ECSCTM=$$ECXTIME^ECXUTL($P(EC1,U,9)_"."_$P(EC1,U,10)) 39 ..S (ECXADMDT,ECXDOM,ECXDSSD,ECXPNM,ECXSSN,ECXA,ECXMN,ECXTS)="" 40 ..I ECF=2 D Q:'OK 41 ...K ECXPAT S OK=$$PAT^ECXUTL3(ECXDFN,ECXDATE,"1;",.ECXPAT) 42 ...Q:'OK 43 ...S ECXPNM=ECXPAT("NAME"),ECXSSN=ECXPAT("SSN"),ECXMPI=ECXPAT("MPI") 44 ...S X=$$INP^ECXUTL2(ECXDFN,ECXDATE),ECXA=$P(X,U),ECXADMDT=$P(X,U,4) 45 ...S ECXMN=$P(X,U,2),ECXTS=$P(X,U,3),ECXDOM=$P(X,U,10) 46 ..;allow for referral patients in future?? 47 ..;I ECF=67 S ECSN="000123456",ECNA="RFRL" 48 ..;loop on results multiple 49 ..; 50 ..;Get production division ECXDIEN added p-80 51 ..N ECXPDIV,ECXDIEN S ECXDIEN=$O(^DIC(4,"D",ECINST,"")),ECXPDIV=$$RADDIV^ECXDEPT(ECXDIEN) ;p-46 52 ..K ECXDIEN 53 ..;- Observation patient indicator (y/n) 54 ..S ECXOBS=$$OBSPAT^ECXUTL4(ECXA,ECXTS) 55 ..; 56 ..;- If no encounter number don't file record 57 ..S ECXENC=$$ENCNUM^ECXUTL4(ECXA,ECXSSN,ECXADMDT,$P(EC1,U,9),ECXTS,ECXOBS,ECHEAD,,) Q:ECXENC="" 58 ..S ECRES=0 59 ..F S ECRES=$O(^LAR(64.036,ECLRN,1,ECRES)) Q:('ECRES)!(QFLG) D 60 ...I $D(^LAR(64.036,ECLRN,1,ECRES,0)) D Q:QFLG 61 ....S EC2=^LAR(64.036,ECLRN,1,ECRES,0),ECN=$P(EC2,U),ECRS=$P(EC2,U,2) 62 ....S ECHL=$E($P(EC2,U,3)),ECWC=+$P(EC2,U,4) 63 ....S ECWC=$S($D(ECLOC(ECWC)):ECLOC(ECWC),1:"") 64 ....; 65 ....; - Free text results translation 66 ....S ECTRANS="",ECTRS=ECRS 67 ....I +ECTRS S ECTRS=$TR(ECTRS,",","") D 68 .....I (ECTRS?.N)!(ECTRS?.N1".".N) S ECRS=ECTRS 69 ....F Q:$E(ECTRS,1)'=" " S ECTRS=$E(ECTRS,2,$L(ECTRS)) 70 ....F Q:$E(ECTRS,$L(ECTRS))'=" " S ECTRS=$E(ECTRS,1,($L(ECTRS)-1)) 71 ....I ECTRS]"" I ECTRS'?.N I ECTRS'?.N1".".N D ;translate 72 .....S ECTRS=$TR(ECRS,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") 73 .....S ECTRIEN="",ECTRIEN=$O(^ECX(727.7,"B",ECTRS,ECTRIEN)) 74 .....S ECTRANS=$S(ECTRIEN:$P(^ECX(727.7,ECTRIEN,0),U,2),1:5) 75 ....; 76 ....I ECWC]"" D FILE 77 K ^LAR(64.036) S ^LAR(64.036,0)="LAB DSS LAR EXTRACT^64.036^" 78 Q 79 ; 80 FILE ;file record 81 ;node0 82 ;facility (ECINST)^dfn (ECXDFN)^ssn (ECXSSN)^name(ECXPNM)^in/out (ECXA)^ 83 ;day(ECSCDT)^ 84 ;lab test code (ECN)^results (ECRS)^hi/lo indicator (ECHL)^ 85 ;date ordered (ECORDT)^time ordered (ECORTM)^date ready (ECREDT)^ 86 ;time ready (ECRETM)^ 87 ;movement file # (ECXMN)^treating specialty (ECXTS)^ 88 ;workload code(ECWC)^ 89 ;node1 90 ;mpi (ECXMPI)^dss dept (ECXDSSD)^dom (ECXDOM)^time (ECSCTM)^ 91 ;observ pat ind (ECXOBS)^encounter num (ECXENC)^prod div ECXPDIV^ 92 ;lab results translation ECXTRANS^ordering provider (ECPTPR)^ 93 ;ordering provider person class (ECCLASS) 94 N DA,DIK 95 S EC7=$O(^ECX(ECFILE,999999999),-1),EC7=EC7+1 96 S ECODE=EC7_U_EC23_U_ECINST_U_ECXDFN_U_ECXSSN_U_ECXPNM_U_ECXA_U 97 S ECODE=ECODE_ECSCDT_U_$$RJ^XLFSTR(ECN,4,0)_U_ECRS_U_ECHL_U_ECORDT_U 98 S ECODE=ECODE_$$LJ^XLFSTR(ECORTM,6,0)_U 99 ;convert specialty to PTF Code for transmission 100 N ECXDATA 101 S ECXDATA=$$TSDATA^DGACT(42.4,+ECXTS,.ECXDATA) 102 S ECXTS=$G(ECXDATA(7)) 103 ;done 104 S ECODE=ECODE_ECREDT_U_$$LJ^XLFSTR(ECRETM,6,0)_U_ECXMN_U_ECXTS_U_ECWC_U 105 S ECODE1=ECXMPI_U_ECXDSSD_U_ECXDOM_U_ECSCTM_U_ECXOBS_U_ECXENC_U_ECXPDIV_U_ECTRANS 106 I ECXLOGIC>2004 S ECODE1=ECODE1_U_2_ECPTPR_U_ECCLASS 107 S ^ECX(ECFILE,EC7,0)=ECODE,^ECX(ECFILE,EC7,1)=ECODE1,ECRN=ECRN+1 108 S DA=EC7,DIK="^ECX("_ECFILE_"," D IX1^DIK K DIK,DA 109 I $D(ZTQUEUED),$$S^%ZTLOAD S QFLG=1 110 Q 111 ; 112 SETUP ;Set required input for ECXTRAC 113 S ECHEAD="LAR" 114 D ECXDEF^ECXUTL2(ECHEAD,.ECPACK,.ECGRP,.ECFILE,.ECRTN,.ECPIECE,.ECVER) 115 Q 116 ; 117 QUE ; entry point for the background requeuing handled by ECXTAUTO 118 D SETUP,QUE^ECXTAUTO,^ECXKILL Q
Note:
See TracChangeset
for help on using the changeset viewer.