Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: FHMTK8

FHMTK8.m

Go to the documentation of this file.
  1. FHMTK8 ; HIOFO/SS - DIET PATTERN RELATED UPDATES ;02/22/01 09:02
  1. ;;5.5;DIETETICS;;Jan 28, 2005
  1. ;
  1. SO ;check and update Stand.Orders,called from FHMTK7
  1. N FH S FH=$$DOSO(FHDFN,ADM)
  1. Q
  1. ;
  1. DOSO(FHDFN,FHADM) ;check/update SO
  1. ;
  1. N FHMX,FHCNT,FHPSO,FHS1,FH,FHDP
  1. S FHDP=$$CURDT(FHDFN,FHADM) ;current DietPattr
  1. ;1)for patterns edited - update
  1. ;2)if no pattern/deleted (FHDP=-1) -cancel all diet related
  1. I FHDP'<0 Q:'$D(^TMP($J,+FHDP)) 0
  1. S FHCNT=0
  1. F FH=0:0 S FH=$O(^FHPT("ASP",FHDFN,FHADM,FH)) Q:FH<1 D
  1. . S FHS1=$G(^FHPT(FHDFN,"A",FHADM,"SP",FH,0))
  1. . I $P(FHS1,"^",9)="Y" S FHCNT=FHCNT+1,FHPSO("C",FH)=FHS1
  1. Q $$CHKSO(FHDP,.FHPSO) ;0-no changes,1-changes
  1. ;
  1. CHKSO(FHDT,FHCSO) ;compares SO of diet patterns(FHDT)
  1. ;and patient (FHCSO)
  1. N FHML,FH,FHSO,FHCNT2,FH1,FH2
  1. S FHCNT2=0
  1. F FHML="B","N","E" D ;-thru diff meals
  1. . S FH1=0 ;----thru diet pattern SO
  1. . F S FH1=$O(^FH(111.1,FHDT,FHML_"S",FH1)) Q:+FH1=0 D
  1. .. S FHCNT2=FHCNT2+1
  1. .. S FHCSO("N",FHCNT2)=FHML_"^"_^FH(111.1,FHDT,FHML_"S",FH1,0) ;dietpat
  1. .. S FH2=0 ;-----thru patient's diet related SOrders
  1. .. F S FH2=$O(FHCSO("C",FH2)) Q:+FH2=0 D Q:+FH2=0
  1. ... Q:$P(FHCSO("C",FH2),"^",3)'=FHML ;diff meal
  1. ... I $P(FHCSO("C",FH2),"^",2)=+$P(FHCSO("N",FHCNT2),"^",2) D S FH2=0
  1. .... 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)
  1. .... K FHCSO("N",FHCNT2),FHCSO("C",FH2) Q
  1. ;FHCSO contains info for update
  1. ;subscripts mean: "N"-insert,"U"-change amount,"C"-cancel
  1. I $D(FHCSO) D UPDTSO(FHDFN,FHADM,.FHCSO) Q 1 ; updated
  1. Q 0 ;no changes
  1. ;
  1. UPDTSO(FHDFN,FHADM,FHUCSO) ;update Standing orders.
  1. ;FHUCSO-array(see CHKSO for format)
  1. N FHNOW,FH,FHNEW
  1. ;D PATNAME^FHOMUTL I DFN="" Q ;for ^FHORX
  1. ;I '$D(DFN) N DFN S DFN=FHDFN ;for ^FHORX
  1. I '$D(ADM) N ADM S ADM=FHADM
  1. D NOW^%DTC S FHNOW=%
  1. I '$D(DUZ) W !,"Unknown user" Q
  1. ; cancel
  1. S FH=0 F S FH=$O(FHUCSO("C",FH)) Q:+FH=0 D
  1. . D CANCSO
  1. ; update
  1. S FH=0 F S FH=$O(FHUCSO("U",FH)) Q:+FH=0 D
  1. . D CANCSO
  1. . 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
  1. ; add new
  1. S FH=0 F S FH=$O(FHUCSO("N",FH)) Q:+FH=0 D
  1. . 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
  1. Q
  1. ;
  1. CANCSO ;cancel SO
  1. S $P(^FHPT(FHDFN,"A",FHADM,"SP",FH,0),"^",6,7)=FHNOW_"^"_DUZ
  1. K ^FHPT("ASP",FHDFN,FHADM,FH)
  1. S EVT="S^C^"_FH D ^FHORX ;file event
  1. Q
  1. ;
  1. ADDSO(FHDFN,FHADM,FHML,FHSO,FHN) ; Add Standing Order
  1. N FHX,FH
  1. S FH=0
  1. AGN L +^FHPT(FHDFN,"A",FHADM,"SP",0)
  1. I '$D(^FHPT(FHDFN,"A",FHADM,"SP",0)) S ^FHPT(FHDFN,"A",FHADM,"SP",0)="^115.08^^"
  1. S FHX=^FHPT(FHDFN,"A",FHADM,"SP",0),FH=$P(FHX,"^",3)+1,^(0)=$P(FHX,"^",1,2)_"^"_FH_"^"_($P(FHX,"^",4)+1)
  1. L -^FHPT(FHDFN,"A",FHADM,"SP",0)
  1. G:$D(^FHPT(FHDFN,"A",FHADM,"SP",FH)) AGN
  1. S ^FHPT(FHDFN,"A",FHADM,"SP",FH,0)=FH_"^"_FHSO_"^"_FHML_"^"_FHNOW_"^"_DUZ_"^^^"_FHN_"^Y",^FHPT("ASP",FHDFN,FHADM,FH)=""
  1. Q FH
  1. ;
  1. ;--------- Suppl Feedings --------------------
  1. SF ;check/update diet related SF,called from FHMTK7
  1. D DOSF(FHDFN,ADM)
  1. Q
  1. DOSF(FHDFN,FHADM) ;check/update SF
  1. ;FHDFN-patient,FHADM-admission
  1. N FHDSF,FH,FHPSF
  1. ;current DietPattr (DP)'s
  1. S FH=$$CURDT(FHDFN,FHADM)
  1. ;update only for patterns edited
  1. I FH'<0 Q:'$D(^TMP($J,+FH))
  1. ;DietPattr's SF menu (ien of 118.1)
  1. S FHDSF=$P($G(^FH(111.1,FH,0)),"^",8)
  1. ;Patient's SF menu info
  1. ;CURRENT seq# of SF MENU entered via SF menu option
  1. S FHPSF("N")=$P($G(^FHPT(FHDFN,"A",FHADM,0)),"^",7)
  1. S FHPSF("E")=$S(FHPSF("N")="":1,1:0) ;1-if cancelled Explicitly
  1. ; if not cancelled Explicitly it still can be entered explicitly
  1. ; as well as via diet pattern
  1. ; pick up SF seq# from subfile
  1. S:FHPSF("E")=1 FHPSF("N")=$P($G(^FHPT(FHDFN,"A",FHADM,"SF",0)),"^",3)
  1. ;get SF info
  1. S FHPSF=$G(^FHPT(FHDFN,"A",FHADM,"SF",+FHPSF("N"),0))
  1. ;if it is expired or cancelled
  1. S FHPSF("C")=$S($P(FHPSF,"^",32)="":0,1:1)
  1. ;if INDIVIDUALIZED - do nothing
  1. Q:+$P(FHPSF,"^",4)=1
  1. ;if it is not diet related or if it entered Explicitly via SF menu
  1. ;and diet pattern has no SF menu - then do nothing
  1. I $P(FHPSF,"^",34)'="Y" Q:FHDSF=""
  1. I FHPSF("E")=1 Q:FHDSF=""
  1. D UPDSF(FHDFN,FHADM,FHDSF,.FHPSF)
  1. Q
  1. ;
  1. UPDSF(FHDFN,FHADM,FHSF,FHPSF) ;updates diet related Suppl.Feed.
  1. N FHX,FHNO,FHPNO,FHPNN,FHNOW
  1. D NOW^%DTC S FHNOW=%
  1. ;D PATNAME^FHOMUTL I DFN="" Q ;for ^FHORX
  1. ;I '$D(DFN) N DFN S DFN=FHDFN ;for ^FHORX
  1. I '$D(ADM) N ADM S ADM=FHADM
  1. I '$D(DUZ) W !,"Unknown user" Q
  1. ;if SF is diet related & diet pattr doesn't have SF - cancel it
  1. I FHSF="" S FHNO(0)=+FHPSF("N") D:FHNO(0)>0 CANCSF Q
  1. ;Diet.Pattr's SFmenu items
  1. S FHPNO=$G(^FH(118.1,+FHSF,1)) Q:FHPNO=""
  1. ;if no patient SF menu - add
  1. G:+FHPSF("N")=0!(FHPSF("C")=1) CONT
  1. ;if diffr SF menu - change it
  1. G:+$P(FHPSF,"^",4)'=+FHSF CONT
  1. ;If SF menu and its content are the same - do nothing
  1. Q:$P(FHPSF,"^",5,29)=FHPNO
  1. ;cancel current and add new
  1. CONT S FHPNN="^"_FHNOW_"^"_DUZ_"^"_FHSF_"^"_FHPNO
  1. ;create new record
  1. TRYSF L +^FHPT(FHDFN,"A",FHADM,"SF",0)
  1. I '$D(^FHPT(FHDFN,"A",FHADM,"SF",0)) S ^FHPT(FHDFN,"A",FHADM,"SF",0)="^115.07^^"
  1. 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)
  1. L -^FHPT(FHDFN,"A",FHADM,"SF",0) I $D(^FHPT(FHDFN,"A",FHADM,"SF",FHNO)) G TRYSF
  1. ;add new
  1. S ^FHPT(FHDFN,"A",FHADM,"SF",FHNO,0)=FHNO_"^"_$P(FHPNN,"^",2,99)
  1. ;when new one is OK - cancel previous & file event
  1. D CANCSF
  1. ;update # and put timestamp for new record
  1. S $P(^FHPT(FHDFN,"A",FHADM,0),"^",7)=FHNO
  1. S:FHNO $P(^FHPT(FHDFN,"A",FHADM,"SF",FHNO,0),"^",30,31)=FHNOW_"^"_DUZ
  1. ;set diet related for new record
  1. S:FHNO $P(^FHPT(FHDFN,"A",FHADM,"SF",FHNO,0),"^",34)="Y"
  1. ;file event
  1. S EVT="F^O^"_FHNO D ^FHORX
  1. Q
  1. ;cancel previous & file event
  1. CANCSF I FHNO(0)'=0&(FHPSF("C")=0) D
  1. . S $P(^FHPT(FHDFN,"A",FHADM,"SF",FHNO(0),0),"^",32,33)=FHNOW_"^"_DUZ
  1. . S $P(^FHPT(FHDFN,"A",FHADM,0),"^",7)=""
  1. . S EVT="F^C^"_FHNO(0) D ^FHORX
  1. Q
  1. ;
  1. CURDT(FHDFN,FHADM) ;get current patient's diet pattern ien of 111.1
  1. N FHDT,FHOR,FHZ
  1. S FHDT=$P($G(^FHPT(FHDFN,"A",FHADM,0)),"^",2) Q:FHDT<1 -1
  1. S FHZ=$G(^FHPT(FHDFN,"A",FHADM,"DI",FHDT,0)),FHOR=$P(FHZ,"^",2,6) I "^^^^"[FHOR Q -1
  1. S FHDT=$O(^FH(111.1,"AB",FHOR,0)) Q:FHDT="" -1 ;doesn't exist
  1. Q FHDT
  1. ;
  1. NEWTMP ;save original state before editing
  1. Q:$O(^TMP($J,DA,""))'="" ;repeated editing
  1. M ^TMP($J,DA)=^FH(111.1,DA)
  1. Q
  1. ;
  1. CLEANTMP ;
  1. N FHA1,FHB1,FHDA
  1. S FHDA=""
  1. F S FHDA=$O(^TMP($J,FHDA)) Q:+FHDA=0 D
  1. . S FHA1="^TMP($J,FHDA,"""")",FHB1="^FH(111.1,FHDA,"""")"
  1. . F Q:$$FETCH(.FHA1,$J,FHDA)'=$$FETCH(.FHB1,111.1,FHDA) I FHA1="" K ^TMP($J,FHDA) Q
  1. Q
  1. ;
  1. FETCH(FHX,FHSUB,FHDP) ;
  1. S FHX=$Q(@FHX)
  1. I $P($P(FHX,",",1),"(",2)'=FHSUB!($P(FHX,",",2)'=FHDP) S FHX="" Q ""
  1. Q $P(FHX,",",2,99)_"="_@FHX
  1. ;