| [613] | 1 | ECXNURS ;ALB/JAP,BIR/DMA,PTD-Nursing Extract for DSS ;4/19/2007
 | 
|---|
 | 2 |  ;;3.0;DSS EXTRACTS;**8,14,22,24,33,39,46,71,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 |  ;store in ^tmp by patient and date/time
 | 
|---|
 | 10 |  N CNT,INP,FIRSTDAY,LASTDAY
 | 
|---|
 | 11 |  S QFLG=0,CNT=0
 | 
|---|
 | 12 |  K ^TMP("ECX",$J)
 | 
|---|
 | 13 |  S FIRSTDAY=$P(ECSD1,".")+1,LASTDAY=$P(ECED,".")
 | 
|---|
 | 14 |  S ECED=ECED+.3,ECD=ECSD1
 | 
|---|
 | 15 |  F  S ECD=$O(^NURSA(214.6,"B",ECD)),ECDA=0 Q:'ECD  Q:ECD>ECED  D  Q:QFLG
 | 
|---|
 | 16 |  .F  S ECDA=$O(^NURSA(214.6,"B",ECD,ECDA)) Q:'ECDA  D  Q:QFLG
 | 
|---|
 | 17 |  ..K LOC S DIC=214.6,DIQ(0)="I",DA=ECDA,DIQ="LOC",DR=".01;.02;1;3;4;6;7;8"
 | 
|---|
 | 18 |  ..D EN^DIQ1 K DIQ,DIC,DA,DR
 | 
|---|
 | 19 |  ..F J=.01,.02,1,3,4,6,7,8 S EC(J)=LOC(214.6,ECDA,J,"I")
 | 
|---|
 | 20 |  ..Q:EC(8)'=""
 | 
|---|
 | 21 |  ..S INP=$$INP^ECXUTL2(EC(.02),EC(.01))
 | 
|---|
 | 22 |  ..;
 | 
|---|
 | 23 |  ..;- Don't create ^TMP record if outpatient and no treat spec
 | 
|---|
 | 24 |  ..Q:$P(INP,U)="O"&($P(INP,U,3)="")
 | 
|---|
 | 25 |  ..; retain latest classification per day per patient
 | 
|---|
 | 26 |  ..S ^TMP("ECX",$J,EC(.02),$P(EC(.01),"."))=EC(1)_U_EC(3)_U_EC(4)_U_EC(6)_U_EC(7)_U_$P(INP,U,1,6)_U_EC(.01)_U_$P(INP,U,10)
 | 
|---|
 | 27 |  ..K LOC(214.6,ECDA),EC,INP
 | 
|---|
 | 28 |  ..S CNT=CNT+1
 | 
|---|
 | 29 |  ..I $D(ZTQUEUED),(CNT>499),'(CNT#500),$$S^%ZTLOAD S QFLG=1
 | 
|---|
 | 30 |  I QFLG K ^TMP("ECX",$J) Q
 | 
|---|
 | 31 |  D RESOLVE
 | 
|---|
 | 32 |  D FILE
 | 
|---|
 | 33 |  K ^TMP("ECX",$J)
 | 
|---|
 | 34 |  ;
 | 
|---|
 | 35 | RESOLVE ;process ^tmp by patient
 | 
|---|
 | 36 |  N DFN,TM,ECD,ECDPREV,ECDNEW,OLDWARD,NEWWARD,NEWDT
 | 
|---|
 | 37 |  S DFN=0
 | 
|---|
 | 38 |  F  S DFN=$O(^TMP("ECX",$J,DFN)) S ECD=0 Q:'DFN  D
 | 
|---|
 | 39 |  .;remove any classifications for day of discharge
 | 
|---|
 | 40 |  .F  S ECD=$O(^TMP("ECX",$J,DFN,ECD)) Q:'ECD  D
 | 
|---|
 | 41 |  ..I ECD=$P($P(^TMP("ECX",$J,DFN,ECD),U,11),".") K ^TMP("ECX",$J,DFN,ECD)
 | 
|---|
 | 42 |  .;proceed only if ^tmp remains
 | 
|---|
 | 43 |  .Q:'$D(^TMP("ECX",$J,DFN))
 | 
|---|
 | 44 |  .;proceed with fill-in only if processing more than 3 days' data
 | 
|---|
 | 45 |  .Q:LASTDAY<(FIRSTDAY+2)
 | 
|---|
 | 46 |  .;fill-in records for any missing days per inpatient episode
 | 
|---|
 | 47 |  .K TM S ECD=0
 | 
|---|
 | 48 |  .F  S ECD=$O(^TMP("ECX",$J,DFN,ECD)) Q:'ECD   D
 | 
|---|
 | 49 |  ..S TM(ECD)=$P(^TMP("ECX",$J,DFN,ECD),U,9)
 | 
