| 1 | FHMTK8 ; HIOFO/SS - DIET PATTERN RELATED UPDATES ;02/22/01  09:02
 | 
|---|
| 2 |  ;;5.5;DIETETICS;;Jan 28, 2005
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | SO ;check and update Stand.Orders,called from FHMTK7
 | 
|---|
| 5 |  N FH S FH=$$DOSO(FHDFN,ADM)
 | 
|---|
| 6 |  Q
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 | DOSO(FHDFN,FHADM) ;check/update SO
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  N FHMX,FHCNT,FHPSO,FHS1,FH,FHDP
 | 
|---|
| 11 |  S FHDP=$$CURDT(FHDFN,FHADM) ;current DietPattr
 | 
|---|
| 12 |  ;1)for patterns edited - update 
 | 
|---|
| 13 |  ;2)if no pattern/deleted (FHDP=-1) -cancel all diet related
 | 
|---|
| 14 |  I FHDP'<0 Q:'$D(^TMP($J,+FHDP)) 0
 | 
|---|
| 15 |  S FHCNT=0
 | 
|---|
| 16 |  F FH=0:0 S FH=$O(^FHPT("ASP",FHDFN,FHADM,FH)) Q:FH<1  D
 | 
|---|
| 17 |  . S FHS1=$G(^FHPT(FHDFN,"A",FHADM,"SP",FH,0))
 | 
|---|
| 18 |  . I $P(FHS1,"^",9)="Y" S FHCNT=FHCNT+1,FHPSO("C",FH)=FHS1
 | 
|---|
| 19 |  Q $$CHKSO(FHDP,.FHPSO)  ;0-no changes,1-changes
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | CHKSO(FHDT,FHCSO) ;compares SO of diet patterns(FHDT) 
 | 
|---|
| 22 |  ;and patient (FHCSO)
 | 
|---|
| 23 |  N FHML,FH,FHSO,FHCNT2,FH1,FH2
 | 
|---|
| 24 |  S FHCNT2=0
 | 
|---|
| 25 |  F FHML="B","N","E" D  ;-thru diff meals
 | 
|---|
| 26 |  . S FH1=0   ;----thru diet pattern SO
 | 
|---|
| 27 |  . F  S FH1=$O(^FH(111.1,FHDT,FHML_"S",FH1)) Q:+FH1=0  D
 | 
|---|
| 28 |  .. S FHCNT2=FHCNT2+1
 | 
|---|
| 29 |  .. S FHCSO("N",FHCNT2)=FHML_"^"_^FH(111.1,FHDT,FHML_"S",FH1,0) ;dietpat
 | 
|---|
| 30 |  .. S FH2=0 ;-----thru patient's diet related SOrders
 | 
|---|
| 31 |  .. F  S FH2=$O(FHCSO("C",FH2)) Q:+FH2=0  D  Q:+FH2=0
 | 
|---|
| 32 |  ... Q:$P(FHCSO("C",FH2),"^",3)'=FHML  ;diff meal
 | 
|---|
| 33 |  ... I $P(FHCSO("C",FH2),"^",2)=+$P(FHCSO("N",FHCNT2),"^",2) D  S FH2=0
 | 
|---|
| 34 |  .... I $P(FHCSO("C",FH2),"^",8)'=$P(FHCSO("N",FHCNT2),"^",3) S FHCSO("U",FH2)=FHCSO("C",FH2),$P(FHCSO("U",FH2),"^",8)=$P(FHCSO("N",FHCNT2),"^",3)
 | 
|---|
| 35 |  .... K FHCSO("N",FHCNT2),FHCSO("C",FH2) Q
 | 
|---|
| 36 |  ;FHCSO contains info for update
 | 
|---|
| 37 |  ;subscripts mean: "N"-insert,"U"-change amount,"C"-cancel
 | 
|---|
| 38 |  I $D(FHCSO) D UPDTSO(FHDFN,FHADM,.FHCSO) Q 1  ; updated
 | 
|---|
| 39 |  Q 0  ;no changes
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | UPDTSO(FHDFN,FHADM,FHUCSO) ;update Standing orders. 
 | 
|---|
| 42 |  ;FHUCSO-array(see CHKSO for format)
 | 
|---|
| 43 |  N FHNOW,FH,FHNEW
 | 
|---|
| 44 |  ;D PATNAME^FHOMUTL I DFN="" Q ;for ^FHORX
 | 
|---|
| 45 |  ;I '$D(DFN) N DFN S DFN=FHDFN ;for ^FHORX
 | 
