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

BQITRSK.m

Go to the documentation of this file.
  1. BQITRSK ;PRXM/HC/ALA-CVD Risk Factors ; 11 Apr 2006 4:25 PM
  1. ;;2.3;ICARE MANAGEMENT SYSTEM;**3,4**;Apr 18, 2012;Build 66
  1. Q
  1. ;
  1. EN(TGLOB) ;EP -- Entry point
  1. ; Input
  1. ; TGLOB - Global that final results will reside in
  1. ;
  1. ;Current Smoker
  1. ; at least 2 smoking POVs ever (not on the same date) or on the
  1. ; Active Problem List or most recent tobacco Health Factor
  1. ;
  1. ; Set up array from File 90506.2
  1. S BQREF="BQIRY" K @BQREF
  1. S TAX="Current Smoker"
  1. D ARY^BQITUTL(TAX,BQREF)
  1. NEW BQGLB1
  1. S BQGLB1=$NA(^TMP("BQITMPR",UID))
  1. K @BQGLB1
  1. ; Call generic program and return data in BQGLB1
  1. D POP^BQITDGN(BQREF,BQGLB1)
  1. ; If data found, set the criteria
  1. S TDFN="" F S TDFN=$O(@BQGLB1@(TDFN)) Q:TDFN="" D
  1. . NEW TX
  1. . S TX=$O(@BQGLB1@(TDFN,"CRITERIA",""))
  1. . D STOR(TDFN,TX,BQGLB1)
  1. K @BQGLB1,@BQREF
  1. ;S TDFN="" F S TDFN=$O(@TGLOB@(TDFN)) Q:TDFN="" S @TGLOB@(TDFN)=1
  1. ;
  1. ; Set up array from File 90506.2
  1. S BQREF="BQIRY" K @BQREF
  1. S TAX="PreDM Metabolic Syndrome"
  1. D ARY^BQITUTL(TAX,BQREF)
  1. ; Set to primary and secondary instead of primary only
  1. I $G(BQIRY(1))'="",$P(BQIRY(1),U,1)["DX" S $P(BQIRY(1),U,8)=0
  1. NEW BQGLB1
  1. S BQGLB1=$NA(^TMP("BQITMPS",UID))
  1. K @BQGLB1
  1. ; Call generic program and return data in BQGLB1
  1. D POP^BQITDGN(BQREF,BQGLB1)
  1. ; If data found, set the criteria
  1. S TDFN="" F S TDFN=$O(@BQGLB1@(TDFN)) Q:TDFN="" D
  1. . NEW TX
  1. . S TX=$O(@BQGLB1@(TDFN,"CRITERIA",""))
  1. . D STOR(TDFN,TX,BQGLB1)
  1. K @BQGLB1,@BQREF,BQIRY
  1. ;
  1. ;Hypertension
  1. ; If documented as POV at least 3 times separated by 90 days,
  1. ; or on the Active problem list.
  1. ;
  1. NEW MFL,TAX,NIT,FREF,GREF,TREF,EXDT,SERV,PRIM,TX,TIEN,DTDIF,IEN,VSERV
  1. S TAX="BGP HYPERTENSION DXS",NIT=3,FREF=9000010.07,PLFLG=1
  1. S GREF=$$ROOT^DILFD(FREF,"",1),TREF=$NA(^TMP("BQITAX",UID)),EXDT=""
  1. S SERV="A;H",PRIM=0
  1. S BQGLB1=$NA(^TMP("BQITMPY",UID))
  1. S TX="Hypertension"
  1. K @TREF,@BQGLB1
  1. ; Build taxonomy reference
  1. D BLD^BQITUTL(TAX,TREF)
  1. S TIEN=0 F S TIEN=$O(@TREF@(TIEN)) Q:'TIEN D
  1. . S DTDIF=""
  1. . D PRB^BQITD03(TIEN,BQGLB1)
  1. S TIEN=0 F S TIEN=$O(@TREF@(TIEN)) Q:'TIEN D
  1. . S IEN="" F S IEN=$O(@GREF@("B",TIEN,IEN),-1) Q:IEN="" D
  1. .. I $G(@GREF@(IEN,0))="" Q
  1. .. S DFN=$$GET1^DIQ(FREF,IEN,.02,"I") Q:DFN=""
  1. .. ; If there are already 2 or more risk factors, then quit
  1. .. I $G(@TGLOB@(DFN))'<2 Q
  1. .. ; if there are more than 3 hypertension diagnoses, then quit
  1. .. ;I $G(@BQGLB1@(DFN))>3 Q
  1. .. S VISIT=$$GET1^DIQ(FREF,IEN,.03,"I") Q:VISIT=""
  1. .. S VSDTM=$$GET1^DIQ(9000010,VISIT,.01,"I")\1 Q:VSDTM=0
  1. .. I $$GET1^DIQ(9000010,VISIT,.11,"I")=1 Q
  1. .. ; check clinical ranking if diagnosis (9000010.07)
  1. .. I FREF=9000010.07,PRIM I $P(@GREF@(IEN,0),U,12)'="P" S MFL=0 D Q:'MFL
  1. ... I $O(@GREF@("AD",VISIT,""))=IEN S MFL=1
  1. .. ; if service categories, check the visit for the service category
  1. .. S VSERV=$$GET1^DIQ(9000010,VISIT,.07,"I")
  1. .. I $G(SERV)'="",SERV'[VSERV Q
  1. .. S @BQGLB1@(DFN,VSDTM,TIEN)="V"_U_VISIT_U_EXDT_U_IEN_U_FREF
  1. .. S @BQGLB1@(DFN)=$G(@BQGLB1@(DFN))+1
  1. ;
  1. S DFN=""
  1. F S DFN=$O(@BQGLB1@(DFN)) Q:DFN="" D
  1. . D HYP(DFN,TGLOB,BQGLB1)
  1. K @BQGLB1,@TREF
  1. ;
  1. ;Obese
  1. NEW DXNN,TMFRAME,EXDT,DTDIF,ENDT,STDT,BMID,BMI,AGE,TX,VST,IEN,VSDTM
  1. NEW DTDIF
  1. S DXNN=$$GDXN^BQITUTL("Obese")
  1. S TMPG=$NA(^TMP("BQIBMI",UID))
  1. K @TMPG
  1. S TMFRAME="T-60M",EXDT="",DTDIF=""
  1. S ENDT=$$DATE^BQIUL1(TMFRAME),STDT=$$DT^XLFDT()
  1. S DTDIF=$$FMDIFF^XLFDT(STDT,ENDT,1)
  1. S TX="Obese"
  1. D ABMI^BQITBMI(TMFRAME,.TMPG)
  1. S BQGLB1=$NA(^TMP("BQITMPO",UID))
  1. K @BQGLB1
  1. S TDFN=0
  1. F S TDFN=$O(@TMPG@(TDFN)) Q:'TDFN D
  1. . S BMID=@TMPG@(TDFN)
  1. . S BMI=$P(BMID,"^",1),AGE=$P(BMID,"^",2)
  1. . I $$OB^BQITBMI(TDFN,BMI,AGE) D
  1. .. F TX="BMI-Height","BMI-Weight" S VST="" D
  1. ... F S VST=$O(@TMPG@(TDFN,"CRITERIA",TX,"V",VST)) Q:VST="" D
  1. .... S IEN="",FREF=9000010.01,EXDT=""
  1. .... F S IEN=$O(@TMPG@(TDFN,"CRITERIA",TX,"V",VST,IEN)) Q:IEN="" D
  1. ..... S VSDTM=$P(@TMPG@(TDFN,"CRITERIA",TX,"V",VST,IEN),U,1)
  1. ..... I DTDIF'="" S EXDT=$$FMADD^XLFDT(VSDTM,DTDIF)
  1. ..... S $P(@BQGLB1@(TDFN,"CRITERIA","Obese","V",VST,IEN),U,1)=VSDTM_U_EXDT_U_IEN_U_FREF
  1. .. D STOR(TDFN,"Obese",BQGLB1)
  1. ;
  1. ;High Blood Pressure
  1. NEW BQGLB1
  1. S BQGLB1=$NA(^TMP("BQITMPP",UID))
  1. K @BQGLB1
  1. NEW QFL
  1. S BCLN=$$FIND1^DIC(40.7,"","Q","EMERGENCY","B","")
  1. S BTYP=$$FIND1^DIC(9999999.07,,"X","BP")
  1. S BDFN=0
  1. F S BDFN=$O(^AUPNVMSR("AA",BDFN)) Q:BDFN="" D
  1. . S RDT="",QFL=0
  1. . F S RDT=$O(^AUPNVMSR("AA",BDFN,BTYP,RDT)) Q:RDT="" D Q:QFL
  1. .. S CT=0,N=""
  1. .. F S N=$O(^AUPNVMSR("AA",BDFN,BTYP,RDT,N)) Q:N="" D Q:QFL
  1. ... S VISIT=$P($G(^AUPNVMSR(N,0)),U,5) Q:VISIT=""
  1. ... ; if the new ENTERED IN ERROR field exists, exclude the record if it is marked as an error
  1. ... I $$VFIELD^DILFD(9000010.01,2) Q:$$GET1^DIQ(9000010.01,N_",",2,"I")=1
  1. ... I $P($G(^AUPNVSIT(VISIT,0)),U,8)=BCLN Q
  1. ... I $P($G(^AUPNVSIT(VISIT,0)),U,11)=1 Q
  1. ... S CT=CT+1 I CT>3 S QFL=1 Q
  1. ... S BP=$P($G(^AUPNVMSR(N,0)),U,4),SYS=$P(BP,"/",1),DIA=$P(BP,"/",2)
  1. ... I SYS=""!(DIA="") Q
  1. ... I SYS<140!(DIA<90) Q
  1. ... I $G(@BQGLB1@(BDFN))'<3 Q
  1. ... S @BQGLB1@(BDFN)=$G(@BQGLB1@(BDFN))+1,FREF=9000010.01
  1. ... S @BQGLB1@(BDFN,"CRITERIA","High BP","V",VISIT,N)=$P($G(^AUPNVSIT(VISIT,0)),U,1)_U_EXDT_U_N_U_FREF
  1. ;
  1. S TX="High BP"
  1. S BDFN="" F S BDFN=$O(@BQGLB1@(BDFN)) Q:BDFN="" D
  1. . I $G(@TGLOB@(BDFN))'<2 Q
  1. . I @BQGLB1@(BDFN)>1,'$D(@TGLOB@(BDFN,"CRITERIA","Hypertension")) D STOR(BDFN,"High BP",BQGLB1)
  1. K @BQGLB1
  1. ;
  1. ;Most recent HDL Lab test
  1. NEW HDATA
  1. S HDATA=$NA(^TMP("BQIHDL",UID))
  1. K @HDATA
  1. S BQGLB1=$NA(^TMP("BQITMPL",UID))
  1. K @BQGLB1
  1. S FREF=9000010.09,GREF=$$ROOT^DILFD(FREF,"",1),TREF=$NA(^TMP("BQITAX",UID))
  1. K @TREF
  1. S TAX="DM AUDIT HDL TAX" D BLD^BQITUTL(TAX,TREF)
  1. S TMFRAME="",ENDT=""
  1. S TIEN=0 F S TIEN=$O(@TREF@(TIEN)) Q:'TIEN D
  1. . S IEN=""
  1. . F S IEN=$O(@GREF@("B",TIEN,IEN),-1) Q:IEN="" D
  1. .. I $G(@GREF@(IEN,0))="" Q
  1. .. S DFN=$$GET1^DIQ(FREF,IEN,.02,"I") Q:DFN=""
  1. .. S SEX=$$GET1^DIQ(2,DFN,.02,"I")
  1. .. S VISIT=$$GET1^DIQ(FREF,IEN,.03,"I") Q:VISIT=""
  1. .. S RESULT=$$GET1^DIQ(FREF,IEN,.04,"E") Q:RESULT=""
  1. .. S VSDTM=$$GET1^DIQ(9000010,VISIT,.01,"I")\1 Q:'VSDTM
  1. .. I $$GET1^DIQ(9000010,VISIT,.11,"I")=1 Q
  1. .. I $G(TMFRAME)'="",VSDTM<ENDT Q
  1. .. S @HDATA@(DFN,VSDTM)=RESULT_"^"_SEX_"^"_VISIT_"^"_IEN_"^"_FREF
  1. ;
  1. NEW TREF1
  1. S TREF1=$NA(^TMP("BQITAX1",UID)) K @TREF1
  1. S TAX="BGP HDL LOINC CODES" D BLD^BQITUTL(TAX,TREF1)
  1. S TIEN=0
  1. F S TIEN=$O(@TREF1@(TIEN)) Q:TIEN="" I $D(@TREF@(TIEN)) K @TREF1@(TIEN)
  1. S TIEN=0 F S TIEN=$O(@TREF1@(TIEN)) Q:'TIEN D
  1. . S IEN=""
  1. . F S IEN=$O(@GREF@("B",TIEN,IEN),-1) Q:IEN="" D
  1. .. I $G(@GREF@(IEN,0))="" Q
  1. .. S DFN=$$GET1^DIQ(FREF,IEN,.02,"I") Q:DFN=""
  1. .. S SEX=$$GET1^DIQ(2,DFN,.02,"I")
  1. .. S VISIT=$$GET1^DIQ(FREF,IEN,.03,"I") Q:VISIT=""
  1. .. S RESULT=$$GET1^DIQ(FREF,IEN,.04,"E") Q:RESULT=""
  1. .. S VSDTM=$$GET1^DIQ(9000010,VISIT,.01,"I")\1 Q:'VSDTM
  1. .. I $$GET1^DIQ(9000010,VISIT,.11,"I")=1 Q
  1. .. I $G(TMFRAME)'="",VSDTM<ENDT Q
  1. .. I '$D(@HDATA@(DFN,VSDTM)) S @HDATA@(DFN,VSDTM)=RESULT_"^"_SEX_"^"_VISIT_"^"_IEN_"^"_FREF
  1. ;
  1. S DFN=""
  1. F S DFN=$O(@HDATA@(DFN)) Q:DFN="" D
  1. . S DATE="",DATE=$O(@HDATA@(DFN,DATE),-1)
  1. . S RESULT=$P(@HDATA@(DFN,DATE),U,1)
  1. . S SEX=$P(@HDATA@(DFN,DATE),U,2)
  1. . S VISIT=$P(@HDATA@(DFN,DATE),U,3)
  1. . S IEN=$P(@HDATA@(DFN,DATE),U,4)
  1. . S FREF=$P(@HDATA@(DFN,DATE),U,5)
  1. . I SEX="M"!(SEX="U"),RESULT<40 D Q
  1. .. S @BQGLB1@(DFN,"CRITERIA","Risk Factor-HDL Lab Test","V",VISIT,IEN)=DATE_U_EXDT_U_IEN_U_FREF
  1. .. D STOR(DFN,"Risk Factor-HDL Lab Test",BQGLB1)
  1. . I SEX="F",RESULT<45 D
  1. .. S @BQGLB1@(DFN,"CRITERIA","Risk Factor-HDL Lab Test","V",VISIT,IEN)=DATE_U_EXDT_U_IEN_U_FREF
  1. .. D STOR(DFN,"Risk Factor-HDL Lab Test",BQGLB1)
  1. K @HDATA,@BQGLB1
  1. ;
  1. ;Evidence of High Cholesterol
  1. D DEF^BQITHCH(.TGLOB)
  1. ;
  1. ;Evidence of Nephropathy
  1. D DEF^BQITNPH(.TGLOB)
  1. ;
  1. K DATE,RESULT,SEX,DFN,TMFRAME,FREF,GREF,TREF,ENDT,VSDTM,TDFN
  1. K @HDATA,@BQGLB1,SDFN,BCLN,BP,BTYP,CT,PLFLG,RDT,BMI
  1. K AGE,SEX,RESULT,BDFN,BQREF,DATE2,DIA,N,NIT,SYS,TAX,TIEN,VISIT
  1. K TMPG
  1. Q
  1. ;
  1. PRB(PVIEN,TPGLOB) ;EP - Check Problem File for all active instances by date
  1. NEW IEN,PGREF,PFREF
  1. S IEN=0,PGREF="^AUPNPROB",PFREF=9000011
  1. F S IEN=$O(@PGREF@("B",PVIEN,IEN)) Q:'IEN D
  1. . S DFN=$$GET1^DIQ(PFREF,IEN,.02,"I") I DFN="" Q
  1. . I $G(@TPGLOB@(DFN))=1 Q
  1. . I $$GET1^DIQ(PFREF,PVIEN,.12,"I")'="A" Q
  1. . ; Check class - if Family ignore
  1. . I $$GET1^DIQ(PFREF,PVIEN,.04,"I")="F" Q
  1. . S VSDTM=$$PROB^BQIUL1(IEN)\1 Q:VSDTM=0
  1. . I $G(TMFRAME)'="",VSDTM<ENDT Q
  1. . I '$D(@BQGLB1@(DFN,VSDTM,PVIEN)) D
  1. .. S @BQGLB1@(DFN,VSDTM,PVIEN)=$G(@TGLOB@(DFN,VSDTM,PVIEN))+1
  1. .. S @BQGLB1@(DFN)=$G(@BQGLB1@(DFN))+1
  1. .. S @BQGLB1@(DFN,"CRITERIA",""_TAX,"P",IEN)=VSDTM
  1. Q
  1. ;
  1. PPRB(DFN,BQGLB) ;EP - Check Problem File for instance of a specific patient
  1. NEW PGREF,PFREF,PVIEN,VSDTM
  1. S PGREF="^AUPNPROB",PFREF=9000011
  1. S PVIEN=""
  1. F S PVIEN=$O(@PGREF@("AC",DFN,PVIEN),-1) Q:'PVIEN D
  1. . S TIEN=$$GET1^DIQ(PFREF,PVIEN,.01,"I") I TIEN="" Q
  1. . I '$D(@TREF@(TIEN)) Q
  1. . I $$GET1^DIQ(PFREF,PVIEN,.12,"I")'="A" Q
  1. . ; Check class - if Family ignore
  1. . I $$GET1^DIQ(PFREF,PVIEN,.04,"I")="F" Q
  1. . S VSDTM=$$PROB^BQIUL1(PVIEN)\1
  1. . I $G(TMFRAME)'="",VSDTM<ENDT Q
  1. . ;
  1. . I '$D(@BQGLB@(DFN,VSDTM,PVIEN)) D
  1. .. S @BQGLB@(DFN,VSDTM,PVIEN)=$G(@BQGLB@(DFN,VSDTM,PVIEN))+1
  1. .. S @BQGLB@(DFN,"CRITERIA",""_TAX,"P",PVIEN)=VSDTM
  1. .. S @BQGLB@(DFN)=$G(@BQGLB@(DFN))+1
  1. Q
  1. ;
  1. STOR(SDFN,CRIT,BQGLB) ; Store the patient's met criteria
  1. I $G(@TGLOB@(SDFN))'<2 Q
  1. I $D(@TGLOB@(SDFN,"CRITERIA",CRIT))>0 Q
  1. S @TGLOB@(SDFN)=$G(@TGLOB@(SDFN))+1
  1. ;S @TGLOB@(SDFN,"CRITERIA",CRIT)=""
  1. I $D(@BQGLB@(SDFN,"CRITERIA",CRIT)) M @TGLOB@(SDFN,"CRITERIA",CRIT)=@BQGLB@(SDFN,"CRITERIA",CRIT)
  1. Q
  1. ;
  1. HYP(DFN,GLOB,TMREF) ; EP - Process Hypertension Risk Factor
  1. ;
  1. ; At least three hypertension diagnoses with at least 90 days
  1. ; between first and last diagnosis
  1. ; Input
  1. ; DFN - patient whose hypertension diagnoses are being examined
  1. ; GLOB - Global where data is to be stored
  1. ; Structure:
  1. ; GLOB(DFN,"CRITERIA",criteria or taxonomy,visit or problem ien)=date/time
  1. ; TMREF - Global used to temporarily store diagnoses that may meet the
  1. ; IHD logic and, if so, will be stored in GLOB
  1. ;
  1. ; Variables
  1. ; NOK - If set to '1', no diagnoses remaining that will meet the date logic
  1. ; LDX - Most recent diagnosis that meets the IHD criteria
  1. ; LDX1 - Next recent diagnosis that meets the IHD criteria
  1. ; FDX - Third diagnosis that must be compared to LDX to determine if they
  1. ; meet the date logic
  1. ; VTYP - Visit type - either 'V' for visit or 'P' for problem
  1. N DXOK,NOK,LDX,LDX1,FDX,DX
  1. I $G(@TMREF@(DFN))<3 K @TMREF@(DFN) Q
  1. S DXOK=0,NOK=0
  1. F D Q:DXOK!NOK K @TMREF@(DFN,LDX)
  1. . S LDX=$O(@TMREF@(DFN,"A"),-1) I LDX="" S NOK=1 Q
  1. . S LDX1=$O(@TMREF@(DFN,LDX),-1) I LDX1="" S NOK=1 Q
  1. . ; Only one problem can be included
  1. . I $$TYP^BQITD031(DFN,LDX,TMREF)="P",$$TYP^BQITD031(DFN,LDX1,TMREF)="P" D I LDX1="" S NOK=1 Q
  1. .. F S LDX1=$O(@TMREF@(DFN,LDX1),-1) Q:LDX1="" I $$TYP^BQITD031(DFN,LDX1,TMREF)="V" Q
  1. . S FDX=LDX1
  1. . F S FDX=$O(@TMREF@(DFN,FDX),-1) Q:FDX="" D Q:DXOK
  1. .. I $$TYP^BQITD031(DFN,LDX,TMREF)="P"!($$TYP^BQITD031(DFN,LDX1,TMREF)="P"),$$TYP^BQITD031(DFN,FDX,TMREF)="P" Q
  1. .. I $$FMDIFF^XLFDT(LDX,FDX,1)>89 S DXOK=1 D Q
  1. ... ; Delete remaining entries from temporary file
  1. ... S DX=""
  1. ... F S DX=$O(@TMREF@(DFN,DX)) Q:DX="" I DX'=LDX,DX'=LDX1,DX'=FDX K @TMREF@(DFN,DX)
  1. I DXOK D
  1. .S @GLOB@(DFN)=$G(@GLOB@(DFN))+1
  1. .;S @GLOB@(DFN,"CRITERIA","Hypertension")=""
  1. . NEW IEN,FREF,EXDT,VSDT,TIEN,VISIT,VTYP,FREF
  1. . S VSDT="",EXDT=""
  1. . F S VSDT=$O(@TMREF@(DFN,VSDT)) Q:VSDT="" D
  1. .. S TIEN="" F S TIEN=$O(@TMREF@(DFN,VSDT,TIEN)) Q:TIEN="" D
  1. ... S VISIT=$P(@TMREF@(DFN,VSDT,TIEN),U,2),VTYP=$P(@TMREF@(DFN,VSDT,TIEN),U,1)
  1. ... S IEN=$P(@TMREF@(DFN,VSDT,TIEN),U,4),FREF=$P(@TMREF@(DFN,VSDT,TIEN),U,5)
  1. ... I VTYP="V" S @GLOB@(DFN,"CRITERIA",TAX,VTYP,VISIT,IEN)=VSDT_U_EXDT_U_IEN_U_FREF
  1. ... I VTYP="P" S @GLOB@(DFN,"CRITERIA",TAX,VTYP,VISIT)=VSDT_U_EXDT
  1. Q