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

BDWDDR.m

Go to the documentation of this file.
  1. BDWDDR ;IHS/CMI/LAB - Main Driver EXPORT DATE RANGE;
  1. ;;1.0;IHS DATA WAREHOUSE;**2**;JAN 23, 2006
  1. ;
  1. ;
  1. ;
  1. START ;Begin processing backload
  1. D EN^XBVK("BDW"),^XBFMK K DIADD,DLAYGO
  1. S BDW("QFLG")=0
  1. W:$D(IOF) @IOF
  1. W !,$$CTR($$LOC(),80),!
  1. S X="***** IHS DATA WAREHOUSE VISIT RE-EXPORT IN A DATE RANGE *****" W !,$$CTR(X,80),!
  1. S T="INTRO" F J=1:1 S X=$T(@T+J),X=$P(X,";;",2) Q:X="END" W !,X
  1. K J,X,T
  1. ;
  1. S BDWERR=0
  1. D CHECK
  1. D CHKSITE^BDWRDRI
  1. I BDW("QFLG") D XIT Q
  1. I BDWERR D XIT Q
  1. GETDATES ;
  1. W !,"Please enter the date range for which the Data Warehouse HL7 messages",!,"should be generated.",!
  1. BD ;
  1. S DIR(0)="D^::EP",DIR("A")="Enter Beginning Visit Date",DIR("?")="Enter the beginning visit date." D ^DIR K DIR S:$D(DUOUT) DIRUT=1
  1. G:$D(DIRUT) XIT
  1. S BDWBD=Y
  1. ED ;
  1. S DIR(0)="DA^::EP",DIR("A")="Enter Ending Date: " D ^DIR K DIR,DA S:$D(DUOUT) DIRUT=1
  1. G:$D(DIRUT) XIT
  1. I Y<BDWBD W !,"Ending date must be greater than or equal to beginning date!" G ED
  1. S BDWED=Y
  1. S X1=BDWBD,X2=-1 D C^%DTC S BDWSD=X
  1. S BDWERR=0
  1. W !!,"Log entry ",$$NLOG," will be created and messages generated for visit",!,"date range ",$$FMTE^XLFDT(BDWBD)," to ",$$FMTE^XLFDT(BDWED),".",!
  1. VAUDIT ;
  1. S BDWVA=""
  1. S DIR(0)="Y",DIR("A")="Do you want to create a VISIT AUDIT report for this batch of visits",DIR("B")="N" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) G GETDATES
  1. I Y S BDWVA=1
  1. CONT ;continue or not
  1. S DIR(0)="Y",DIR("A")="Do you wish to continue",DIR("B")="N" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) W !!,"Goodbye" D XIT Q
  1. I 'Y W !!,"Goodbye" D XIT Q
  1. S BDWRUN="NEW",BDWERR=0
  1. D HOME^%ZIS S BDWBS=$S('$D(ZTQUEUED):IOBS,1:"")
  1. D GENLOG ;generate new log entry
  1. I $G(BDWERR) D XIT Q
  1. D QUEUE
  1. I $G(BDWERR) W !!,"Goodbye, no processing will occur.",! D XIT Q
  1. I $D(BDWQUE) D XIT Q
  1. ;
  1. PROCESS ;EP - process new run
  1. D GIS^BDW1VBLI
  1. S BDWDDR=1
  1. S BDWTOTV=0
  1. K ^TMP($J,"BDW")
  1. K BDW,BDWERRC,BDWE
  1. D BASICS^BDWRDRI
  1. S BDW("RUN LOG")=BDWLOG
  1. D NOW^%DTC S BDW("RUN START")=%,BDW("MAIN TX DATE")=$P(%,".") K %,%H,%I
  1. S BDW("BT")=$H
  1. S BDWMSGH=$$DW1HDR^BHLEVENT(90213,BDWLOG)
  1. S ^BDWTMP(BDWIEDST,BDWMSGH)=""
  1. S DIE="^BDWXLOG(",DA=BDWLOG,DR=".15///R;.03////"_BDW("RUN START")_";.12////"_BDWMSGH D ^DIE K DA,DIE,DR
  1. S BDWCNT=$S('$D(ZTQUEUED):"X BDWCNT1 X BDWCNT2",1:"S BDWTOTV=BDWTOTV+1"),BDWCNT1="F BDWCNTL=1:1:$L(BDWTOTV)+1 W @BDWBS",BDWCNT2="S BDWTOTV=BDWTOTV+1 W BDWTOTV,"")"""
  1. W:'$D(ZTQUEUED) !,"Generating transactions. Counting visits. (1)"
  1. S BDWSD=BDWSD_".9999"
  1. ;set counters
  1. V ; Run by visit date
  1. F S BDWSD=$O(^AUPNVSIT("B",BDWSD)) Q:BDWSD=""!((BDWSD\1)>BDWED) D V1
  1. ;update log
  1. D ^XBFMK
  1. D RUNTIME^BDWRDR
  1. D LOG
  1. S X=$$WRITE
  1. SETV ;set 1106
  1. S BDWTOTV=0
  1. I '$D(ZTQUEUED) W !,"Updating visit entries with export date....("
  1. S BDW("V DFN")=0 F S BDW("V DFN")=$O(^TMP($J,"BDW",BDW("V DFN"))) Q:BDW("V DFN")'=+BDW("V DFN") D ^XBFMK S DA=BDW("V DFN"),DIE="^AUPNVSIT(",DR="1106////"_BDW("MAIN TX DATE") D ^DIE,^XBFMK X BDWCNT
  1. D XIT
  1. Q
  1. V1 ;go through each visit on this date
  1. S BDW("V DFN")="" F S BDW("V DFN")=$O(^AUPNVSIT("B",BDWSD,BDW("V DFN"))) Q:BDW("V DFN")'=+BDW("V DFN") I $D(^AUPNVSIT(BDW("V DFN"),0)) S BDWVREC=^(0) D PROC
  1. Q
  1. PROC ;
  1. Q:$P(^AUPNVSIT(BDW("V DFN"),0),U,23)=.5
  1. ;if no unique ID, stuff it
  1. I $P($G(^AUPNVSIT(BDW("V DFN"),11)),U,4)="" D ^XBFMK S DIE="^AUPNVSIT(",DA=BDW("V DFN"),DR="1104////"_$$UID^AUPNVSIT(BDW("V DFN")) D ^DIE,^XBFMK
  1. I $P($G(^AUPNVSIT(BDW("V DFN"),11)),U,4)="" D ^XBFMK S DIE="^AUPNVSIT(",DA=BDW("V DFN"),DR="1114////"_$$UIDV^BDWAID(BDW("V DFN")) D ^DIE,^XBFMK ;cmi/anch/maw 9/6/2007 patch 2
  1. S BDWV("TX GENERATED")=0,^TMP($J,"BDW",BDW("V DFN"))=""
  1. S BDW("VPROC")=$G(BDW("VPROC"))+1
  1. X BDWCNT
  1. S BDWV("V REC")=^AUPNVSIT(BDW("V DFN"),0)
  1. I $P(BDWV("V REC"),U,11),$P($G(^AUPNVSIT(BDW("V DFN"),11)),U,6)="" D G SET
  1. .S BDWE("ERROR")=100 D ^BDWRERR
  1. S BDWV("V DATE")=+BDWV("V REC")\1
  1. K BDWVMSG D ^BDWRDR2
  1. SET S:'$D(^BDWXLOG(BDW("RUN LOG"),21,0)) ^BDWXLOG(BDW("RUN LOG"),21,0)="^90213.2101PA^^"
  1. S ^BDWXLOG(BDW("RUN LOG"),21,BDW("V DFN"),0)=BDW("V DFN")_U_BDWV("TX GENERATED")_U_$G(BDWVMSG)
  1. S $P(^BDWXLOG(BDW("RUN LOG"),21,0),U,3)=BDW("V DFN"),$P(^(0),U,4)=$P(^(0),U,4)+1
  1. K DIE,DR,DIC
  1. I BDWVA,'$D(BDWE) D VA^BDW1VBL2
  1. Q
  1. ;
  1. LOG ;
  1. S BDW("COUNT")=BDW("VISITS") W:'$D(ZTQUEUED) !!,BDW("COUNT")," HL7 Messages were generated."
  1. W:'$D(ZTQUEUED) !,"Updating log entry."
  1. D NOW^%DTC S BDW("RUN STOP")=%
  1. S DA=BDW("RUN LOG"),DIE="^BDWXLOG(",DR=".04////"_BDW("RUN STOP")_";.05////"_BDW("SKIP")_";.06////"_BDW("COUNT")_";.08///"_BDW("VPROC") D ^DIE I $D(Y) S BDW("QFLG")=26 Q
  1. K DIE,DA,DR
  1. S DA=BDW("RUN LOG"),DIE="^BDWXLOG(",DR=".11////"_BDW("REG")_";.12////"_BDWMSGH_";.18////"_$G(BDW("VISITS")) D ^DIE I $D(Y) S BDW("QFLG")=26 Q
  1. K DR,DIE,DA,DIV,DIU
  1. S DIE="^BDWXLOG(",DA=BDW("RUN LOG"),DR="3101////"_BDW("DEMO")_";3102////"_BDW("ZERO")_";3103////"_BDW("DEL")_";3104////"_BDW("NO PAT")_";3105////"_BDW("NO LOC")_";3106////"_BDW("NO TYPE")_";3107////"_BDW("NO CAT")_";3111////"_BDW("MFI")
  1. D ^DIE I $D(Y) S BDW("QFLG")=26 Q
  1. S DA=BDW("RUN LOG"),DIK="^BDWXLOG(" D IX1^DIK K DA,DIK
  1. D ^XBFMK
  1. ;
  1. TR ;trailer report
  1. S BDWLOC=0,BDWLOCC=0,BDWTYPE="",BDWMODE="",BDWDATE="",BDWLC=0
  1. S X="EXPORT SITE: "_$$VAL^XBDIQ1(90213,BDW("RUN LOG"),.09) D S
  1. S X="DATE OF EXPORT: "_$$FMTE^XLFDT($P($P(^BDWXLOG(BDW("RUN LOG"),0),U,3),".")) D S
  1. S X="TOTAL NUMBER OF VISITS EXPORTED: "_$P(^BDWXLOG(BDW("RUN LOG"),0),U,18) D S
  1. S X="TOTAL NUMBER OF ADDS: "_$$VAL^XBDIQ1(90213,BDW("RUN LOG"),3108) D S
  1. S X="TOTAL NUMBER OF MODS: "_$$VAL^XBDIQ1(90213,BDW("RUN LOG"),3109) D S
  1. S X="TOTAL NUMBER OF DELETES: "_$$VAL^XBDIQ1(90213,BDW("RUN LOG"),3110) D S
  1. S X="" D S
  1. S X="" D S
  1. F S BDWLOC=$O(^TMP($J,"BDWTRAILER",BDWLOC)) Q:BDWLOC'=+BDWLOC D
  1. .S BDWLC=BDWLC+1,BDWLOCC=BDWLOCC+1
  1. .S X=BDWLOCC_". Location of Encounter "_$P(^AUTTLOC(BDWLOC,0),U,10) D S
  1. .S X="" D S
  1. .S X="Type/Cat",$E(X,30)="TOTAL COUNT",$E(X,49)="ADDS",$E(X,58)="DELETES",$E(X,70)="CHANGES" D S
  1. .S X="---------------------------------------------------------------------------" D S
  1. .S BDWTYPE="" F S BDWTYPE=$O(^TMP($J,"BDWTRAILER",BDWLOC,"TYPE",BDWTYPE)) Q:BDWTYPE="" D
  1. ..S X=BDWTYPE,$E(X,33)=$$C($G(^TMP($J,"BDWTRAILER",BDWLOC,"TYPE",BDWTYPE,"TOT")),0,9),$E(X,46)=$$C($G(^TMP($J,"BDWTRAILER",BDWLOC,"TYPE",BDWTYPE,"A")),0,9)
  1. ..S $E(X,58)=$$C($G(^TMP($J,"BDWTRAILER",BDWLOC,"TYPE",BDWTYPE,"D")),0,9),$E(X,70)=$$C($G(^TMP($J,"BDWTRAILER",BDWLOC,"TYPE",BDWTYPE,"M")),0,9)
  1. ..D S
  1. .S X="" D S
  1. .S X="" D S
  1. .S X="COUNT BY DATE OF VISITS" D S
  1. .S X="TYPE/CAT",$E(X,33)="MONTH/YR",$E(X,49)="TOTAL" D S
  1. .S X="---------------------------------------------------------------------------" D S
  1. .S BDWTYPE="" F S BDWTYPE=$O(^TMP($J,"BDWTRAILER",BDWLOC,"DATE",BDWTYPE)) Q:BDWTYPE="" D
  1. ..S BDWDATE=0 F S BDWDATE=$O(^TMP($J,"BDWTRAILER",BDWLOC,"DATE",BDWTYPE,BDWDATE)) Q:BDWDATE="" D
  1. ...S X=BDWTYPE,$E(X,33)=$$FMTE^XLFDT(BDWDATE),$E(X,46)=$$C(^TMP($J,"BDWTRAILER",BDWLOC,"DATE",BDWTYPE,BDWDATE),0,9) D S
  1. ...Q
  1. ..Q
  1. .S X="" D S
  1. .S X="" D S
  1. .Q
  1. S ^BDWXLOG(BDW("RUN LOG"),99,0)="^^"_BDWLC_"^"_BDWLC_"^"_DT
  1. S DA=BDW("RUN LOG"),DIK="^BDWXLOG(" D IX1^DIK K DA,DIK
  1. D ^XBFMK
  1. S BDWMSGT=$$DW1TRLR^BHLEVENT(90213,BDW("RUN LOG"))
  1. S ^BDWTMP(BDWIEDST,BDWMSGT)=""
  1. S DA=BDW("RUN LOG"),DIE="^BDWXLOG(",DR=".13////"_BDWRUN_";.14////"_BDWMSGT_";.15////C" D ^DIE
  1. ;
  1. Q
  1. C(X,X2,X3) ;
  1. I X="" Q ""
  1. D COMMA^%DTC
  1. Q X
  1. S ;
  1. S BDWLC=BDWLC+1
  1. S ^BDWXLOG(BDW("RUN LOG"),99,BDWLC,0)=X
  1. K X
  1. Q
  1. Q
  1. CHECK ;
  1. I '$P($G(^AUTTSITE(1,0)),U) W !!,"RPMS Site file not SET UP" S BDWERR=1 Q
  1. I $P(^BDWSITE(1,0),U,6)="" W:'$D(ZTQUEUED) !!,"VISIT backloading has not been completed. Must be finished first." S BDWERR=2 Q
  1. ;D TAXCHK^BDWRDRI
  1. Q
  1. QUEUE ;EP
  1. K ZTSK
  1. S DIR(0)="Y",DIR("A")="Do you want to QUEUE this to run at a later time",DIR("B")="N" D ^DIR K DIR S:$D(DUOUT) DIRUT=1
  1. I Y=1 D QUEUE1 Q
  1. I BDWRUN="NEW",$D(DIRUT) S BDWERR=1 S DA=BDWLOG,DIK="^BDWXLOG(" W !,"Okay, you '^'ed out or timed out so I'm deleting the Log entry and quitting.",! D ^DIK K DIK,DA
  1. Q
  1. QUEUE1 ;
  1. S ZTRTN="PROCESS^BDWDDR"
  1. S ZTIO="",ZTDTH="",ZTDESC="DATA WAREHOUSE DATE RANGE" S ZTSAVE("BDW*")=""
  1. D ^%ZTLOAD
  1. W !!,$S($D(ZTSK):"Request Queued!!",1:"Request cancelled")
  1. I '$D(ZTSK),BDWRUN="NEW" S BDWERR=1 S DA=BDWLOG,DIK="^BDWXLOG(" W !,"Okay, you '^'ed out or timed out so I'm deleting the Log entry and quitting.",! D ^DIK K DIK,DA Q
  1. S BDWQUE=""
  1. S DIE="^BDWXLOG(",DA=BDWLOG,DR=".15///Q" D ^DIE K DIE,DA,DR
  1. K ZTSK
  1. Q
  1. GENLOG ;generate new log entry
  1. D ^XBFMK K DIADD,DLAYGO
  1. W:'$D(ZTQUEUED) !,"Generating New Log entry.."
  1. S X=$$FMTE^XLFDT(BDWBD),DIC="^BDWXLOG(",DIC(0)="L",DLAYGO=90213,DIC("DR")=".02////"_BDWED_";.07////D;.09////"_$P(^AUTTSITE(1,0),U)_";8801////"_DUZ_";.23///DRE" S DIADD=1
  1. D ^DIC K DIC,DLAYGO,DR,DIADD
  1. I Y<0 W !!,$C(7),$C(7),"Error creating log entry." S BDWERR=1 D ^XBFMK Q
  1. S (BDWLOG,BDW("RUN LOG"))=+Y
  1. D ^XBFMK
  1. Q
  1. XIT ;exit, eoj cleanup
  1. D EOP
  1. D ^XBFMK
  1. D EN^XBVK("BDW")
  1. D KILL^AUPNPAT
  1. K AUPNCPT
  1. Q
  1. WRITE() ; use XBGSAVE to save the temp global (BDWDATA) to a delimited
  1. ; file that is exported to the DW system at 127.0.0.1
  1. ;
  1. N XBGL,XBQ,XBQTO,XBNAR,XBMED,XBFLT,XBUF,XBFN
  1. N BDWASU,BDWJUL,DT,X2,X1,X
  1. S BDWVA("COUNT")=BDWVA("COUNT")+1,^BDWDATA(BDWVA("COUNT"))="T0^"_$P($$DATE^INHUT($$NOW^XLFDT,1),"-")
  1. S XBGL="BDWDATA",XBMED="F",XBQ="N",XBFLT=1
  1. S XBNAR="DW Visit Audit"
  1. I '$D(DT) D DT^DICRW ;get julian date for file name
  1. S X2=$E(DT,1,3)_"0101",X1=DT
  1. D ^%DTC
  1. S BDWJUL=X+1
  1. S BDWASU=$P($G(^AUTTLOC($P(^AUTTSITE(1,0),U),0)),U,10) ;asufac for file name
  1. S XBFN="BDWDWVX"_BDWASU_"."_BDW("RUN LOG")
  1. NEW DA,DIE,DR
  1. S DA=BDW("RUN LOG"),DIE="^BDWXLOG(",DR=".21///"_XBFN D ^DIE K DA,DIE,DR
  1. ;S XBUF="/usr3/dsd/ljara/" ;used in testing to make it fail
  1. ;S XBQTO="-l dwxfer:regpcc 127.0.0.1"
  1. S XBS1="DATA WAREHOUSE SEND"
  1. ;
  1. D ^XBGSAVE
  1. ;
  1. I XBFLG=0 D
  1. . W:'$D(ZTQUEUED) !,"VISIT audit file successfully created and transferred.",!!
  1. . K ^BDWDATA
  1. ;
  1. I XBFLG'=0 D
  1. . I XBFLG(1)="" W:'$D(ZTQUEUED) !!,"VISIT audit file successfully created",!! K ^BDWDATA
  1. . I XBFLG(1)]"" W:'$D(ZTQUEUED) !!,"VISIT audit file NOT successfully created",!!
  1. . W:'$D(ZTQUEUED) !,"File was NOT successfully transferred to the data warehouse",!,"you will need to manually ftp it.",!
  1. . W:'$D(ZTQUEUED) !,XBFLG(1),!!
  1. ;
  1. Q XBFLG
  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("A")="End of Job. Press Return.",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. DATE(D) ;EP ;IHS/CMI/LAB - new date format - format date in YYYYMMDD format
  1. I $G(D)="" Q ""
  1. Q $E(D,1,3)+1700_$E(D,4,7)
  1. ;
  1. ;
  1. NLOG() ;get next log
  1. NEW X,L S (X,L)=0 F S X=$O(^BDWXLOG(X)) Q:X'=+X S L=X
  1. Q L+1
  1. INTRO ;introductory text
  1. ;;
  1. ;;ATTENTION:
  1. ;;
  1. ;;Please do not run this export without checking with NPIRS first.
  1. ;;DRE exports cannot be loaded into the NDW without first making
  1. ;;special arrangements. You can contact the
  1. ;;Help Desk.
  1. ;;
  1. ;;You should use the GDW and RERX options for all regularly scheduled
  1. ;;exports.
  1. ;;
  1. ;;This program will generate Data Warehouse records for a visit
  1. ;;date range that you enter. A log entry will be created which will log
  1. ;;the number of visits processed and the number of Data Warehouse records
  1. ;;generated.
  1. ;;
  1. ;;END