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

BTIUPCC1.m

Go to the documentation of this file.
  1. BTIUPCC1 ; IHS/ITSC/LJF - IHS PCC OBJECTS ;06-Jan-2016 12:37;DU
  1. ;;1.0;TEXT INTEGRATION UTILITIES;**1002,1004,1005,1006,1010,1012,1013,1016**;NOV 04, 2004;Build 10
  1. ;IHS/ITSC/LJF 02/24/2005 PATCH 1002 - enhanced measurement display
  1. ; 04/14/2005 PATCH 1002 - fixed logic for last measurement on same day
  1. ; 01/26/2006 PATCH 1004 - Added fix for problem list w/o dates
  1. ; Fixed BMI logic
  1. ; Fixed logic for vitals for inpts
  1. ; Patch 1005 fixed formatting error on date for correct sorting
  1. ; Patch 1006 added classification for problems, skip entered in error vitals
  1. ; Patch 1010 added qualifiers
  1. ; Patch 1012 Problems changed for new statuses
  1. ; Patch 1016 added comments to problems
  1. LASTPRC(DFN,TIUICD,TIUPRC) ;EP -- returns date of last X procedure
  1. ;TIUICD=array of ICD procedure codes
  1. ;TIUPRC=phrase explaining type of procedures; used in output
  1. Q:'$G(DFN) Q:'$O(TIUICD(0)) Q:$G(TIUPRC)=""
  1. NEW PRCN,PRCDT,TIUARR,TIU
  1. ; -- loop thru all procedures for patient
  1. S PRCN=0 F S PRCN=$O(^AUPNVPRC("AC",DFN,PRCN)) Q:'PRCN D
  1. . K TIU D ENP^XBDIQ1(9000010.08,PRCN,".01;.03;.04;1201","TIU(","I")
  1. . I '$D(TIUICD(TIU(.01))) Q ;ICD code not on list
  1. . ;
  1. . ; -- get date: use event date if set, otherwise find visit date
  1. . S PRCDT=$S(TIU(1201,"I")]"":TIU(1201,"I"),1:$$GET1^DIQ(9000010,TIU(.03,"I"),.01,"I"))
  1. . ;
  1. . ; -- set array using date
  1. . S TIUARR(PRCDT)=TIU(.04)
  1. ;
  1. ; -- find most recent procedure from list
  1. S PRCDT=$O(TIUARR(""),-1) I 'PRCDT Q "No "_TIUPRC_" found"
  1. ;
  1. ; -- return caption, date and provider narrative
  1. Q "Last "_TIUPRC_": "_$$FMTE^XLFDT(PRCDT,"5D")_" ("_TIUARR(PRCDT)_")"
  1. ;
  1. ;
  1. LSTSK(DFN,TIUTST) ;EP; -- returns most current skin test for single test
  1. NEW SKT,VDT,IEN,X,TIU,LINE
  1. S SKT=$O(^AUTTSK("B",TIUTST,0)) I SKT="" Q ""
  1. S VDT=0
  1. F S VDT=$O(^AUPNVSK("AA",DFN,SKT,VDT)) Q:'VDT!($G(LINE)]"") D
  1. . S IEN=0
  1. . F S IEN=$O(^AUPNVSK("AA",DFN,SKT,VDT,IEN)) Q:'IEN!($G(LINE)]"") D
  1. .. K TIU D ENP^XBDIQ1(9000010.12,IEN,".03:.06","TIU(")
  1. .. I TIU(.04)="" S LINE="Placed on "_TIU(.03) Q
  1. .. S LINE=$$PAD($J(TIU(.04),12)_" "_TIU(.05),25)
  1. .. S LINE=LINE_"Date Read: "_TIU(.06)
  1. S X="Last "_$$PAD(TIUTST_":",12)
  1. Q X_$S($G(LINE)]"":LINE,1:" - Not Done -")
  1. ;
  1. LASTMSR(DFN,TIUMSR,TIUCAP,TIUDATE) ;EP; -- returns last measurement for patient
  1. ; TIUMSR=measurement name
  1. ; TIUCAP=1 if caption with measurement name is to be returned
  1. ; TIUDATE=1 return date measurement taken
  1. NEW LINE,X,VAIN
  1. ;Run different routine if patient is an inpatient
  1. ;Added in patch 4
  1. D INP^VADPT
  1. I $G(VAIN(1)) S LINE=$$LSTMEAS^BTIUPCC4(DFN,TIUMSR,.VAIN)
  1. I '$G(VAIN(1)) S LINE=$$LSTMEAS(DFN,TIUMSR)
  1. S X=$S($G(TIUCAP):"Last "_TIUMSR_": ",1:"")
  1. ;
  1. ;IHS/ITSC/LJF 02/24/2005 PATCH 1002 lines added to display more details
  1. NEW Y,RET,VMIEN
  1. I $P(LINE,U,2)="" Q X_$P(LINE,U)
  1. I TIUMSR="TMP" S Y=$P(LINE,U),Y=Y_" F ["_$J((Y-32)*(5/9),3,1)_" C]",$P(LINE,U)=Y
  1. I ((TIUMSR="HT")!(TIUMSR="HC")!(TIUMSR="WC")!(TIUMSR="AG")) S Y=$P(LINE,U),Y=$J(Y,5,2)_" in ["_$J((Y*2.54),5,2)_" cm]",$P(LINE,U)=Y
  1. I TIUMSR="WT" S Y=$P(LINE,U),Y=$J(Y,5,2)_" lb ["_$J((Y*.454),5,2)_" kg]",$P(LINE,U)=Y
  1. I TIUMSR="BMI" D
  1. .S VMIEN=$P(LINE,U,2)
  1. .S Y=$P(LINE,U),Y=$J(Y,5,2)
  1. .I $$PREG^BTIUPCC6(DFN,VMIEN)=1 S Y=Y_"*"
  1. .S $P(LINE,U)=Y
  1. I $P(LINE,U,4)="" S RET=X_$P(LINE,U)_$$LSTDATE($P(LINE,U,2),$P(LINE,U,3),$G(TIUDATE))
  1. I $P(LINE,U,4)'="" S RET=X_$P(LINE,U)_$$LSTDATE($P(LINE,U,2),$P(LINE,U,3),$G(TIUDATE))_" Qualifiers: "_$P(LINE,U,4)
  1. Q RET
  1. ;
  1. BMI(DFN,TIUCAP) ;EP -- returns BMI based on last ht and wt
  1. ; TIUCAP=1 if caption with measurement name is to be returned
  1. NEW HT,WT,H,W,BMI,X
  1. S BMI=$$LASTMSR($G(DFN),"BMI",0,0) I +BMI<1 Q ""
  1. ;S BMI=$J(BMI,0,2)
  1. ;S HT=$$LASTMSR($G(DFN),"HT",0,0) I HT<1 Q ""
  1. ;S WT=$$LASTMSR($G(DFN),"WT",0,0) I WT<1 Q ""
  1. ;S BMI=""
  1. ; -- "borrowed" code from APCHS9B1
  1. ;S W=(WT/5)*2.3,H=(HT*2.5),H=(H*H)/10000,BMI=(W/H),BMI=$J(BMI,4,1)
  1. ; -- PATCH 1004 changed logic to match BEH MEASUREMENT CONTROL FILE
  1. ;S WT=WT*.45359,HT=HT*.0254,HT=HT*HT,BMI=+$J(WT/HT,0,2)
  1. S X=$S($G(TIUCAP):"BMI: ",1:"")
  1. Q X_BMI
  1. ;
  1. LSTMEAS(DFN,TIUMSR) ; -- returns most current measurement (internal values)
  1. ;IHS/ITSC/LJF 04/`4/2005 PATCH 1002 rewrote logic to deal with >1 measurement per day
  1. NEW MSR,VDT,IEN,X,Y,TIU,LINE,ARR,DATE,STOP,QUALIF
  1. S MSR=$O(^AUTTMSR("B",TIUMSR,0)) I MSR="" Q ""
  1. ;
  1. ;S STOP=$O(^AUPNVMSR("AA",DFN,MSR,0))\1 ;stop at most recent date
  1. ;I 'STOP Q "none found" ;none to be found
  1. S VDT=0
  1. S LINE=""
  1. F S VDT=$O(^AUPNVMSR("AA",DFN,MSR,VDT)) Q:'VDT!(LINE'="") D
  1. . S IEN=0
  1. . F S IEN=$O(^AUPNVMSR("AA",DFN,MSR,VDT,IEN)) Q:'IEN D
  1. .. K TIU D ENP^XBDIQ1(9000010.01,IEN,".03;.04;2;1201","TIU(","I")
  1. .. ; value ^ visit ien ^ event date internal format
  1. .. Q:TIU(2,"I")=1 ;Quit if entered in error
  1. .. S LINE=$G(TIU(.04))_U_$G(TIU(.03,"I"))_U_$G(TIU(1201,"I"))
  1. .. ;I TIUMSR'="BP" S Y=$P(LINE,U),Y=$J(Y,5,2),$P(LINE,U)=Y
  1. .. S DATE=$S($G(TIU(1201,"I"))]"":TIU(1201,"I"),1:(9999999-$P(VDT,"."))_"."_$P(VDT,".",2))
  1. .. S QUALIF=$$QUAL^BTIULO7A(IEN)
  1. .. S ARR(DATE,IEN)=LINE_U_QUALIF_U_IEN
  1. ;
  1. I '$D(ARR) Q "None found"
  1. S DATE=$O(ARR(""),-1),IEN=$O(ARR(DATE,""),-1),LINE=ARR(DATE,IEN)
  1. Q $G(LINE)
  1. ;
  1. LSTDATE(DATE1,DATE2,YES) ;EP -- returns event date or visit date;PATCH 1002 fixed typo
  1. I 'YES Q "" ;no date asked for
  1. ;
  1. ;IHS/ITSC/LJF 02/24/2005 PATCH 1002 add parens around dates
  1. ;I $G(DATE2) Q " "_$$FMTE^XLFDT(DATE2) ;event date
  1. ;Q " "_$$GET1^DIQ(9000010,+DATE1,.01) ;visit date from visit ien
  1. I $G(DATE2) Q " ("_$$FMTE^XLFDT(DATE2)_")" ;event date
  1. I 'DATE1 Q " "
  1. ; IHS/MSC/MGH Patch 1005 changed to get date in upper and lower case for correct sorting
  1. N Y S Y=$$GET1^DIQ(9000010,+DATE1,.01,"I") ;visit date from visit ien
  1. Q " ("_$$FMTE^XLFDT(Y)_")" ;visit date from visit ien
  1. ;
  1. PROBLEM(DFN,STATUS,DATES,TARGET,COMMENT) ;EP -- returns the patient's problem list
  1. NEW PROB,CNT,LINE,MOD,ADD,CLASS,TXT,STAT,OLD,EXTRA,PCNT
  1. S CNT=0,OLD="",PCNT=0,COMMENT=$G(COMMENT)
  1. ;IHS/MSC/MGH PATCH 1012
  1. S STAT="" F S STAT=$O(^AUPNPROB("ACTIVE",DFN,STAT)) Q:STAT="" D
  1. .S PROB=0 F S PROB=$O(^AUPNPROB("ACTIVE",DFN,STAT,PROB)) Q:'PROB D
  1. .. Q:STAT="D"
  1. .. Q:STATUS'[STAT
  1. .. I OLD'=STAT D
  1. ... S OLD=STAT
  1. ... S TXT=$S(STAT="A":"Chronic",STAT="E":"Episodic",STAT="S":"Sub-Acute",STAT="O":"Social",1:"Inactive")
  1. ... S CNT=CNT+1
  1. ... S @TARGET@(CNT,0)=TXT_" Problems: "
  1. .. S LINE=$$GET1^DIQ(9000011,PROB,.05) ;prov narrative
  1. .. ;I $P(LINE,"|",1)["*" S LINE=$P(LINE,"|",2)
  1. .. S EXTRA=""
  1. .. I $L(LINE)>75 S EXTRA=$E(LINE,76,$L(LINE)),LINE=$E(LINE,1,75)
  1. .. S CNT=CNT+1,PCNT=PCNT+1
  1. .. S @TARGET@(CNT,0)=$J(PCNT,2)_")"_LINE
  1. .. I EXTRA'="" D
  1. ... S CNT=CNT+1
  1. ... S @TARGET@(CNT,0)=$$SP(5)_EXTRA
  1. .. S LINE=""
  1. .. S CLASS=$$GET1^DIQ(9000011,PROB,.15) ;Classification
  1. .. I CLASS'="" S LINE=" Classification: "_CLASS
  1. .. I DATES="D" D
  1. ... S ADD=$$GET1^DIQ(9000011,PROB,.08),MOD=$$GET1^DIQ(9000011,PROB,.03) ;dates added/modified
  1. ... S LINE=LINE_"("_$S(ADD=MOD:"Added on "_ADD,1:"Last update on "_MOD)_")"
  1. ... S CNT=CNT+1
  1. ... S @TARGET@(CNT,0)=$$SP(5)_LINE
  1. ..D QUAL^BTIUPV1(PROB,.CNT)
  1. ..I COMMENT=1 D NOTEDSP(PROB)
  1. I CNT=0 S @TARGET@(1,0)=$S(STATUS="A":"Chronic",STATUS="E":"Episodic",STATUS="S":"Sub-Acute",STATUS="O":"Social",STATUS="I":"Inactive",1:"Active")_" Problems: None Found"
  1. Q "~@"_$NA(@TARGET)
  1. ;
  1. UPDPROB(DFN,TARGET) ;EP; -- returns list of problems added or updated today
  1. NEW PROB,CNT,LINE,STATUS,ADD,MOD,CLASS
  1. F STATUS="A","E","S","O","I" D
  1. . S PROB=0 F S PROB=$O(^AUPNPROB("ACTIVE",DFN,STATUS,PROB)) Q:'PROB D
  1. .. S ADD=$$GET1^DIQ(9000011,PROB,.08,"I"),MOD=$$GET1^DIQ(9000011,PROB,.03,"I") ;dates added/modified (internal format)
  1. .. I (ADD'=DT)&(MOD'=DT) Q ;not added or updated today
  1. .. S CNT=$G(CNT)+1
  1. .. I CNT=1 S @TARGET@(1,0)="Problem List Updates: " S CNT=2
  1. .. S LINE=$$GET1^DIQ(9000011,PROB,.05)_" ["_STATUS_"] " ;prov narrative and status
  1. .. S CLASS=$$GET1^DIQ(9000011,PROB,.15) ;CLASSIFICATION
  1. .. I CLASS'="" S LINE=LINE_" Classification: "_LINE
  1. .. S LINE=LINE_" ("_$S(ADD=MOD:"Added",1:"Updated")_")"
  1. .. S @TARGET@(CNT,0)=$$SP(5)_LINE
  1. I '$G(CNT) S @TARGET@(1,0)="Problem List Updates: None Found"
  1. Q "~@"_$NA(@TARGET)
  1. ;
  1. PAD(DATA,LENGTH) ; -- SUBRTN to pad length of data
  1. Q $E(DATA_$$REPEAT^XLFSTR(" ",LENGTH),1,LENGTH)
  1. ;
  1. SP(NUM) ; -- SUBRTN to pad spaces
  1. Q $$PAD(" ",NUM)
  1. NOTEDSP(PROB) ;Display notes for this problem
  1. N BTIUNFP,BTIUQ,SITE,BHSNAB,BTIUNDF,BHSITE,BFCN,BTIUN,BTIUNAR
  1. S BTIUNFP=0 F BTIUQ=0:0 S BTIUNFP=$O(^AUPNPROB(PROB,11,BTIUNFP)) Q:'BTIUNFP D DSPFACN
  1. Q
  1. DSPFACN ; DISPLAY NOTES FOR SELECTED FACILITY
  1. Q:$D(^AUPNPROB(PROB,11,BTIUNFP,11,0))'=1 Q:$O(^(0))=""
  1. S BHSITE=^AUPNPROB(PROB,11,BTIUNFP,0) D GETSITE^BHSUTL S BFCN=BHSNAB
  1. S BTIUNDF=0 F BTIUQ=0:0 S BTIUNDF=$O(^AUPNPROB(PROB,11,BTIUNFP,11,BTIUNDF)) Q:'BTIUNDF S BTIUN=^(BTIUNDF,0) D DSPN
  1. Q
  1. DSPN ; DISPLAY SINGLE NOTE
  1. N NTEDTE,TXT2,COMM,X,SUBCOUNT,SUBLINE
  1. Q:$P(BTIUN,U,4)="E"
  1. Q:$P(BTIUN,U,4)="I"
  1. S COMM=$P(BTIUN,U,3) S X=$P(BTIUN,U,5)
  1. I X>0 D REGDT4^GMTSU S NTEDTE=X
  1. F BTIUQ=0:0 Q:$E(BFCN)'=" " S BFCN=$E(BFCN,2,99)
  1. S CNT=CNT+1
  1. S @TARGET@(CNT,0)=" Note: "_BFCN_" "_$P(BTIUN,U)_" on "_NTEDTE
  1. S MAXLEN=60
  1. I $L(COMM)>MAXLEN D
  1. .S TXT2=$$WRAP^TIULS(COMM,MAXLEN)
  1. .F SUBCOUNT=1:1 S SUBLINE=$P(TXT2,"|",SUBCOUNT) Q:SUBLINE="" D ADD2(SUBLINE)
  1. E D ADD2(COMM)
  1. ADD2(TXT) ;
  1. S CNT=CNT+1
  1. S @TARGET@(CNT,0)=" "_TXT
  1. Q
  1. S BHSTXT=BHSNAR,BHSICL=34 D PRTTXT^BHSUTL
  1. Q