|---|
| 46 |  I '$D(ADM) N ADM S ADM=FHADM
 | 
|---|
| 47 |  D NOW^%DTC S FHNOW=%
 | 
|---|
| 48 |  I '$D(DUZ) W !,"Unknown user" Q
 | 
|---|
| 49 |  ; cancel
 | 
|---|
| 50 |  S FH=0 F  S FH=$O(FHUCSO("C",FH)) Q:+FH=0  D
 | 
|---|
| 51 |  . D CANCSO
 | 
|---|
| 52 |  ; update
 | 
|---|
| 53 |  S FH=0 F  S FH=$O(FHUCSO("U",FH)) Q:+FH=0  D
 | 
|---|
| 54 |  . D CANCSO
 | 
|---|
| 55 |  . S FHNEW=$$ADDSO(FHDFN,FHADM,$P(FHUCSO("U",FH),"^",3),$P(FHUCSO("U",FH),"^",2),$P(FHUCSO("U",FH),"^",8)) S EVT="S^O^"_FHNEW D ^FHORX
 | 
|---|
| 56 |  ; add new
 | 
|---|
| 57 |  S FH=0 F  S FH=$O(FHUCSO("N",FH)) Q:+FH=0  D
 | 
|---|
| 58 |  . S FHNEW=$$ADDSO(FHDFN,FHADM,$P(FHUCSO("N",FH),"^",1),$P(FHUCSO("N",FH),"^",2),$P(FHUCSO("N",FH),"^",3)) S EVT="S^O^"_FHNEW D ^FHORX
 | 
|---|
| 59 |  Q
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | CANCSO ;cancel SO
 | 
|---|
| 62 |  S $P(^FHPT(FHDFN,"A",FHADM,"SP",FH,0),"^",6,7)=FHNOW_"^"_DUZ
 | 
|---|
| 63 |  K ^FHPT("ASP",FHDFN,FHADM,FH)
 | 
|---|
| 64 |  S EVT="S^C^"_FH D ^FHORX  ;file event
 | 
|---|
| 65 |  Q
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 | ADDSO(FHDFN,FHADM,FHML,FHSO,FHN)     ; Add Standing Order
 | 
|---|
| 68 |  N FHX,FH
 | 
|---|
| 69 |  S FH=0
 | 
|---|
| 70 | AGN L +^FHPT(FHDFN,"A",FHADM,"SP",0)
 | 
|---|
| 71 |  I '$D(^FHPT(FHDFN,"A",FHADM,"SP",0)) S ^FHPT(FHDFN,"A",FHADM,"SP",0)="^115.08^^"
 | 
|---|
| 72 |  S FHX=^FHPT(FHDFN,"A",FHADM,"SP",0),FH=$P(FHX,"^",3)+1,^(0)=$P(FHX,"^",1,2)_"^"_FH_"^"_($P(FHX,"^",4)+1)
 | 
|---|
| 73 |  L -^FHPT(FHDFN,"A",FHADM,"SP",0)
 | 
|---|
| 74 |  G:$D(^FHPT(FHDFN,"A",FHADM,"SP",FH)) AGN
 | 
|---|
| 75 |  S ^FHPT(FHDFN,"A",FHADM,"SP",FH,0)=FH_"^"_FHSO_"^"_FHML_"^"_FHNOW_"^"_DUZ_"^^^"_FHN_"^Y",^FHPT("ASP",FHDFN,FHADM,FH)=""
 | 
|---|
| 76 |  Q FH
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  ;--------- Suppl Feedings --------------------
 | 
|---|
| 79 | SF ;check/update diet related SF,called from FHMTK7
 | 
|---|
| 80 |  D DOSF(FHDFN,ADM)
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 | DOSF(FHDFN,FHADM) ;check/update SF
 | 
|---|
| 83 |  ;FHDFN-patient,FHADM-admission
 | 
|---|
| 84 |  N FHDSF,FH,FHPSF
 | 
|---|
| 85 |  ;current DietPattr (DP)'s
 | 
|---|
| 86 |  S FH=$$CURDT(FHDFN,FHADM)
 | 
|---|
| 87 |  ;update only for patterns edited
 | 
|---|
| 88 |  I FH'<0 Q:'$D(^TMP($J,+FH))
 | 
|---|
| 89 |  ;DietPattr's SF menu (ien of 118.1)
 | 
|---|
| 90 |  S FHDSF=$P($G(^FH(111.1,FH,0)),"^",8)
 | 
