| 1 | ECXUTL6 ;ALB/JRC - Utilities for DSS Extracts ; 11/28/07 11:34am | 
|---|
| 2 | ;;3.0;DSS EXTRACTS;**92,105**;Dec 22, 1997;Build 70 | 
|---|
| 3 | ; | 
|---|
| 4 | NUTKEY(P,D) ;Generate n&fs feeder key | 
|---|
| 5 | ;Required variables | 
|---|
| 6 | ;      p  - diet type production diet, standing orders, supplemental | 
|---|
| 7 | ;           feedings, or tube feedings. | 
|---|
| 8 | ;      d  - diet ien from files 116.2, 118.3, 118, or 118.2 | 
|---|
| 9 | ;Check input | 
|---|
| 10 | I $G(P)=""!'$G(D) Q "" | 
|---|
| 11 | ;Init variables | 
|---|
| 12 | N PRO,IENS,CODE,DIET | 
|---|
| 13 | S (PRO,IENS,CODE,DIET)=0 | 
|---|
| 14 | S PRO=$O(^ECX(728.45,"B",P,PRO)) | 
|---|
| 15 | S CODE=D_$S(P="PD":";FH(116.2,",P="SO":";FH(118.3,",P="SF":";FH(118,",P="TF":";FH(118.2,",1:"") | 
|---|
| 16 | S DIET=0,DIET=$O(^ECX(728.45,+PRO,1,"B",CODE,DIET)) | 
|---|
| 17 | S IENS=""_DIET_","_PRO_","_"" | 
|---|
| 18 | Q $$GET1^DIQ(728.451,IENS,1) | 
|---|
| 19 | ; | 
|---|
| 20 | NUTLOC(P,D,FPD,FDD,FPF,DLT,DFL) ;Define nutrition fields | 
|---|
| 21 | ;Required variables | 
|---|
| 22 | ;      p  - patient status, inpatient or outpatient | 
|---|
| 23 | ; | 
|---|
| 24 | ;      d  - diet type production diet, standing orders, supplemental | 
|---|
| 25 | ;            feedings, or tube feedings. | 
|---|
| 26 | ;    Output: food production division, food delivery division, food | 
|---|
| 27 | ;            production facility, food delivery type, delivery feeder | 
|---|
| 28 | ;            location | 
|---|
| 29 | ;Init variables | 
|---|
| 30 | N WARD,TRSVP,CRSVP,OPLOC,MASWARD | 
|---|
| 31 | S (CRSVP,TRSVP)=0,(WARD,DLT,DFL,MASWARD)="" | 
|---|
| 32 | S OPLOC="" | 
|---|
| 33 | ;Check input | 
|---|
| 34 | I $G(P)=""!($G(D)="")!'($G(FHDFN)) Q "" | 
|---|
| 35 | ;Get food production facility for inpatient, use 115.1.13 (dietetic | 
|---|
| 36 | ;ward) field which points 119.6 (nutrition location), field 3 (tray | 
|---|
| 37 | ;service point) or field 4 (cafeteria service point), which points to | 
|---|
| 38 | ;119.72 (production facility) field 2. | 
|---|
| 39 | I P="INP" D | 
|---|
| 40 | .S WARD=$P($G(^FHPT(FHDFN,"A",+ECXADM,0)),U,8) | 
|---|
| 41 | .S TRSVP=$$GET1^DIQ(119.6,WARD,3,"I") | 
|---|
| 42 | .S CRSVP=$$GET1^DIQ(119.6,WARD,4,"I") | 
|---|
| 43 | .;Get divisions | 
|---|
| 44 | .D GETDIV | 
|---|
| 45 | .Q | 
|---|
| 46 | ; | 
|---|
| 47 | ;Get food production facility for outpatient recurring meal, use | 
|---|
| 48 | ;115.16.2 (outpatient location) which points to file 119.6 (nutrition | 
|---|
| 49 | ;location) field 3 (tray service point) or field 4 (cafeteria service | 
|---|
| 50 | ;point), which points to 119.72 (production facility) field 2. | 
|---|
| 51 | I P["OP",D["RM" D | 
|---|
| 52 | .S OPLOC=""_$P(NODE,U,3)_","_"",TRSVP=$$GET1^DIQ(119.6,OPLOC,3,"I") | 
|---|
| 53 | .D GETDIV | 
|---|
| 54 | .Q | 
|---|
| 55 | ; | 
|---|
| 56 | ;Get food production facility for outpatient tube feeding, use | 
|---|
| 57 | ;115.16.2 (outpatient location) then use 119.6 nutrition location | 
|---|
| 58 | ;which points to 119.72 field 2. | 
|---|
| 59 | I P["OP",D["TF" D | 
|---|
| 60 | .S OPLOC=""_$P(^TMP($J,"FH",DATE,FHDFN,NUMBER,"RM"),U,3)_","_"" | 
|---|
| 61 | .S TRSVP=$$GET1^DIQ(119.6,OPLOC,3,"I") | 
|---|
| 62 | .;Get delivery division | 
|---|
| 63 | .D GETDIV | 
|---|
| 64 | .Q | 
|---|
| 65 | ; | 
|---|
| 66 | ;Get food production facility for special meals, use 115.17.2 | 
|---|
| 67 | ;location field 2 which is a pointer to 119.6 (nutrition location) | 
|---|
| 68 | ;which points to 119.72 via field 2 (tray service point) which points | 
|---|
| 69 | ;to file 119.71 (production facility) field 2. | 
|---|
| 70 | I P["OP",D["SM" D | 
|---|
| 71 | .S OPLOC=""_$P(NODE,U,3)_","_"" | 
|---|
| 72 | .S TRSVP=$$GET1^DIQ(119.6,OPLOC,3,"I") | 
|---|
| 73 | .;Get delivery division | 
|---|
| 74 | .D GETDIV | 
|---|
| 75 | .Q | 
|---|
| 76 | ; | 
|---|
| 77 | ;Get food production facility for outpatient guest meals, use | 
|---|
| 78 | ;115.18.4 (outpatient location) then use 119.6 nutrition location | 
|---|
| 79 | ;which points to 119.72 (production facility) field 2. | 
|---|
| 80 | I P["OP",D["GM" D | 
|---|
| 81 | .S OPLOC=""_$P(NODE,U,5)_","_"",TRSVP=$$GET1^DIQ(119.6,OPLOC,3,"I") | 
|---|
| 82 | .S FPF=$$GET1^DIQ(119.72,""_TRSVP_","_"",2,"I") | 
|---|
| 83 | .;Get delivery division | 
|---|
| 84 | .D GETDIV | 
|---|
| 85 | .Q | 
|---|
| 86 | ; | 
|---|
| 87 | ;Get delivery location type for patients; with inpatients the type of | 
|---|
| 88 | ;service needs to be pulled from the admission node, with outpatients | 
|---|
| 89 | ;the type of service needs to be pulled from different nodes and use | 
|---|
| 90 | ;field 101 of Nutrition Location file (#119.6). Delivery location | 
|---|
| 91 | ;types only set for the following meals: | 
|---|
| 92 | ;   Inpatient with a production diet | 
|---|
| 93 | ;   Outpatient with a recurring meal | 
|---|
| 94 | ;   Outpatient with a special meal | 
|---|
| 95 | ;   Outpatient with a guest meal | 
|---|
| 96 | ;   all other meals are null | 
|---|
| 97 | I P="INP",D="PD" D | 
|---|
| 98 | .S DLT=$P($G(NODE),U,8) | 
|---|
| 99 | I P="OP",((D="RM")!(D="SM")) D | 
|---|
| 100 | .S DLT=$E($$GET1^DIQ(119.6,""_$P(NODE,U,3)_","_"",101,"E"),1) | 
|---|
| 101 | I P="OP",D="GM" D | 
|---|
| 102 | .S DLT=$E($$GET1^DIQ(119.6,""_$P(NODE,U,5)_","_"",101,"E"),1) | 
|---|
| 103 | ; | 
|---|
| 104 | ;Delivery feeder location | 
|---|
| 105 | I DLT="C" D | 
|---|
| 106 | .S DFL=$E($$GET1^DIQ(119.6,WARD,4,"E"),1,10) | 
|---|
| 107 | .S IEN=$$GET1^DIQ(119.72,+CRSVP,2,"I") | 
|---|
| 108 | .S IEN=""_IEN_";FH(119.71," | 
|---|
| 109 | .S FPF=$O(^ECX(728.46,"B",IEN,FPF)) | 
|---|
| 110 | .S FPF=$E($$GET1^DIQ(728.46,FPF,.01,"E"),1,10) | 
|---|
| 111 | I (DLT["T")!(DLT["D") D | 
|---|
| 112 | .I P="INP" D | 
|---|
| 113 | ..S MASWARD=$O(^FH(119.6,+WARD,"W","B",0)) | 
|---|
| 114 | ..S DFL=$$GET1^DIQ(42,+MASWARD,44,"I") | 
|---|
| 115 | .I P="OP" D | 
|---|
| 116 | ..S DFL=$O(^FH(119.6,+OPLOC,"L","B",0)) | 
|---|
| 117 | I (DLT=""),"SFTFSO"[D D | 
|---|
| 118 | .S DFL=$S(TRSVP:$$GET1^DIQ(119.6,WARD,3,"E"),1:$$GET1^DIQ(119.6,WARD,4,"E")) | 
|---|
| 119 | Q 1 | 
|---|
| 120 | ; | 
|---|
| 121 | GETDIV ;Get divisions and food production facility | 
|---|
| 122 | ;Init variables | 
|---|
| 123 | N IEN,SIEN | 
|---|
| 124 | S (FDD,FPF,FPD)="" | 
|---|
| 125 | S IEN=$$GET1^DIQ(119.72,+TRSVP,2,"I") | 
|---|
| 126 | Q:'IEN | 
|---|
| 127 | ;Get delivery division | 
|---|
| 128 | S SIEN=""_+TRSVP_";FH(119.72," | 
|---|
| 129 | S FDD=$O(^ECX(728.46,"B",SIEN,FDD)) | 
|---|
| 130 | S FDD=""_$$GET1^DIQ(728.46,FDD,1,"I")_","_"" | 
|---|
| 131 | S FDD=$$GET1^DIQ(4,FDD,99,"E") | 
|---|
| 132 | ;Get production division and food production facility | 
|---|
| 133 | S IEN=""_IEN_";FH(119.71," | 
|---|
| 134 | S FPF=$O(^ECX(728.46,"B",IEN,FPF)) | 
|---|
| 135 | S FPD=""_$$GET1^DIQ(728.46,FPF,1,"I")_","_"" | 
|---|
| 136 | S FPD=$$GET1^DIQ(4,FPD,99,"E") | 
|---|
| 137 | S FPF=$E($$GET1^DIQ(728.46,FPF,.01,"E"),1,10) | 
|---|
| 138 | Q | 
|---|
| 139 | ; | 
|---|
| 140 | SUR(CRST,STCD,CLINIC) ;Surgery stop codes and clinic (outpatients only) | 
|---|
| 141 | ;Init variables | 
|---|
| 142 | S (CRST,STCD,CLINIC)="" | 
|---|
| 143 | ;Quit if not outpatient | 
|---|
| 144 | Q:$P(EC0,U,12)'="O" "" | 
|---|
| 145 | ;Get stop codes (outpatient only) | 
|---|
| 146 | I $P(EC0,U,12)="O" D | 
|---|
| 147 | .;Get credit stop code (outpatient only) | 
|---|
| 148 | .S CRST=""_$$GET1^DIQ(40.7,""_$$GET1^DIQ(44,$$GET1^DIQ(137.45,$P(EC0,U,4),2,"I")_","_""_","_"",2503,"I")_","_"",1,"E") | 
|---|
| 149 | .;Get stop code (outpatient only) | 
|---|
| 150 | .S STCD=""_$$GET1^DIQ(40.7,""_$$GET1^DIQ(44,$$GET1^DIQ(137.45,$P(EC0,U,4),2,"I")_","_""_","_"",8,"I")_","_"",1,"E") | 
|---|
| 151 | ;Clinic for non-or case use associated clinic else non-or location | 
|---|
| 152 | ;If non-or case | 
|---|
| 153 | I $P($G(ECNO),U)="Y" S CLINIC=$S($P(EC0,U,21):$P(EC0,U,21),1:$P(ECNO,U,2)) | 
|---|
| 154 | ;Get stop codes non-or cases | 
|---|
| 155 | I $P($G(ECNO),U)="Y" D | 
|---|
| 156 | .;Get credit stop code for non-or case | 
|---|
| 157 | .S CRST=$$GET1^DIQ(40.7,$$GET1^DIQ(44,CLINIC,2503,"I"),1,"E") | 
|---|
| 158 | .;Get stop code for non-or case | 
|---|
| 159 | .S STCD=$$GET1^DIQ(40.7,$$GET1^DIQ(44,CLINIC,8,"I"),1,"E") | 
|---|
| 160 | ;Clinic, not a non-or case use surgical specialty associated clinic | 
|---|
| 161 | I $P($G(ECNO),U)'="Y" S CLINIC=$$GET1^DIQ(137.45,+$P(EC0,U,4),2,"I") | 
|---|
| 162 | Q 1 | 
|---|
| 163 | ; | 
|---|
| 164 | SURPODX(PRODX,PODX1,PODX2,PODX3,PODX4,PODX5) ;Get postop diagnosis codes | 
|---|
| 165 | ;Init variables | 
|---|
| 166 | N CODE,I,PODX | 
|---|
| 167 | S (PRODX,PODX1,PODX2,PODX3,PODX4,PODX5)="",CODE=0 | 
|---|
| 168 | ;Check input | 
|---|
| 169 | Q:'$D(DATAOP) 0 | 
|---|
| 170 | ;Get principal postop dx code | 
|---|
| 171 | S PRODX=$$GET1^DIQ(80,$P(DATAOP,U,3),.01) | 
|---|
| 172 | ;Get other postop dx codes | 
|---|
| 173 | S (CODE,I)=0 F  S CODE=$O(^SRO(136,ECD0,4,CODE)) Q:'CODE  Q:I>5  D | 
|---|
| 174 | .S I=I+1,PODX="PODX"_I,@PODX=$$GET1^DIQ(80,$P(^SRO(136,ECD0,4,CODE,0),U),.01) | 
|---|
| 175 | Q 1 | 
|---|