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

APCSSILI.m

Go to the documentation of this file.
  1. APCSSILI ; IHS/CMI/LAB - ILI surveillance export ;
  1. ;;2.0;IHS PCC SUITE;**5**;MAY 14, 2009
  1. ;
  1. ;
  1. START ;
  1. ;This option will create an HL7 output file of all visits for the past 90 days.
  1. ;
  1. ;
  1. D EXIT
  1. ;
  1. INFORM ;inform user
  1. W:$D(IOF) @IOF
  1. W !!,$$CJ^XLFSTR("SURVEILLANCE ILI HL7 EXPORT",80)
  1. W !!,"This option is used to create a file of HL7 messages. The messages will"
  1. W !,"be sent to the IHS EPI program. Visits in the past 90 days that meet"
  1. W !,"the criteria defined by the EPI program for the ILI export will be sent."
  1. W !,"The data elements contained in the HL7 messages have been defined by the"
  1. W !,"EPI program. Documentation of the message definitions can be"
  1. W !,"obtained from the EPI program.",!!
  1. W !,"This HL7 export file will be automatically ftp'ed to the EPI program.",!!
  1. DATES ;set date range to T-91 to T-1
  1. ;
  1. S APCSBD=$$FMADD^XLFDT(DT,-91),APCSED=$$FMADD^XLFDT(DT,-1)
  1. W !!,"The date range for this export is: ",$$FMTE^XLFDT(APCSBD)," to ",$$FMTE^XLFDT(APCSED),".",!
  1. CONTINUE ;
  1. S DIR(0)="Y",DIR("A")="Do you wish to continue and generate this export file",DIR("B")="N" KILL DA D ^DIR KILL DIR
  1. I 'Y D EXIT Q
  1. ZIS ;called xbdbque to see if they want to queue or not
  1. S XBRC="PROC^APCSSILI",XBRP="",XBNS="APCS",XBRX="EXIT^APCSSILI"
  1. D ^XBDBQUE
  1. D EXIT
  1. Q
  1. PROC ;EP - called from xbdbque
  1. K APCSLOCT
  1. K ^APCSDATA($J) ;export global
  1. S APCSCTAX=$O(^ATXAX("B","SURVEILLANCE ILI CLINICS",0)) ;clinic taxonomy
  1. S APCSDTAX=$O(^ATXAX("B","SURVEILLANCE ILI",0)) ;dx taxonomy
  1. I 'APCSCTAX D EXIT Q
  1. I 'APCSDTAX D EXIT Q
  1. ;
  1. S APCSSD=$$FMADD^XLFDT(DT,-91)_".9999" ;start with 3/21/09 visits CHANGED TO 90 DAYS IN PATCH 26, AFTER THE FIRST PATCH 26 EXPORT
  1. S APCSED=$$FMADD^XLFDT(DT,-1)
  1. S APCSVTOT=0 ;visit counter
  1. F S APCSSD=$O(^AUPNVSIT("B",APCSSD)) Q:APCSSD'=+APCSSD!($P(APCSSD,".")>APCSED) D
  1. .S APCSV=0 F S APCSV=$O(^AUPNVSIT("B",APCSSD,APCSV)) Q:APCSV'=+APCSV D
  1. ..Q:'$D(^AUPNVSIT(APCSV,0)) ;no zero node
  1. ..Q:$P(^AUPNVSIT(APCSV,0),U,11) ;deleted visit
  1. ..S DFN=$P(^AUPNVSIT(APCSV,0),U,5)
  1. ..Q:DFN=""
  1. ..Q:'$D(^DPT(DFN,0))
  1. ..Q:$P(^DPT(DFN,0),U)["DEMO,PATIENT"
  1. ..Q:$$DEMO^APCLUTL(DFN)
  1. ..S G=0,X=0 F S X=$O(^BGPSITE(X)) Q:X'=+X I $P($G(^BGPSITE(X,0)),U,12) I $D(^DIBT($P(^BGPSITE(X,0),U,12),1,DFN)) S G=1
  1. ..Q:G
  1. ..S APCSKV=0,APCSH1N1=0,(APCSILI,APCSHVAC,APCSIVAC,APCSADVE,APCSSRD,APCSAVM,APCSAV9)=""
  1. ..S APCSLOC=$P(^AUPNVSIT(APCSV,0),U,6) Q:APCSLOC="" ;no location ???
  1. ..S APCSDATE=$P($P(^AUPNVSIT(APCSV,0),U),".")
  1. ..S APCSASUF=$P($G(^AUTTLOC(APCSLOC,0)),U,10)
  1. ..I APCSASUF="" Q ;no ASUFAC????
  1. ..;keep visit?
  1. ..S G=0 D ILIDX I G S APCSKV=1,APCSILI=G
  1. ..S G=0 D H1N1DX I G S APCSKV=1,APCSH1N1=G
  1. ..;S APCSHVAC=$$HASVAC(APCSV) I APCSHVAC S APCSKV=1
  1. ..S APCSIVAC=$$HASIVAC^APCLSILI(APCSV) I APCSIVAC S APCSKV=1
  1. ..S APCSADVE=$$HASADVN6^APCLSIL1(APCSV) I APCSADVE S APCSKV=1
  1. ..S APCSOVAC="" I APCSADVE S APCSOVAC=$$OTHVAC^APCLSIL1(DFN,APCSDATE)
  1. ..S APCSSRD=$$HASSRD7(APCSV) I APCSSRD S APCSKV=1
  1. ..S APCSAVM=$$HASAVM(APCSV) I APCSAVM S APCSKV=1
  1. ..;S APCSAV9=$$HASAV9(APCSV) I APCSAV9 S APCSKV=1
  1. ..I 'APCSKV Q ;not a visit to export
  1. ..W:'$D(ZTQUEUED) "."
  1. ..D SETREC^APCSSIL2 ;set record
  1. ;NOW SET TOTAL IN PIECE 13
  1. S X=0 F S X=$O(^APCSDATA($J,X)) Q:X'=+X D
  1. .I $P(^APCSDATA($J,X),",",8)="" Q ;not an ILI visit
  1. .Q:$P(^APCSDATA($J,X),",",15)="H" ;not ambulatory
  1. .S L=$P(^APCSDATA($J,X),",",6),D=$P(^APCSDATA($J,X),",",7)
  1. .S $P(^APCSDATA($J,X),",",13)=$G(APCSLOCT(L,D))
  1. .Q
  1. ;NOW SET TOTAL IN PIECE 20
  1. S X=0 F S X=$O(^APCSDATA($J,X)) Q:X'=+X D
  1. .Q:$P(^APCSDATA($J,X),",",15)'="H"
  1. .I $P(^APCSDATA($J,X),",",8)="",$P(^APCSDATA($J,X),U,43)="" ;not an ILI or H1N1 visit
  1. .S L=$P(^APCSDATA($J,X),",",6),D=$P(^APCSDATA($J,X),",",7)
  1. .S $P(^APCSDATA($J,X),",",20)=$G(APCSHTOT(L,D))
  1. .Q
  1. ;NOW SET TOTAL IN PIECE 42
  1. S X=0 F S X=$O(^APCSDATA($J,X)) Q:X'=+X D
  1. .Q:$P(^APCSDATA($J,X),",",15)="H"
  1. .I $P(^APCSDATA($J,X),",",43)="" Q ;not an H1N1/ili visit
  1. .S L=$P(^APCSDATA($J,X),",",6),D=$P(^APCSDATA($J,X),",",7)
  1. .S $P(^APCSDATA($J,X),",",42)=$G(APCSALLT(L,D))
  1. .Q
  1. ;MARK - at this point you can loop through ^APCSDATA and generate HL7 messages
  1. I '$O(^APCSDATA($J,0)) D Q
  1. .I '$D(ZTQUEUED) W !!,"There are no visits to export.",! D PAUSE^APCLVL01
  1. D ILI^APCSHLO("ILI") ;parse out the APCSDATA global and create a message from it
  1. I '$D(ZTQUEUED) D PAUSE^APCLVL01
  1. ;D WRITE ;MARK - if you stored all the HL7 messages somewhere this is where you will write them out see WRITE subroutine, I write out global APCSDATA
  1. Q
  1. ILIDX ;
  1. Q:"AORSH"'[$P(^AUPNVSIT(APCSV,0),U,7)
  1. I $P(^AUPNVSIT(APCSV,0),U,7)="H" S APCSHTOT(APCSASUF,$$JDATE(APCSDATE))=$G(APCSHTOT(APCSASUF,$$JDATE(APCSDATE)))+1
  1. S APCSCLIN=$$CLINIC^APCLV(APCSV,"I") ;get clinic code
  1. ;is there a PHN
  1. S X=0,P=0 F S X=$O(^AUPNVPRV("AD",APCSV,X)) Q:X'=+X!(P) D
  1. .Q:'$D(^AUPNVPRV(X,0))
  1. .S Y=$P(^AUPNVPRV(X,0),U)
  1. .S Z=$$VALI^XBDIQ1(200,Y,53.5)
  1. .Q:'Z
  1. .I $P($G(^DIC(7,Z,9999999)),U,1)=13 S P=1
  1. I P G ILIDX1
  1. I $P(^AUPNVSIT(APCSV,0),U,7)'="H" Q:APCSCLIN=""
  1. I $P(^AUPNVSIT(APCSV,0),U,7)'="H" Q:'$D(^ATXAX(APCSCTAX,21,"B",APCSCLIN)) ;not in clinic taxonomy
  1. ILIDX1 ;
  1. I $P(^AUPNVSIT(APCSV,0),U,7)'="H" S APCSLOCT(APCSASUF,$$JDATE(APCSDATE))=$G(APCSLOCT(APCSASUF,$$JDATE(APCSDATE)))+1 ;total number of visits
  1. S C=0
  1. K G,Y S G=""
  1. S X=0 F S X=$O(^AUPNVPOV("AD",APCSV,X)) Q:X'=+X S T=$P(^AUPNVPOV(X,0),U) I $$ICD^ATXCHK(T,APCSDTAX,9) S C=C+1,Y(C)=$$VAL^XBDIQ1(9000010.07,X,.01)
  1. Q:'$D(Y) ;no diagnosis
  1. S X=0 F S X=$O(Y(X)) Q:X'=+X S G=G_U_Y(X)
  1. S $P(G,U,1)=1
  1. Q
  1. H1N1DX ;
  1. Q:"AORSH"'[$P(^AUPNVSIT(APCSV,0),U,7) ;just want outpatient with dx
  1. S APCSCLIN=$$CLINIC^APCLV(APCSV,"I") ;get clinic code
  1. ;I $P(^AUPNVSIT(APCSV,0),U,7)'="H" Q:'$D(^ATXAX(APCSCTAX,21,"B",APCSCLIN)) ;not in clinic taxonomy
  1. I $P(^AUPNVSIT(APCSV,0),U,7)'="H" S APCSALLT(APCSASUF,$$JDATE(APCSDATE))=$G(APCSALLT(APCSASUF,$$JDATE(APCSDATE)))+1 ;total number of visits
  1. S G=0
  1. S X=0 F S X=$O(^AUPNVPOV("AD",APCSV,X)) Q:X'=+X!(G) S T=$P(^AUPNVPOV(X,0),U) I $$ICD^ATXCHK(T,$O(^ATXAX("B","SURVEILLANCE H1N1 DX",0)),9) S G=1,D=$$VAL^XBDIQ1(9000010.07,X,.01)
  1. Q:'G ;no diagnosis
  1. S G=1_U_D
  1. Q
  1. HASSRD7(APCLV) ;EP
  1. NEW X,P,D,Y,Z,APCLCLIN,T,G,C
  1. I $P(^AUPNVSIT(APCLV,0),U,7)'="H" Q "" ;just want hOSP
  1. S C=0
  1. K G,Y S G=""
  1. S X=0 F S X=$O(^AUPNVPOV("AD",APCLV,X)) Q:X'=+X S T=$P(^AUPNVPOV(X,0),U) I $$ICD^ATXCHK(T,$O(^ATXAX("B","SURVEILLANCE SEV RESP DIS DXS",0)),9) S C=C+1,Y(C)=$$VAL^XBDIQ1(9000010.07,X,.01)
  1. I '$D(Y) Q "" ;no diagnosis
  1. S X=0 F S X=$O(Y(X)) Q:X'=+X S G=G_U_Y(X)
  1. S $P(G,U,1)=1
  1. Q G
  1. HASAVM(V) ;EP
  1. NEW C,X,Y,Z,T,L,M,N
  1. S T=$O(^ATXAX("B","FLU ANTIVIRAL MEDS",0))
  1. S C="",X=0 F S X=$O(^AUPNVMED("AD",V,X)) Q:X'=+X!(C) S Y=$P($G(^AUPNVMED(X,0)),U) D
  1. .Q:'Y
  1. .Q:'$D(^PSDRUG(Y,0))
  1. .S Z=0
  1. .S N=$P(^PSDRUG(Y,0),U)
  1. .I $D(^ATXAX(T,21,"B",Y)) S Z=1
  1. .I N["OSELTAMIVIR" S Z=1
  1. .I N["ZANAMIVIR" S Z=1
  1. .I Z=1 S C=1_U_N_U_$P(^AUPNVMED(X,0),U,7)
  1. .Q
  1. Q C
  1. ;send file
  1. WRITE ; use XBGSAVE to save the temp global (APCSDATA) to a delimited
  1. ; file that is exported to the IE system
  1. N XBGL,XBQ,XBQTO,XBNAR,XBMED,XBFLT,XBUF,XBFN
  1. S XBGL="APCSDATA",XBMED="F",XBQ="N",XBFLT=1,XBF=$J,XBE=$J
  1. S XBNAR="ILI SURVEILLANCE EXPORT HL7"
  1. S APCSASU=$P($G(^AUTTLOC($P(^AUTTSITE(1,0),U),0)),U,10) ;asufac for file name
  1. S XBFN="FLUHL7_"_APCSASU_"_"_$$DATE(DT)_".txt"
  1. S XBS1="SURVEILLANCE ILI SEND"
  1. ;
  1. D ^XBGSAVE
  1. ;
  1. I XBFLG'=0 D
  1. . I XBFLG(1)="" W:'$D(ZTQUEUED) !!,"VISIT ILI file successfully created",!!
  1. . I XBFLG(1)]"" W:'$D(ZTQUEUED) !!,"VISIT ILI file NOT successfully created",!!
  1. . W:'$D(ZTQUEUED) !,"File was NOT successfully transferred to IHS/CDC",!,"you will need to manually ftp it.",!
  1. . W:'$D(ZTQUEUED) !,XBFLG(1),!!
  1. K ^APCSDATA($J)
  1. Q
  1. ;
  1. DATE(D) ;EP
  1. Q (1700+$E(D,1,3))_$E(D,4,5)_$E(D,6,7)
  1. ;
  1. JDATE(D) ;EP - get date
  1. I $G(D)="" Q ""
  1. NEW A
  1. S A=$$FMTE^XLFDT(D)
  1. Q $E(D,6,7)_$$UP^XLFSTR($P(A," ",1))_(1700+$E(D,1,3))
  1. ;
  1. UID(APCSA) ;Given DFN return unique patient record id.
  1. I '$G(APCSA) Q ""
  1. I '$D(^AUPNPAT(APCSA)) Q ""
  1. ;
  1. Q $$GET1^DIQ(9999999.06,$P(^AUTTSITE(1,0),U),.32)_$E("0000000000",1,10-$L(APCSA))_APCSA
  1. ;
  1. EXIT ;clean up and exit
  1. D EN^XBVK("APCS")
  1. D ^XBFMK
  1. K ^APCSDATA($J)
  1. Q
  1. ;
  1. CTR(X,Y) ;EP - Center X in a field Y wide.
  1. Q $J("",$S($D(Y):Y,1:IOM)-$L(X)\2)_X
  1. ;----------
  1. EOP ;EP - End of page.
  1. Q:$E(IOST)'="C"
  1. Q:$D(ZTQUEUED)!'(IOT["TRM")!$D(IO("S"))
  1. NEW DIR
  1. K DIRUT,DFOUT,DLOUT,DTOUT,DUOUT
  1. S DIR(0)="E" D ^DIR
  1. Q
  1. ;----------
  1. USR() ;EP - Return name of current user from ^VA(200.
  1. Q $S($G(DUZ):$S($D(^VA(200,DUZ,0)):$P(^(0),U),1:"UNKNOWN"),1:"DUZ UNDEFINED OR 0")
  1. ;----------
  1. LOC() ;EP - Return location name from file 4 based on DUZ(2).
  1. Q $S($G(DUZ(2)):$S($D(^DIC(4,DUZ(2),0)):$P(^(0),U),1:"UNKNOWN"),1:"DUZ(2) UNDEFINED OR 0")
  1. ;----------
  1. PURGE ;
  1. W:'$D(ZTQUEUED) !!,"Now cleaning up host files older than 7 DAYS"
  1. K APCSFILE,APCSDIR
  1. S APCSDIR=$P($G(^AUTTSITE(1,1)),"^",2)
  1. I APCSDIR="" S APCSDIR=$P($G(^XTV(8989.3,1,"DEV")),"^",1)
  1. I APCSDIR="" Q
  1. S APCSASU=$P($G(^AUTTLOC($P(^AUTTSITE(1,0),U),0)),U,10)
  1. S APCSDT=$$FMADD^XLFDT(DT,-7)
  1. S APCSDT=$$DATE(APCSDT)
  1. S APCSFLST=$$LIST^%ZISH(APCSDIR,"FLUHL7_"_APCSASU_"*",.APCSFILE)
  1. Q:'$O(APCSFILE(""))
  1. S APCSX=0 F S APCSX=$O(APCSFILE(APCSX)) Q:APCSX'=+APCSX D
  1. .S D=$P($P(APCSFILE(APCSX),"."),"_",3)
  1. .I D<APCSDT S N=APCSFILE(APCSX) S APCSM=$$DEL^%ZISH(APCSDIR,N)
  1. Q