|---|
| 91 |  ;Patient's SF menu info
 | 
|---|
| 92 |  ;CURRENT seq# of SF MENU entered via SF menu option
 | 
|---|
| 93 |  S FHPSF("N")=$P($G(^FHPT(FHDFN,"A",FHADM,0)),"^",7)
 | 
|---|
| 94 |  S FHPSF("E")=$S(FHPSF("N")="":1,1:0) ;1-if cancelled Explicitly
 | 
|---|
| 95 |  ; if not cancelled Explicitly it still can be entered explicitly
 | 
|---|
| 96 |  ; as well as via diet pattern
 | 
|---|
| 97 |  ; pick up SF seq# from subfile
 | 
|---|
| 98 |  S:FHPSF("E")=1 FHPSF("N")=$P($G(^FHPT(FHDFN,"A",FHADM,"SF",0)),"^",3)
 | 
|---|
| 99 |  ;get SF info
 | 
|---|
| 100 |  S FHPSF=$G(^FHPT(FHDFN,"A",FHADM,"SF",+FHPSF("N"),0))
 | 
|---|
| 101 |  ;if it is expired or cancelled
 | 
|---|
| 102 |  S FHPSF("C")=$S($P(FHPSF,"^",32)="":0,1:1)
 | 
|---|
| 103 |  ;if INDIVIDUALIZED - do nothing
 | 
|---|
| 104 |  Q:+$P(FHPSF,"^",4)=1
 | 
|---|
| 105 |  ;if it is not diet related or if it entered Explicitly via SF menu
 | 
|---|
| 106 |  ;and diet pattern has no SF menu - then do nothing
 | 
|---|
| 107 |  I $P(FHPSF,"^",34)'="Y" Q:FHDSF=""
 | 
|---|
| 108 |  I FHPSF("E")=1 Q:FHDSF=""
 | 
|---|
| 109 |  D UPDSF(FHDFN,FHADM,FHDSF,.FHPSF)
 | 
|---|
| 110 |  Q
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 | UPDSF(FHDFN,FHADM,FHSF,FHPSF) ;updates diet related Suppl.Feed.
 | 
|---|
| 113 |  N FHX,FHNO,FHPNO,FHPNN,FHNOW
 | 
|---|
| 114 |  D NOW^%DTC S FHNOW=%
 | 
|---|
| 115 |  ;D PATNAME^FHOMUTL I DFN="" Q ;for ^FHORX
 | 
|---|
| 116 |  ;I '$D(DFN) N DFN S DFN=FHDFN ;for ^FHORX
 | 
|---|
| 117 |  I '$D(ADM) N ADM S ADM=FHADM
 | 
|---|
| 118 |  I '$D(DUZ) W !,"Unknown user" Q
 | 
|---|
| 119 |  ;if SF is diet related & diet pattr doesn't have SF - cancel it
 | 
|---|
| 120 |  I FHSF="" S FHNO(0)=+FHPSF("N") D:FHNO(0)>0 CANCSF Q
 | 
|---|
| 121 |  ;Diet.Pattr's SFmenu items
 | 
|---|
| 122 |  S FHPNO=$G(^FH(118.1,+FHSF,1)) Q:FHPNO=""
 | 
|---|
| 123 |  ;if no patient SF menu - add
 | 
|---|
| 124 |  G:+FHPSF("N")=0!(FHPSF("C")=1) CONT
 | 
|---|
| 125 |  ;if diffr SF menu - change it
 | 
|---|
| 126 |  G:+$P(FHPSF,"^",4)'=+FHSF CONT
 | 
|---|
| 127 |  ;If SF menu and its content are the same - do nothing
 | 
|---|
| 128 |  Q:$P(FHPSF,"^",5,29)=FHPNO
 | 
|---|
| 129 |  ;cancel current and add new
 | 
|---|
| 130 | CONT S FHPNN="^"_FHNOW_"^"_DUZ_"^"_FHSF_"^"_FHPNO
 | 
|---|
| 131 |  ;create new record
 | 
|---|
| 132 | TRYSF L +^FHPT(FHDFN,"A",FHADM,"SF",0)
 | 
|---|
| 133 |  I '$D(^FHPT(FHDFN,"A",FHADM,"SF",0)) S ^FHPT(FHDFN,"A",FHADM,"SF",0)="^115.07^^"
 | 