|---|
 | 50 |  .S (ECD,ECDPREV)=0
 | 
|---|
 | 51 |  .F  S ECD=$O(TM(ECD)) Q:'ECD  D
 | 
|---|
 | 52 |  ..I ECDPREV=0 S ECDPREV=ECD Q
 | 
|---|
 | 53 |  ..I (ECD-ECDPREV)>1,+TM(ECD)=+TM(ECDPREV) D
 | 
|---|
 | 54 |  ...F ECDNEW=ECDPREV+1:1:ECD-1 S ^TMP("ECX",$J,DFN,ECDNEW)=^TMP("ECX",$J,DFN,ECDPREV) D
 | 
|---|
 | 55 |  ....S NEWWARD="",OLDWARD=$P(^TMP("ECX",$J,DFN,ECDPREV),U,10)
 | 
|---|
 | 56 |  ....D NEWWARD(ECDNEW,OLDWARD,.NEWWARD)
 | 
|---|
 | 57 |  ....Q:'NEWWARD
 | 
|---|
 | 58 |  ....S $P(^TMP("ECX",$J,DFN,ECDNEW),U,4)=$P(NEWWARD,U,1)
 | 
|---|
 | 59 |  ....S $P(^TMP("ECX",$J,DFN,ECDNEW),U,5)=$P(NEWWARD,U,2)
 | 
|---|
 | 60 |  ..S ECDPREV=ECD
 | 
|---|
 | 61 |  .;fill-in to end of extract date range
 | 
|---|
 | 62 |  .K TM S ECD=0
 | 
|---|
 | 63 |  .F  S ECD=$O(^TMP("ECX",$J,DFN,ECD)) Q:'ECD   D
 | 
|---|
 | 64 |  ..S TM(ECD)=$P(^TMP("ECX",$J,DFN,ECD),U,11)
 | 
|---|
 | 65 |  .S ECD=$O(TM(""),-1),DCDT=+TM(ECD)
 | 
|---|
 | 66 |  .;if last day in date range is after last classification date
 | 
|---|
 | 67 |  .I LASTDAY>ECD D
 | 
|---|
 | 68 |  ..;if there is no d/c date
 | 
|---|
 | 69 |  ..I DCDT=0 F ECDNEW=ECD+1:1:LASTDAY D  Q
 | 
|---|
 | 70 |  ...I '$D(^TMP("ECX",$J,DFN,ECDNEW)) S ^TMP("ECX",$J,DFN,ECDNEW)=^TMP("ECX",$J,DFN,ECD)
 | 
|---|
 | 71 |  ...S NEWWARD="",OLDWARD=$P(^TMP("ECX",$J,DFN,ECD),U,10)
 | 
|---|
 | 72 |  ...D NEWWARD(ECDNEW,OLDWARD,.NEWWARD)
 | 
|---|
 | 73 |  ...Q:'NEWWARD
 | 
|---|
 | 74 |  ...S $P(^TMP("ECX",$J,DFN,ECDNEW),U,4)=$P(NEWWARD,U,1)
 | 
|---|
 | 75 |  ...S $P(^TMP("ECX",$J,DFN,ECDNEW),U,5)=$P(NEWWARD,U,2)
 | 
|---|
 | 76 |  ..;if d/c date is after last classification date
 | 
|---|
 | 77 |  ..I $P(DCDT,".")>ECD S NEWDT=$S($P(DCDT,".")>LASTDAY:LASTDAY,1:($P(DCDT,".")-1)) F ECDNEW=ECD+1:1:NEWDT D  Q
 | 
|---|
 | 78 |  ...I '$D(^TMP("ECX",$J,DFN,ECDNEW)) S ^TMP("ECX",$J,DFN,ECDNEW)=^TMP("ECX",$J,DFN,ECD)
 | 
|---|
 | 79 |  ...S NEWWARD="",OLDWARD=$P(^TMP("ECX",$J,DFN,ECD),U,10)
 | 
|---|
 | 80 |  ...D NEWWARD(ECDNEW,OLDWARD,.NEWWARD)
 | 
|---|
 | 81 |  ...Q:'NEWWARD
 | 
|---|
 | 82 |  ...S $P(^TMP("ECX",$J,DFN,ECDNEW),U,4)=$P(NEWWARD,U,1)
 | 
|---|
 | 83 |  ...S $P(^TMP("ECX",$J,DFN,ECDNEW),U,5)=$P(NEWWARD,U,2)
 | 
|---|
 | 84 |  Q
 | 
|---|
 | 85 |  ;
 | 
|---|
 | 86 | NEWWARD(ECDNEW,OLDWARD,NEWWARD) ;get new nursing location
 | 
|---|
 | 87 |  ; input  ECDNEW  = date of care
 | 
