| 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
 | 
|---|