|---|
| 134 |  S FHX=^FHPT(FHDFN,"A",FHADM,"SF",0),FHNO(0)=+$P(FHX,"^",3),FHNO=FHNO(0)+1,^(0)=$P(FHX,"^",1,2)_"^"_FHNO_"^"_($P(FHX,"^",4)+1)
 | 
|---|
| 135 |  L -^FHPT(FHDFN,"A",FHADM,"SF",0) I $D(^FHPT(FHDFN,"A",FHADM,"SF",FHNO)) G TRYSF
 | 
|---|
| 136 |  ;add new
 | 
|---|
| 137 |  S ^FHPT(FHDFN,"A",FHADM,"SF",FHNO,0)=FHNO_"^"_$P(FHPNN,"^",2,99)
 | 
|---|
| 138 |  ;when new one is OK - cancel previous & file event
 | 
|---|
| 139 |  D CANCSF
 | 
|---|
| 140 |  ;update # and put timestamp for new record
 | 
|---|
| 141 |  S $P(^FHPT(FHDFN,"A",FHADM,0),"^",7)=FHNO
 | 
|---|
| 142 |  S:FHNO $P(^FHPT(FHDFN,"A",FHADM,"SF",FHNO,0),"^",30,31)=FHNOW_"^"_DUZ
 | 
|---|
| 143 |  ;set diet related for new record
 | 
|---|
| 144 |  S:FHNO $P(^FHPT(FHDFN,"A",FHADM,"SF",FHNO,0),"^",34)="Y"
 | 
|---|
| 145 |  ;file event
 | 
|---|
| 146 |  S EVT="F^O^"_FHNO D ^FHORX
 | 
|---|
| 147 |  Q
 | 
|---|
| 148 |  ;cancel previous & file event
 | 
|---|
| 149 | CANCSF I FHNO(0)'=0&(FHPSF("C")=0) D
 | 
|---|
| 150 |  . S $P(^FHPT(FHDFN,"A",FHADM,"SF",FHNO(0),0),"^",32,33)=FHNOW_"^"_DUZ
 | 
|---|
| 151 |  . S $P(^FHPT(FHDFN,"A",FHADM,0),"^",7)=""
 | 
|---|
| 152 |  . S EVT="F^C^"_FHNO(0) D ^FHORX
 | 
|---|
| 153 |  Q
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 | CURDT(FHDFN,FHADM) ;get current patient's diet pattern ien of 111.1
 | 
|---|
| 156 |  N FHDT,FHOR,FHZ
 | 
|---|
| 157 |  S FHDT=$P($G(^FHPT(FHDFN,"A",FHADM,0)),"^",2) Q:FHDT<1 -1
 | 
|---|
| 158 |  S FHZ=$G(^FHPT(FHDFN,"A",FHADM,"DI",FHDT,0)),FHOR=$P(FHZ,"^",2,6) I "^^^^"[FHOR Q -1
 | 
|---|
| 159 |  S FHDT=$O(^FH(111.1,"AB",FHOR,0)) Q:FHDT="" -1  ;doesn't exist
 | 
|---|
| 160 |  Q FHDT
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 | NEWTMP ;save original state before editing
 | 
|---|
| 163 |  Q:$O(^TMP($J,DA,""))'=""  ;repeated editing
 | 
|---|
| 164 |  M ^TMP($J,DA)=^FH(111.1,DA)
 | 
|---|
| 165 |  Q
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 | CLEANTMP ;
 | 
|---|
| 168 |  N FHA1,FHB1,FHDA
 | 
|---|
| 169 |  S FHDA=""
 | 
|---|
| 170 |  F  S FHDA=$O(^TMP($J,FHDA)) Q:+FHDA=0  D
 | 
|---|
| 171 |  . S FHA1="^TMP($J,FHDA,"""")",FHB1="^FH(111.1,FHDA,"""")"
 | 
|---|
| 172 |  . F  Q:$$FETCH(.FHA1,$J,FHDA)'=$$FETCH(.FHB1,111.1,FHDA)  I FHA1="" K ^TMP($J,FHDA) Q
 | 
|---|
| 173 |  Q
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 | FETCH(FHX,FHSUB,FHDP) ;
 | 
|---|
| 176 |  S FHX=$Q(@FHX)
 | 
|---|
| 177 |  I $P($P(FHX,",",1),"(",2)'=FHSUB!($P(FHX,",",2)'=FHDP) S FHX="" Q ""
 | 
|---|
| 178 |  Q $P(FHX,",",2,99)_"="_@FHX
 | 
|---|
| 179 |  ;
 | 
|---|