|---|
 | 88 |  ;        OLDWARD = pointer to file #42, previous mas ward
 | 
|---|
 | 89 |  ;        NEWWARD = null
 | 
|---|
 | 90 |  ; output NEWWARD = new nursing location^new nursing bedsection
 | 
|---|
 | 91 |  ;                  OR "^", if new ward same as previous ward or
 | 
|---|
 | 92 |  ;could not be resolved
 | 
|---|
 | 93 |  ;if the new ward is mapped to multiple nursing locations, get the
 | 
|---|
 | 94 |  ;first active location
 | 
|---|
 | 95 |  N NEWW,NEWLOC,NEWSEC,OUT,DA,DR,DIC,DIQ,LOC,INP
 | 
|---|
 | 96 |  S INP=$$INP^ECXUTL2(DFN,ECDNEW)
 | 
|---|
 | 97 |  S NEWWARD=$P(INP,U,5)
 | 
|---|
 | 98 |  I NEWWARD=OLDWARD S NEWWARD=""
 | 
|---|
 | 99 |  Q:'NEWWARD
 | 
|---|
 | 100 |  S (NEWW,NEWW2,NEWLOC,NEWSEC)="",OUT=0
 | 
|---|
 | 101 |  F  S NEWW=$O(^NURSF(211.4,"C",NEWWARD,NEWW)) Q:OUT  Q:+NEWW<1  D
 | 
|---|
 | 102 |  .S DIC=211.4,DIQ(0)="I",DIQ="LOC",DA=NEWW,DR="1;1.5"
 | 
|---|
 | 103 |  .D EN^DIQ1 K DIQ,DIC,DA,DR
 | 
|---|
 | 104 |  .Q:LOC(211.4,NEWW,1,"I")="I"
 | 
|---|
 | 105 |  .Q:LOC(211.4,NEWW,1.5,"I")="I"
 | 
|---|
 | 106 |  .S JJ=$O(^NURSF(211.4,"C",NEWWARD,NEWW,""))
 | 
|---|
 | 107 |  .S DIC=211.4,DIQ(0)="I",DIQ="LOC",DA=NEWW,DA(211.41)=JJ,DR="2",DR(211.41)=".01;1"
 | 
|---|
 | 108 |  .D EN^DIQ1 K DIQ,DIC,DA,DR
 | 
|---|
 | 109 |  .Q:NEWWARD'=LOC(211.41,JJ,.01,"I")
 | 
|---|
 | 110 |  .S NEWLOC=NEWW,NEWSEC=LOC(211.41,JJ,1,"I"),OUT=1
 | 
|---|
 | 111 |  I (NEWLOC="")!(NEWSEC="") S NEWWARD="" Q
 | 
|---|
 | 112 |  S NEWWARD=NEWLOC_U_NEWSEC
 | 
|---|
 | 113 |  Q
 | 
|---|
 | 114 |  ;
 | 
|---|
 | 115 | FILE ;file extract records
 | 
|---|
 | 116 |  ;node0
 | 
|---|
 | 117 |  ;inst^dfn^ssn^name^in/out (ECXA)^date^acuity level(category)^entered by^
 | 
|---|
 | 118 |  ;classifier^nurs location^nursing bed section^mov #^treat spec^adm date^
 | 
|---|
 | 119 |  ;adm time
 | 
|---|
 | 120 |  ;node1
 | 
|---|
 | 121 |  ;mpi^dss dept ECXDSSD^dom (ECXDOM)^observ pat ind (ECXOBS)^dss
 | 
|---|
 | 122 |  ;product ECXDSSP
 | 
|---|
 | 123 |  N DA,DIK
 | 
|---|
 | 124 |  S EC7=$O(^ECX(ECFILE,999999999),-1)
 | 
|---|
 | 125 |  S DFN=0,QFLG=0
 | 
|---|
 | 126 |  F  S DFN=$O(^TMP("ECX",$J,DFN)) Q:'DFN  D  Q:QFLG
 | 
|---|
 | 127 |  .K ECXPAT S OK=$$PAT^ECXUTL3(DFN,DT,"1;",.ECXPAT)
 | 
|---|
 | 128 |  .Q:'OK
 | 
|---|
 | 129 |  .S ECXDFN=DFN,ECXPNM=ECXPAT("NAME"),ECXSSN=ECXPAT("SSN")
 | 
|---|
 | 130 |  .S ECXMPI=ECXPAT("MPI"),ECD=0
 | 
|---|
 | 131 |  .;file patient's classification data
 | 
|---|
 | 132 |  .F  S ECD=$O(^TMP("ECX",$J,DFN,ECD)) Q:'ECD   D
 | 
|---|
 | 133 |  ..S ECC=$P(^TMP("ECX",$J,DFN,ECD),U,1,5),ECMN=$P(^(ECD),U,7),ECXA=$P(^(ECD),U,6)
 | 
