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

BQICAEXP.m

Go to the documentation of this file.
  1. BQICAEXP ;VNGT/HS/ALA-Community Alerts Export ; 01 Sep 2010 8:35 PM
  1. ;;2.6;ICARE MANAGEMENT SYSTEM;;Jul 07, 2017;Build 72
  1. ;
  1. ;
  1. EN ; Entry Point
  1. NEW DIC,DLAYGO,X,DA,IENS,DATA,CMN,ALTYP,ALERT,CTN,CAT,DX,DFN,GRN,GRP,DIAG,DXN,LOC
  1. NEW ASUFAC,ASUN,ASUNM,CT,DATE,DELIM,EXIEN,HDR,IEN,IN,N,VISIT,XBFLG,XBPAFN,XBS1,ZISHFL
  1. NEW RECORD,VDATE,XBE,XBF,ZTQUEUED,FRM,VFILE,DTLMD,SUFLG,BQIUPD,ERROR,ZISHC,ZISHDA1
  1. NEW LB,LAB,LCP,LOINC,RESULT,RIEN,SITE,FLNM
  1. S FLNM=$S('$$PROD^XUPROD():"CANEZ",1:"CANES")
  1. ;
  1. S ZTQUEUED=1
  1. ; Send suicide data flag
  1. S SUFLG=+$P(^BQI(90508,1,0),U,3)
  1. I +$P(^BQI(90508,1,0),U,5)=1 Q
  1. ; Create entry in file to log output
  1. S DIC(0)="L",DLAYGO=90507.7,DIC="^BQI(90507.7,",X=DT
  1. K DO,DD D FILE^DICN
  1. S EXIEN=+Y
  1. ; Go through already calculated Community alerts
  1. S CMN=0
  1. F S CMN=$O(^BQI(90507.6,CMN)) Q:'CMN D
  1. . S ALTYP=0
  1. . F S ALTYP=$O(^BQI(90507.6,CMN,1,ALTYP)) Q:'ALTYP D
  1. .. S ALERT=$P(^BQI(90507.6,CMN,1,ALTYP,0),U,1)
  1. .. ; if suicide alerts and export flag is not turned on, quit
  1. .. I ALERT="Suicidal Behavior",'SUFLG Q
  1. .. S CTN=0
  1. .. F S CTN=$O(^BQI(90507.6,CMN,1,ALTYP,1,CTN)) Q:'CTN D
  1. ... S CAT=$P(^BQI(90507.6,CMN,1,ALTYP,1,CTN,0),U,1)
  1. ... S DX=0
  1. ... F S DX=$O(^BQI(90507.6,CMN,1,ALTYP,1,CTN,1,DX)) Q:'DX D
  1. .... S DATA=^BQI(90507.6,CMN,1,ALTYP,1,CTN,1,DX,0)
  1. .... S DFN=$P(DATA,U,4),RIEN=$P(DATA,U,3),DATE=$P(DATA,U,2),DXN=$P(DATA,U,1),VISIT=$P(DATA,U,6)
  1. .... S VFILE=$P(DATA,U,5)
  1. .... I $D(^BQI(90507.7,"AC",DFN,CAT,RIEN,DATE)) Q
  1. .... I $G(^DPT(DFN,0))="" Q
  1. .... I VFILE=9000010,$G(^AUPNVSIT(VISIT,0))="" Q
  1. .... S GRN=$O(^BQI(90507.8,"B",$E(CAT,1,30),""))
  1. .... S GRP="O" I GRN'="" S GRP=$P(^BQI(90507.8,GRN,0),U,3)
  1. .... ; If flag to not export is set for this alert definition, quit
  1. .... I GRN'="",$P($G(^BQI(90507.8,GRN,2)),U,3)=1 Q
  1. .... S DA(1)=EXIEN,DIC="^BQI(90507.7,"_DA(1)_",10,",DLAYGO=90507.701,X=DFN
  1. .... K DO,DD D FILE^DICN
  1. .... S DA=+Y,IENS=$$IENS^DILF(.DA)
  1. .... S BQIUPD(90507.701,IENS,.02)=VISIT,BQIUPD(90507.701,IENS,.03)=ALERT
  1. .... S BQIUPD(90507.701,IENS,.05)=GRP,BQIUPD(90507.701,IENS,.06)=DXN
  1. .... S BQIUPD(90507.701,IENS,.07)=CAT,BQIUPD(90507.701,IENS,.08)=DATE
  1. .... S BQIUPD(90507.701,IENS,.09)=VFILE,BQIUPD(90507.701,IENS,.1)=RIEN
  1. .... D FILE^DIE("","BQIUPD","ERROR")
  1. ... S LB=0
  1. ... F S LB=$O(^BQI(90507.6,CMN,1,ALTYP,1,CTN,2,LB)) Q:'LB D
  1. .... S DATA=^BQI(90507.6,CMN,1,ALTYP,1,CTN,2,LB,0)
  1. .... S DFN=$P(DATA,U,4),VISIT=$P(DATA,U,3),DATE=$P(DATA,U,2),LAB=$P(DATA,U,1)
  1. .... S VFILE=$P(DATA,U,5),RIEN=$P(DATA,U,6)
  1. .... I $D(^BQI(90507.7,"AC",DFN,CAT,RIEN,DATE)) Q
  1. .... S GRN=$O(^BQI(90507.8,"B",$E(CAT,1,30),""))
  1. .... S GRP="O" I GRN'="" S GRP=$P(^BQI(90507.8,GRN,0),U,3)
  1. .... ; If flag to not export is set for this alert definition, quit
  1. .... I GRN'="",$P($G(^BQI(90507.8,GRN,2)),U,3)=1 Q
  1. .... S DA(1)=EXIEN,DIC="^BQI(90507.7,"_DA(1)_",10,",DLAYGO=90507.701,X=DFN
  1. .... K DO,DD D FILE^DICN
  1. .... S DA=+Y,IENS=$$IENS^DILF(.DA)
  1. .... S BQIUPD(90507.701,IENS,.02)=VISIT,BQIUPD(90507.701,IENS,.03)=ALERT
  1. .... S BQIUPD(90507.701,IENS,.05)=GRP,BQIUPD(90507.701,IENS,.11)=LAB
  1. .... S BQIUPD(90507.701,IENS,.07)=CAT,BQIUPD(90507.701,IENS,.08)=DATE
  1. .... S BQIUPD(90507.701,IENS,.09)=VFILE,BQIUPD(90507.701,IENS,.1)=RIEN
  1. .... D FILE^DIE("","BQIUPD","ERROR")
  1. ;
  1. S ASUN=$P(^AUTTSITE(1,0),U),ASUFAC=$P($G(^AUTTLOC(ASUN,0)),U,10),ASUNM=$P(^DIC(4,ASUN,0),U)
  1. S CT=0,N=0,DELIM=","
  1. F S N=$O(^BQI(90507.7,EXIEN,10,N)) Q:'N S CT=CT+1
  1. S BQIUPD(90507.7,EXIEN_",",.04)=CT
  1. D FILE^DIE("","BQIUPD","ERROR")
  1. ;
  1. K ^BQIDATA($J)
  1. ; Get export format type 'D' is delimited and 'H' or blank is HL7
  1. S FRM=$P($G(^BQI(90508,1,0)),U,2)
  1. S IN=$S(FRM="D":1,1:0)
  1. I FRM="D" S HDR=$$JDATE(DT)_DELIM_CT_DELIM_ASUNM,^BQIDATA($J,IN)=HDR
  1. S IEN=0
  1. F S IEN=$O(^BQI(90507.7,EXIEN,10,IEN)) Q:'IEN D
  1. . S DATA=^BQI(90507.7,EXIEN,10,IEN,0)
  1. . S DFN=$P(DATA,U,1),VISIT=$P(DATA,U,2),ALERT=$P(DATA,U,3),DIAG=$P(DATA,U,7),GRP=$P(DATA,U,5)
  1. . S DXN=$P(DATA,U,6),VDATE=$P(DATA,U,8),VFILE=$P(DATA,U,9)
  1. . S LOC=$P($G(^AUPNVSIT(VISIT,0)),U,6)
  1. . S DIAG=$$STRIP^XLFSTR(DIAG,",")
  1. . ; Unique Identifier
  1. . S RECORD=$$UID(DFN)
  1. . ; HRN
  1. . S $P(RECORD,DELIM,2)=$S($$HRN^AUPNPAT(DFN,LOC)]"":$$HRN^AUPNPAT(DFN,LOC),1:$$HRN^AUPNPAT(DFN,DUZ(2)))
  1. . ; Gender
  1. . S $P(RECORD,DELIM,3)=$P(^DPT(DFN,0),U,2)
  1. . ; DOB
  1. . S $P(RECORD,DELIM,4)=$S(FRM="D":$$JDATE($P($G(^DPT(DFN,0)),U,3)),1:$$FMTHL7^XLFDT($P($G(^DPT(DFN,0)),U,3)))
  1. . ; Age
  1. . S $P(RECORD,DELIM,5)=$P($$AGE^BQIAGE(DFN,"",1)," ",1)
  1. . ; Age Units
  1. . S $P(RECORD,DELIM,6)=$P($$AGE^BQIAGE(DFN,"",1)," ",2)
  1. . ; Patient Street Address
  1. . S $P(RECORD,DELIM,7)=$$GET1^DIQ(2,DFN_",",.111,"E")
  1. . ; Patient Address City
  1. . S $P(RECORD,DELIM,8)=$$GET1^DIQ(2,DFN_",",.114,"E")
  1. . ; Patient Address State
  1. . NEW ST
  1. . S ST=$$GET1^DIQ(2,DFN_",",.115,"I")
  1. . S $P(RECORD,DELIM,9)=$$PTR^BQIUL2(2,.115,ST,1)
  1. . ; Patient Address Zip
  1. . S $P(RECORD,DELIM,10)=$S($$GET1^DIQ(2,DFN_",",.1112,"E")'="":$$GET1^DIQ(2,DFN_",",.1112,"E"),1:$$GET1^DIQ(2,DFN_",",.116,"E"))
  1. . ; Patient County
  1. . S $P(RECORD,DELIM,11)=$$COUN^BQIULPT(DFN)
  1. . ; Current community of residence
  1. . S $P(RECORD,DELIM,12)=$$COMMRES^AUPNPAT(DFN,"C")
  1. . ; Race
  1. . NEW RACE,RCN
  1. . S RACE=$$RCE^BQIPTDMG(DFN,.01),RCN=$P(RACE,$C(28),1)
  1. . I RCN'="" S $P(RECORD,DELIM,13)=$P(^DIC(10,RCN,0),U,3)
  1. . ; Ethnicity
  1. . NEW ETHN,ETN
  1. . S ETHN=$$ETHN^BQIPTDMG(DFN,.01),ETN=$P(ETHN,$C(28),1)
  1. . I ETN'="" S $P(RECORD,DELIM,14)=$P(^DIC(10.2,ETN,0),U,2)
  1. . ; ASUFAC of encounter location
  1. . S $P(RECORD,DELIM,15)=$S(LOC'="":$P($G(^AUTTLOC(LOC,0)),U,10),1:"")
  1. . ; Visit Date
  1. . S $P(RECORD,DELIM,16)=$S(FRM="D":$$JDATE(VDATE),1:$$FMTHL7^XLFDT(VDATE))
  1. . ; Visit ID
  1. . S $P(RECORD,DELIM,17)=$S($P($G(^AUPNVSIT(VISIT,11)),U,14)]"":$P($G(^AUPNVSIT(VISIT,11)),U,14),1:$$UIDV^AUPNVSIT(VISIT))
  1. . ; Dxn ICD9 code
  1. . S $P(RECORD,DELIM,18)=DXN
  1. . ; CDC diagnosis narrative
  1. . S $P(RECORD,DELIM,19)=DIAG
  1. . ; Type of alert
  1. . S $P(RECORD,DELIM,20)=ALERT
  1. . ; Group
  1. . S $P(RECORD,DELIM,21)=GRP
  1. . ; Visit last modified
  1. . ;S DTLMD=$S(VFILE'=9000010:$P($G(^AMHREC(VISIT,11)),U,14),1:$P($G(^AUPNVSIT(VISIT,0)),U,13))
  1. . S DTLMD=$S(VFILE'[9000010:$P($G(^AMHREC(VISIT,11)),U,14),1:$P($G(^AUPNVSIT(VISIT,0)),U,13))
  1. . S $P(RECORD,DELIM,22)=$S(FRM="D":$$JDATE(DTLMD),1:$$FMTHL7^XLFDT(DTLMD))
  1. . ; Set up Lab test result for OBX
  1. . I VFILE=9000010.09 D
  1. .. S LAB=$P(DATA,U,11),RIEN=$P(DATA,U,10)
  1. .. S SITE=$P($G(^AUPNVLAB(RIEN,11)),U,3),UNITS=$P($G(^AUPNVLAB(RIEN,11)),U,1)
  1. .. S RLOW=$P($G(^AUPNVLAB(RIEN,11)),U,4),RHIGH=$P($G(^AUPNVLAB(RIEN,11)),U,5)
  1. .. S RESULT=$P($G(^AUPNVLAB(RIEN,0)),U,4)
  1. .. S ABN=$P($G(^AUPNVLAB(RIEN,0)),U,5)
  1. .. I SITE="" D Q
  1. ... S $P(RECORD,DELIM,25)=LAB_"^"_$P(^LAB(60,LAB,0),U,1)_"^99"_$P(^AUTTLOC(ASUN,0),U,7)_"="_RESULT
  1. ... S $P(RECORD,DELIM,31)=UNITS,$P(RECORD,DELIM,32)=RLOW_"^"_RHIGH,$P(RECORD,DELIM,33)=ABN
  1. .. I SITE'="" D
  1. ... S LCP=$P($G(^LAB(60,LAB,1,SITE,95.3)),U,1)
  1. ... I LCP="" D Q
  1. .... S $P(RECORD,DELIM,25)=LAB_"^"_$P(^LAB(60,LAB,0),U,1)_"^99"_$P(^AUTTLOC(ASUN,0),U,7)_"="_RESULT
  1. .... S $P(RECORD,DELIM,31)=UNITS,$P(RECORD,DELIM,32)=RLOW_"^"_RHIGH,$P(RECORD,DELIM,33)=ABN
  1. ... S LOINC=LCP_"-"_$P(^LAB(95.3,LCP,0),U,15)
  1. ... S $P(RECORD,DELIM,25)=LOINC_"^"_$P(^LAB(60,LAB,0),U,1)_"^LN="_RESULT_"^^"_$P($G(^LAB(95.3,LCP,80)),U,1)
  1. ... S $P(RECORD,DELIM,31)=UNITS,$P(RECORD,DELIM,32)=RLOW_"^"_RHIGH,$P(RECORD,DELIM,33)=ABN
  1. ... ; for NTE
  1. ... S $P(RECORD,DELIM,30)=VFILE_":"_RIEN
  1. . I VFILE=9000010.25 D
  1. .. S LAB=$P(DATA,U,11),RIEN=$P(DATA,U,10)
  1. .. S SITE=$P($G(^AUPNVMIC(RIEN,11)),U,3),UNITS=$P($G(^AUPNVMIC(RIEN,11)),U,1)
  1. .. S RLOW=$P($G(^AUPNVMIC(RIEN,11)),U,4),RHIGH=$P($G(^AUPNVMIC(RIEN,11)),U,5)
  1. .. S RESULT=$P(^AUPNVMIC(RIEN,0),U,7),ABN=""
  1. .. I SITE="" D Q
  1. ... S $P(RECORD,DELIM,25)=LAB_"^"_$P(^LAB(60,LAB,0),U,1)_"^99"_$P(^AUTTLOC(ASUN,0),U,7)_"="_RESULT
  1. ... S $P(RECORD,DELIM,31)=UNITS,$P(RECORD,DELIM,32)=RLOW_"^"_RHIGH,$P(RECORD,DELIM,33)=ABN
  1. .. I SITE'="" D
  1. ... S LCP=$P($G(^LAB(60,LAB,1,SITE,95.3)),U,1)
  1. ... I LCP="" D Q
  1. .... S $P(RECORD,DELIM,25)=LAB_"^"_$P(^LAB(60,LAB,0),U,1)_"^99"_$P(^AUTTLOC(ASUN,0),U,7)_"="_RESULT
  1. .... S $P(RECORD,DELIM,31)=UNITS,$P(RECORD,DELIM,32)=RLOW_"^"_RHIGH,$P(RECORD,DELIM,33)=ABN
  1. ... S LOINC=LCP_"-"_$P(^LAB(95.3,LCP,0),U,15)
  1. ... S $P(RECORD,DELIM,25)=LOINC_"^"_$P(^LAB(60,LAB,0),U,1)_"^LN="_RESULT_"^^"_$P($G(^LAB(95.3,LCP,80)),U,1)
  1. ... S $P(RECORD,DELIM,31)=UNITS,$P(RECORD,DELIM,32)=RLOW_"^"_RHIGH,$P(RECORD,DELIM,33)=ABN
  1. ... ; for NTE
  1. ... S $P(RECORD,DELIM,30)=VFILE_":"_RIEN
  1. . ; Highest Temperature for OBX
  1. . ;I VDATE'="",VFILE=9000010 D
  1. . I VDATE'="" D
  1. .. NEW TMN,RVDT,IEN,ZZ,RESULT
  1. .. S TMN=$O(^AUTTMSR("B","TMP","")) I TMN="" Q
  1. .. S RVDT=9999999-VDATE
  1. .. S IEN=""
  1. .. F S IEN=$O(^AUPNVMSR("AA",DFN,TMN,RVDT,IEN)) Q:IEN="" D
  1. ... S RESULT=$P($G(^AUPNVMSR(IEN,0)),"^",4) I RESULT="" Q
  1. ... I $P($G(^AUPNVMSR(IEN,2)),"^",1)=1 Q
  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,IEN_",",2,"I")=1
  1. ... S ZZ(RESULT)=""
  1. .. S $P(RECORD,DELIM,23)=$O(ZZ(""),-1)
  1. . ; Vitals for OBX
  1. . ;I VFILE=9000010 D
  1. . I VFILE[9000010 D
  1. .. NEW VITALS,BMI,IEN,TYP,RESULT,MEAS,XX,UID
  1. .. S VITALS="",UID=$J
  1. .. S BMI=$P($$PBMI^APCLV(DFN,DT),"^",1)
  1. .. I BMI'="" S VITALS=VITALS_"BMI="_BMI_";"
  1. .. S IEN=""
  1. .. F S IEN=$O(^AUPNVMSR("AD",VISIT,IEN)) Q:IEN="" D
  1. ... S TYP=$P($G(^AUPNVMSR(IEN,0)),"^",1) I TYP="" Q
  1. ... S MEAS=$P(^AUTTMSR(TYP,0),"^",1),RESULT=$P(^AUPNVMSR(IEN,0),"^",4)
  1. ... S XX="BP,RS,PU,WT,HT"
  1. ... I '$F(XX,MEAS) Q
  1. ... S VITALS=VITALS_MEAS_"="_RESULT_";"
  1. .. S $P(RECORD,DELIM,24)=$$TKO^BQIUL1(VITALS,";")
  1. . ;
  1. . S IN=IN+1,^BQIDATA($J,IN)=RECORD,LIN=IN
  1. ; Get all labs
  1. S TMFRAME="T-30"
  1. D LAB^BQICAVAL
  1. D PROC^BQICAVAL
  1. ;
  1. ; If HL7
  1. I FRM'="D" D ^BQICAHLO
  1. D WRITE
  1. Q
  1. ;
  1. UID(BQIDFN) ;EP - Given DFN return unique patient record id.
  1. I $G(BQIDFN)="" Q ""
  1. I $G(^AUPNPAT(BQIDFN,0))="" Q ""
  1. I $G(^DPT(BQIDFN,0))="" Q ""
  1. Q $$GET1^DIQ(9999999.06,$P(^AUTTSITE(1,0),U),.32)_$E("0000000000",1,10-$L(BQIDFN))_BQIDFN
  1. ;
  1. JDATE(DATE) ;EP - Format the date
  1. I $G(DATE)="" Q ""
  1. NEW A
  1. S A=$$FMTE^XLFDT(DATE)
  1. Q $E(DATE,6,7)_$$UP^XLFSTR($P(A," ",1))_(1700+$E(DATE,1,3))
  1. ;
  1. DATE(D) ;
  1. Q (1700+$E(D,1,3))_$E(D,4,5)_$E(D,6,7)
  1. ;
  1. ;send file
  1. WRITE ; use XBGSAVE to save the temp global (BQIDATA) to a file that is exported
  1. ;
  1. NEW XBGL,XBQ,XBQTO,XBNAR,XBMED,XBFLT,XBUF,XBFN
  1. S XBMED="F",XBQ="N",XBFLT=1,XBF=$J,XBE=$J
  1. S XBGL=$S(FRM="D":"BQIDATA",1:"BQIHL7")
  1. S XBNAR="CANE SURVEILLANCE EXPORT"
  1. S ASUFAC=$P($G(^AUTTLOC($P(^AUTTSITE(1,0),U),0)),U,10) ;asufac for file name
  1. S XBFN=FLNM_"_"_ASUFAC_"_"_$$DATE(DT)_".txt"
  1. ;S XBFN=$S(FRM="D":"CANES_"_ASUFAC_"_"_$$DATE(DT)_".txt",1:"CANES_"_ASUFAC_"HL7"_"_"_$$DATE(DT)_".txt")
  1. S XBS1="CANE SURVEILLANCE SEND"
  1. S XBUF=$P($G(^AUTTSITE(1,1)),"^",2)
  1. I XBUF="" S XBUF=$P($G(^XTV(8989.3,1,"DEV")),"^",1)
  1. ;
  1. D ^XBGSAVE
  1. ;
  1. I XBFLG'=0 D
  1. . I XBFLG(1)="" S BQIUPD(90507.7,EXIEN_",",.03)=1
  1. . I XBFLG(1)'="" S BQIUPD(90507.7,EXIEN_",",.03)=0
  1. . D FILE^DIE("I","BQIUPD","ERROR")
  1. . Q
  1. K ^BQIDATA($J),^BQIHL7($J)
  1. Q