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

BQIFLG.m

Go to the documentation of this file.
  1. BQIFLG ;PRXM/HC/ALA-Get flags for all patients in panels ; 13 Dec 2005 9:28 PM
  1. ;;2.4;ICARE MANAGEMENT SYSTEM;**2**;Apr 01, 2015;Build 10
  1. ;
  1. Q
  1. ;
  1. FND ;EP - Find all flags for a patient
  1. ;
  1. ;Description
  1. ; This program should be run nightly to determine all the flags that any patient
  1. ; found in the BQICARE file has
  1. ;Parameters
  1. ; PPIEN = Definition internal entry number
  1. ; EXEC = Executable code
  1. ; PORD = Flag order
  1. ;
  1. ; Purge flags older than 7 months
  1. NEW DFN,FLG,DTM,PRGDT,REC
  1. S DFN=0,PRGDT=$$DATE^BQIUL1("T-7M")
  1. F S DFN=$O(^BQIPAT(DFN)) Q:'DFN D
  1. . S FLG=0
  1. . F S FLG=$O(^BQIPAT(DFN,10,FLG)) Q:'FLG D
  1. .. S DTM=""
  1. .. F S DTM=$O(^BQIPAT(DFN,10,FLG,5,"AC",DTM)) Q:DTM="" D
  1. ... S REC=""
  1. ... F S REC=$O(^BQIPAT(DFN,10,FLG,5,"AC",DTM,REC)) Q:REC="" D
  1. .... NEW DA,DIK
  1. .... S DA(2)=DFN,DA(1)=FLG,DA=REC
  1. .... S DIK="^BQIPAT("_DA(2)_",10,"_DA(1)_",5," D ^DIK
  1. ;
  1. S PORD=""
  1. F S PORD=$O(^BQI(90506,"AC",PORD)) Q:PORD="" D
  1. . S PPIEN=0
  1. . F S PPIEN=$O(^BQI(90506,"AC",PORD,PPIEN)) Q:'PPIEN D
  1. .. ; if the definition is inactive, quit
  1. .. ;Q:$$GET1^DIQ(90506,PPIEN_",",.02,"I")=1
  1. .. I $P($G(^BQI(90506,PPIEN,0)),"^",2)=1 Q
  1. .. ; if the definition is not a flag definition, quit
  1. .. ;Q:$$GET1^DIQ(90506,PPIEN_",",.04,"I")'="A"
  1. .. I $P($G(^BQI(90506,PPIEN,0)),"^",4)'="A" Q
  1. .. S EXEC=$$GET1^DIQ(90506,PPIEN_",",2,"E")
  1. .. S EXEC=$G(^BQI(90506,PPIEN,2)) I EXEC="" Q
  1. .. ;Q:EXEC=""
  1. .. ; define time frame for the largest valid range
  1. .. ;S PARMS("TMFRAME")="T-6M"
  1. .. S PARMS("TMFRAME")="T-2M"
  1. .. X EXEC
  1. .. Q:'$D(@GLREF)
  1. .. NEW DFN,VIEN
  1. .. S DFN=""
  1. .. F S DFN=$O(@GLREF@(DFN)) Q:DFN="" D
  1. ... ; if the patient is not in the ICARE PATIENT INDEX file, add them
  1. ... I $G(^BQIPAT(DFN,0))="" D
  1. .... NEW DIC,X,DINUM,DLAYGO
  1. .... S (X,DINUM)=DFN,DLAYGO=90507.5,DIC="^BQIPAT(",DIC(0)="L",DIC("P")=DLAYGO
  1. .... K DO,DD D FILE^DICN
  1. ... ; add the flag definition for the patient
  1. ... NEW DIC,X,DINUM,DLAYGO,DA
  1. ... S (X,DINUM)=PPIEN,DLAYGO=90507.51,DA(1)=DFN
  1. ... I '$D(^BQIPAT(DA(1),10,0)) S ^BQIPAT(DA(1),10,0)="^90507.51P^^"
  1. ... S DIC="^BQIPAT("_DA(1)_",10,",DIC(0)="L"
  1. ... K DO,DD D FILE^DICN
  1. ... ; for each record, if it isn't already in the file, add it as a flag record
  1. ... S RCIEN=""
  1. ... F S RCIEN=$O(@GLREF@(DFN,RCIEN)) Q:RCIEN="" D
  1. .... NEW DIC,DA,IENS,NFLG
  1. .... S DA(2)=DFN,DA(1)=PPIEN,X=RCIEN,NFLG=0
  1. .... I '$D(^BQIPAT(DA(2),10,DA(1),5,0)) S ^BQIPAT(DA(2),10,DA(1),5,0)="^90507.515^^"
  1. .... S DIC="^BQIPAT("_DA(2)_",10,"_DA(1)_",5,",DIC(0)="LXZ"
  1. .... D ^DIC
  1. .... S (DA,RIEN)=+Y S:$P(Y,U,3)=1 NFLG=1
  1. .... S IENS=$$IENS^DILF(.DA)
  1. .... ; set the date of the visit
  1. .... S BQIUPD(90507.515,IENS,.02)=$P(@GLREF@(DFN,RCIEN),U,2)
  1. .... S BQIUPD(90507.515,IENS,.04)=$P(@GLREF@(DFN,RCIEN),U,1)
  1. .... I NFLG S BQIUPD(90507.515,IENS,.03)=$$NOW^XLFDT()
  1. .... D FILE^DIE("","BQIUPD","ERROR")
  1. .... K BQIUPD
  1. .... ;
  1. .... NEW DIC,DA,DLAYGO,X,DINUM
  1. .... S DA(3)=DFN,DA(2)=PPIEN,DA(1)=RIEN
  1. .... I '$D(^BQIPAT(DA(3),10,DA(2),5,DA(1),1,0)) S ^BQIPAT(DA(3),10,DA(2),5,DA(1),1,0)="^90507.5151P^^"
  1. .... ; for each user that has this patient in a panel, add a user record so
  1. .... ; that each user's action/status for this patient and flag can be recorded
  1. .... S USR=""
  1. .... F S USR=$O(^BQICARE("AB",DFN,USR)) Q:USR="" D
  1. ..... S (X,DINUM)=USR,DIC="^BQIPAT("_DA(3)_",10,"_DA(2)_",5,"_DA(1)_",1,"
  1. ..... S DIC(0)="L",DLAYGO=90507.5151,DIC("P")=DLAYGO
  1. ..... K DO,DD D FILE^DICN
  1. ..... S UIEN=+Y Q:UIEN<1
  1. ..... D FND^BQIFLFLG(USR,DFN)
  1. ..... ;
  1. ..... ; Make sure that Shared users can see the flags as well
  1. ..... S SHRU=""
  1. ..... F S SHRU=$O(^BQICARE("C",SHRU)) Q:SHRU="" D
  1. ...... I '$D(^BQICARE("C",SHRU,USR)) Q
  1. ...... S PLIEN=""
  1. ...... F S PLIEN=$O(^BQICARE("C",SHRU,USR,PLIEN)) Q:PLIEN="" D
  1. ....... I '$D(^BQICARE(USR,1,PLIEN,40,"B",DFN)) Q
  1. ....... I $P(^BQICARE(USR,1,PLIEN,40,DFN,0),U,2)="R" Q
  1. ....... D UPU^BQIFLAG(DFN,SHRU)
  1. .. K @GLREF
  1. ;
  1. S USR=0
  1. F S USR=$O(^BQICARE(USR)) Q:'USR D
  1. . S PLIEN=0
  1. . F S PLIEN=$O(^BQICARE(USR,1,PLIEN)) Q:'PLIEN D CNTP(USR,PLIEN)
  1. ;
  1. K Y,X,USR,UIEN,TMFRAME,SSN,SEX,RIEN,PPIEN,PARMS,DOB,DA,AUPNSEX,AUPNPAT
  1. K AUPNDOD,AUPNDOB,AUPNDAYS,AGE,ABNFL,OWNR,PLIEN,RCIEN,EXEC,GLREF,PORD
  1. K SHRU
  1. Q
  1. ;
  1. CNTP(OWNR,PLIEN) ;EP - Count patients' flags and file the result for panel
  1. ;
  1. ;Input
  1. ; OWNR - Owner of the panel
  1. ; PLIEN - Panel internal entry number
  1. ;
  1. NEW DA,PIENS,DFN,DFN,IENS,CNT,BQIUP
  1. S DA(1)=OWNR,DA=PLIEN,PIENS=$$IENS^DILF(.DA)
  1. S DFN=0,CNT=0
  1. F S DFN=$O(^BQICARE(OWNR,1,PLIEN,40,DFN)) Q:'DFN D Q:CNT
  1. . ;S DA(2)=OWNR,DA(1)=PLIEN,DA=DFN,IENS=$$IENS^DILF(.DA)
  1. . ;I $$GET1^DIQ(90505.04,IENS,.02,"I")="R" Q
  1. . I $P($G(^BQICARE(OWNR,1,PLIEN,40,DFN,0)),"^",2)="R" Q
  1. . ;S CNT=CNT+$$GET1^DIQ(90505.04,IENS,.08,"I")
  1. . S CNT=CNT+$P($G(^BQICARE(OWNR,1,PLIEN,40,DFN,0)),"^",8)
  1. ;
  1. I CNT>0 S BQIUP(90505.01,PIENS,.12)="Y"
  1. I CNT=0 S BQIUP(90505.01,PIENS,.12)="N"
  1. D FILE^DIE("I","BQIUP")
  1. Q