|---|
 | 134 |  ..S ECTS=$P(^(ECD),U,8),ECA=$P(^(ECD),U,9),ECXDOM=$P(^(ECD),U,13)
 | 
|---|
 | 135 |  ..S ECXACU=$P(ECC,U,1),ECXEB=$P(ECC,U,2),ECXCLS=$P(ECC,U,3)
 | 
|---|
 | 136 |  ..S ECXNLOC=$P(ECC,U,4),ECXNBED=$P(ECC,U,5)
 | 
|---|
 | 137 |  ..;
 | 
|---|
 | 138 |  ..;Get DSS Department and Product
 | 
|---|
 | 139 |  ..S (ECXDSSD,ECXDSSP)=""
 | 
|---|
 | 140 |  ..;I ECXLOGIC>2004 S X=$$NUR^ECXDEPT(ECD)
 | 
|---|
 | 141 |  ..;
 | 
|---|
 | 142 |  ..;- Observation patient indicator (YES/NO)
 | 
|---|
 | 143 |  ..S ECXOBS=$$OBSPAT^ECXUTL4(ECXA,ECTS)
 | 
|---|
 | 144 |  ..;
 | 
|---|
 | 145 |  ..;- Don't file record if outpatient and NOT an observation patient
 | 
|---|
 | 146 |  ..Q:ECXA="O"&(ECXOBS="NO")
 | 
|---|
 | 147 |  ..;
 | 
|---|
 | 148 |  ..;- If no encounter number don't file record
 | 
|---|
 | 149 |  ..S ECXENC=$$ENCNUM^ECXUTL4(ECXA,ECXSSN,ECA,ECD,ECTS,ECXOBS,ECHEAD,,) Q:ECXENC=""
 | 
|---|
 | 150 |  ..S EC7=EC7+1
 | 
|---|
 | 151 |  ..S ECODE=EC7_U_EC23_U_ECINST_U_ECXDFN_U_ECXSSN_U_ECXPNM_U_ECXA_U
 | 
|---|
 | 152 |  ..S ECODE=ECODE_$$ECXDATE^ECXUTL(ECD,ECXYM)_U
 | 
|---|
 | 153 |  ..S ECODE=ECODE_ECXACU_U_ECXEB_U_ECXCLS_U_ECXNLOC_U_ECXNBED_U
 | 
|---|
 | 154 |  ..;convert specialties to PTF Codes for transmission
 | 
|---|
 | 155 |  .. N ECXDATA
 | 
|---|
 | 156 |  .. S ECXDATA=$$TSDATA^DGACT(42.4,+ECTS,.ECXDATA)
 | 
|---|
 | 157 |  .. S ECTS=$G(ECXDATA(7))
 | 
|---|
 | 158 |  ..;done
 | 
|---|
 | 159 |  ..S ECODE=ECODE_ECMN_U_ECTS_U_$$ECXDATE^ECXUTL(ECA,ECXYM)_U
 | 
|---|
 | 160 |  ..S ECODE=ECODE_$$ECXTIME^ECXUTL(ECA)_U
 | 
|---|
 | 161 |  ..S ECODE1=ECXMPI_U_ECXDSSD_U_ECXDOM_U_ECXOBS_U_ECXENC_U
 | 
|---|
 | 162 |  ..S ECODE1=ECODE1_ECINST_U
 | 
|---|
 | 163 |  ..I ECXLOGIC>2004 S ECODE1=ECODE1_ECXDSSP
 | 
|---|
 | 164 |  ..S ^ECX(ECFILE,EC7,0)=ECODE,^ECX(ECFILE,EC7,1)=ECODE1,ECRN=ECRN+1
 | 
|---|
 | 165 |  ..S DA=EC7,DIK="^ECX("_ECFILE_"," D IX1^DIK K DIK,DA
 | 
|---|
 | 166 |  ..I $D(ZTQUEUED),$$S^%ZTLOAD S QFLG=1
 | 
|---|
 | 167 |  Q
 | 
|---|
 | 168 |  ;
 | 
|---|
 | 169 | SETUP ;Set required input for ECXTRAC
 | 
|---|
 | 170 |  S ECHEAD="NUR"
 | 
|---|
 | 171 |  D ECXDEF^ECXUTL2(ECHEAD,.ECPACK,.ECGRP,.ECFILE,.ECRTN,.ECPIECE,.ECVER)
 | 
|---|
 | 172 |  Q
 | 
|---|
 | 173 |  ;
 | 
|---|
 | 174 | QUE ; entry point for the background requeuing handled by ECXTAUTO
 | 
|---|
 | 175 |  D SETUP,QUE^ECXTAUTO,^ECXKILL Q
 | 
|---|