CIMSRYXD ;CMI [ 04/20/98 1:05 PM ]
;
;
;
START ;Begin processing backload
W:$D(IOF) @IOF
W !,$$CTR($$LOC(),80),!
S X="***** PHOENIX AREA ORYX BACKLOAD PROCESSING *****" W !,$$CTR(X,80),!
S T="INTRO" F J=1:1 S X=$T(@T+J),X=$P(X,";;",2) Q:X="END" W !,X
K J,X,T
;
W !,"A file will be created and will be placed in the public directory where",!,"all other exports are placed. It will be called OX"_$P(^AUTTLOC(DUZ(2),0),U,10)_"."_$$NLOG,!
I $D(^CIMSORY1) W !!,$C(7),$C(7),"CIMSORY1 GLOBAL EXISTS FROM A PREVIOUS RUN - CANNOT CONTINUE" D XIT Q
GETDATES ;
W !,"Please enter the date range for which the statistical (ORYX) records",!,"should be generated.",!
BD ;
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
G:$D(DIRUT) XIT
S CIMSBD=Y
ED ;
S DIR(0)="DA^::EP",DIR("A")="Enter Ending Date: " D ^DIR K DIR,DA S:$D(DUOUT) DIRUT=1
G:$D(DIRUT) XIT
I Y<CIMSBD W !,"Ending date must be greater than or equal to beginning date!" G ED
S CIMSED=Y
S X1=CIMSBD,X2=-1 D C^%DTC S CIMSSD=X
S CIMSERR=0
D CHECK
I $G(CIMSERR) W !!,"Goodbye",! D XIT Q
W !!,"Log entry ",$$NLOG," will be created and records generated for visit",!,"date range ",$$FMTE^XLFDT(CIMSBD)," to ",$$FMTE^XLFDT(CIMSED),".",!
CONT ;continue or not
S DIR(0)="Y",DIR("A")="Do you wish to continue",DIR("B")="N" KILL DA D ^DIR KILL DIR
I $D(DIRUT) W !!,"Goodbye" D XIT Q
I 'Y W !!,"Goodbye" D XIT Q
S CIMSRUN="NEW",CIMSERR=0
D HOME^%ZIS S CIMSBS=$S('$D(ZTQUEUED):IOBS,1:"")
D GENLOG ;generate new log entry
I $G(CIMSERR) D XIT Q
D QUEUE
I $G(CIMSERR) W !!,"Goodbye, no processing will occur.",! D XIT Q
I $D(CIMSQUE) D XIT Q
;
PROCESS ;EP - process new run
S CIMSCNT=$S('$D(ZTQUEUED):"X CIMSCNT1 X CIMSCNT2",1:"S CIMSTOTV=CIMSTOTV+1"),CIMSCNT1="F CIMSCNTL=1:1:$L(CIMSTOTV)+1 W @CIMSBS",CIMSCNT2="S CIMSTOTV=CIMSTOTV+1 W CIMSTOTV,"")"""
W:'$D(ZTQUEUED) !,"Generating transactions. Counting visits. (1)"
K ^CIMSORY1
S CIMSSD=CIMSSD_".9999"
;set counters
S (CIMSTOTV,CIMSTERR,CIMSTOTR,CIMSUSED)=0
V ; Run by visit date
F S CIMSSD=$O(^AUPNVSIT("B",CIMSSD)) Q:CIMSSD=""!((CIMSSD\1)>CIMSED) D V1
S DA=CIMSLOG,DIE="^CIMSORYX(",DR=".05///"_CIMSTOTV_";.06///"_CIMSUSED_";.07///"_CIMSTOTR_";.08///P" D ^DIE K DIE,DA,DR ;no error check
S ^CIMSORYX(CIMSLOG,11,0)="^19250.0611^0^0"
S X="",C=0 F S X=$O(CIMSERRT(X)) Q:X="" S C=C+1,^CIMSORYX(CIMSLOG,11,C,0)=X_"^"_CIMSERRT(X)
S DA=CIMSLOG,DIK="^CIMSORYX(" D IX1^DIK K DA,DIK
D WRITEF
D XIT
Q
V1 ;go through each visit on this date
S CIMSVDFN="" F S CIMSVDFN=$O(^AUPNVSIT("B",CIMSSD,CIMSVDFN)) Q:CIMSVDFN'=+CIMSVDFN I $D(^AUPNVSIT(CIMSVDFN,0)) S CIMSVREC=^(0) D PROC
Q
PROC ;
X CIMSCNT
I '$P(CIMSVREC,U,9) S CIMSERRT("ZERO DEP ENTRIES")=$G(CIMSERRT("ZERO DEP ENTRIES"))+1 Q ;no dependent entries
I $P(CIMSVREC,U,11) S CIMSERRT("DELETED VISIT")=$G(CIMSERRT("DELETED VISIT"))+1 Q
I "E"[$P(CIMSVREC,U,7) S CIMSERRT("EVENT VISIT")=$G(CIMSERRT("EVENT VISIT"))+1 Q
S DFN=$P(CIMSVREC,U,5)
Q:'DFN
I $P(^DPT(DFN,0),U)="DEMO,PATIENT" S CIMSERRT("DEMO PATIENT")=$G(CIMSERRT("DEMO PATIENT"))+1 Q
I '$D(^AUPNVPOV("AD",CIMSVDFN)) S CIMSERRT("NO POV")=$G(CIMSERRT("NO POV"))+1 Q
I $$PRIMPROV^APCLV(CIMSVDFN,"I")="" S CIMSERRT("NO PRIM PROV")=$G(CIMSERRT("NO PRIM PROV"))+1 Q ;no primary provider
S Z=$O(^AUPNVINP("AD",CIMSVDFN,0))
I $P(CIMSVREC,U,7)="H",'Z S CIMSERRT("NO V HOSP")=$G(CIMSERRT("NO V HOSP"))+1 Q
I $P(CIMSVREC,U,7)="H",$P($G(^AUPNVINP(Z,0)),U,15) S CIMSERRT("V HOSP NOT READY")=$G(CIMSERRT("V HOSP NOT READY"))+1 Q
S CIMSX=$$VREC^APCLVDR(CIMSVDFN,"MEGA RECORD 1")
I CIMSX=-1!(CIMSX="") S CIMSERRT("STAT RECORD ERROR")=$G(CIMSERRT("STAT RECORD ERROR"))+1 Q
S CIMSX2=$$VREC^APCLVDR(CIMSVDFN,"MEGA RECORD 2")
I CIMSX2=-1!(CIMSX2="") S CIMSERRT("STAT RECORD ERROR")=$G(CIMSERRT("STAT RECORD ERROR"))+1 Q
S CIMSX3=$$VREC^APCLVDR(CIMSVDFN,"MEGA RECORD 3")
I CIMSX3=-1!(CIMSX3="") S CIMSERRT("STAT RECORD ERROR")=$G(CIMSERRT("STAT RECORD ERROR"))+1 Q
S CIMSUSED=CIMSUSED+1,CIMSTOTR=CIMSTOTR+1
S ^CIMSORY1(CIMSTOTR)="AD1^"_CIMSX
S CIMSTOTR=CIMSTOTR+1
S ^CIMSORY1(CIMSTOTR)="AD2^"_CIMSX2
S CIMSTOTR=CIMSTOTR+1
S ^CIMSORY1(CIMSTOTR)="AD3^"_CIMSX3
Q
CHECK ;
I $O(^CIMSORYX("AD",CIMSBD,0)) W !!,"One or more of those visit dates has already been processed! Log entry ",$O(^CIMSORYX("AD",CIMSBD,0)),! W $C(7),$C(7) H 3 S CIMSERR=1 Q
I $O(^CIMSORYX("AD",CIMSED,0)) W !!,"One or more of those visit dates has already been processed! Log entry ",$O(^CIMSORYX("AD",CIMSED,0)),! W $C(7),$C(7) H 3 S CIMSERR=1 Q
S X=CIMSBD F S X=$$FMADD^XLFDT(X,1) Q:X>CIMSED!(CIMSERR) I $O(^CIMSORYX("AD",X,0)) W !!,"One or more of those visit dates has already been processed! Log entry ",$O(^CIMSORYX("AD",X,0)),! W $C(7),$C(7) H 3 S CIMSERR=1 Q
Q
RERUN ;EP - rerun old log entry
W:$D(IOF) @IOF
W !!,"Rerun ORYX Backload Visit Set",!
;GET LOG
S DIC="^CIMSORYX(",DIC(0)="AEMQ" D ^DIC
K DIC,DA,DD,DO,D0
I Y=-1 D XIT Q
S CIMSLOG=+Y
S CIMSBD=$P(^CIMSORYX(CIMSLOG,0),U,3),CIMSED=$P(^(0),U,4),CIMSSD=$$FMADD^XLFDT(CIMSBD,-1),CIMSRUN="REDO"
S CIMS0=^CIMSORYX(CIMSLOG,0)
W !!,"Log entry ",CIMSLOG," will be reprocessed. Visits in the date range ",!,$$FMTE^XLFDT(CIMSBD)," to ",$$FMTE^XLFDT(CIMSED)," will be processed.",!
W !,"The output file created will be called OX"_$P(^AUTTLOC(DUZ(2),0),U,10)_"."_CIMSLOG
W !,"The last time a total of ",$P(CIMS0,U,5)," visits were processed, of which, ",!,$P(CIMS0,U,6)," generated statistical records.",!!
S DIR(0)="Y",DIR("A")="Do you wish to continue",DIR("B")="N" KILL DA D ^DIR KILL DIR
I $D(DIRUT) W !!,"Goodbye" D XIT Q
I 'Y W !!,"Goodbye" D XIT Q
D QUEUE
I $G(CIMSERR) W !!,"Goodbye, no processing will occur.",! D XIT Q
I $D(CIMSQUE) D XIT Q
;
RERUN1 ;
;reset log entry
F X=5,6,7 S $P(^CIMSORYX(CIMSLOG,0),U,X)=""
K ^CIMSORYX(CIMSLOG,11) ;kill error multiple
S DA=CIMSLOG,DIE="^CIMSORYX(",DR=".02///"_DT D ^DIE K DIE,DR,DA
S CIMSRUN="REDO",CIMSERR=0
D HOME^%ZIS S CIMSBS=$S('$D(ZTQUEUED):IOBS,1:"")
G PROCESS
QUEUE ;EP
K ZTSK
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
I Y=1 D QUEUE1 Q
I CIMSRUN="NEW",$D(DIRUT) S CIMSERR=1 S DA=CIMSLOG,DIK="^CIMSORYX(" W !,"Okay, you '^'ed out or timed out so I'm deleting the Log entry and quitting.",! D ^DIK K DIK,DA
I CIMSRUN="REDO",$D(DIRUT) S CIMSERR=1 Q
Q
QUEUE1 ;
S ZTRTN=$S(CIMSRUN="NEW":"PROCESS^CIMSRYXD",1:"RERUN1^CIMSRYXD")
S ZTIO="",ZTDTH="",ZTDESC="ORYX BACKLOAD" S ZTSAVE("CIMS*")=""
D ^%ZTLOAD
W !!,$S($D(ZTSK):"Request Queued!!",1:"Request cancelled")
I '$D(ZTSK),CIMSRUN="NEW" S CIMSERR=1 S DA=CIMSLOG,DIK="^CIMSORYX" W !,"Okay, you '^'ed out or timed out so I'm deleting the Log entry and quitting.",! D ^DIK K DIK,DA Q
S CIMSQUE=""
S DIE="^CIMSORYX(",DA=CIMSLOG,DR=".15///Q" D ^DIE K DIE,DA,DR
K ZTSK
Q
WRITEF ;EP - write out flat file
I '$D(^CIMSORY1)!(CIMSTOTR=0) W:'$D(ZTQUEUED) !!,"No transactions to send in that date range.",! Q
S XBGL="CIMSORY1"
S XBMED="F",XBFN="OX"_$P(^AUTTLOC(DUZ(2),0),U,10)_"."_CIMSLOG,XBTLE="SAVE OF ORYX BACKLOAD RECORDS GENERATED BY -"_$P(^VA(200,DUZ,0),U)
S XBF=0,XBQ="N"
D ^XBGSAVE
;check for error
I XBFLG=-1 S CIMSERR=1 W:'$D(ZTQUEUED) !,$C(7),$C(7),XBFLG(1) Q
K ^CIMSORY1
S DA=CIMSLOG,DIE="^CIMSORYX(",DR=".08///S;.11////OX"_$P(^AUTTLOC(DUZ(2),0),U,10)_"."_CIMSLOG D ^DIE K DA,DIE,DR
K XBGL,XBMED,XBTLE,XBFN,XBF,XBQ,XBFLT
Q
GENLOG ;generate new log entry
W:'$D(ZTQUEUED) !,"Generating New Log entry.."
S Y=$$NLOG S X=""""_Y_"""",DIC="^CIMSORYX(",DIC(0)="L",DLAYGO=19250.06,DIC("DR")=".02////"_DT_";.03////"_CIMSBD_";.04////"_CIMSED_";.09///`"_DUZ(2)
D ^DIC K DIC,DLAYGO,DR
I Y<0 W !!,$C(7),$C(7),"Error creating log entry." S CIMSERR=1 Q
S CIMSLOG=+Y
Q
XIT ;exit, eoj cleanup
D EOP
D ^XBFMK
D EN^XBVK("CIMS")
D KILL^AUPNPAT
Q
CTR(X,Y) ;EP - Center X in a field Y wide.
Q $J("",$S($D(Y):Y,1:IOM)-$L(X)\2)_X
;----------
EOP ;EP - End of page.
Q:$E(IOST)'="C"
Q:$D(ZTQUEUED)!'(IOT="TRM")!$D(IO("S"))
NEW DIR
K DIRUT,DFOUT,DLOUT,DTOUT,DUOUT
S DIR("A")="End of Job. Press Return.",DIR(0)="E" D ^DIR
Q
;----------
USR() ;EP - Return name of current user from ^VA(200.
Q $S($G(DUZ):$S($D(^VA(200,DUZ,0)):$P(^(0),U),1:"UNKNOWN"),1:"DUZ UNDEFINED OR 0")
;----------
LOC() ;EP - Return location name from file 4 based on DUZ(2).
Q $S($G(DUZ(2)):$S($D(^DIC(4,DUZ(2),0)):$P(^(0),U),1:"UNKNOWN"),1:"DUZ(2) UNDEFINED OR 0")
;----------
;
NLOG() ;get next log
NEW X,L S (X,L)=0 F S X=$O(^CIMSORYX(X)) Q:X'=+X S L=X
Q L+1
SETB ;
NEW Z S Z=X S ^CIMSORYX("AD",Z,DA)="" F S Z=$$FMADD^XLFDT(Z,1) Q:Z>$P(^CIMSORYX(DA,0),U,4) S ^CIMSORYX("AD",Z,DA)=""
Q
SETE ;
NEW Z S Z=$P(^CIMSORYX(DA,0),U,3) S ^CIMSORYX("AD",Z,DA)="" F S Z=$$FMADD^XLFDT(Z,1) Q:Z>X S ^CIMSORYX("AD",Z,DA)=""
Q
KILLB ;
NEW Z S Z=X K ^CIMSORYX("AD",Z,DA) F Z=$$FMADD^XLFDT(Z,1) Q:Z>$P(^CIMSORYX(DA,0),U,4) K ^CIMSORYX("AD",Z,DA)
Q
KILLE ;
NEW Z S Z=$P(^CIMSORYX(DA,0),U,3) K ^CIMSORYX("AD",Z,DA) F S Z=$$FMADD^XLFDT(Z,1) Q:Z>X K ^CIMSORYX("AD",Z,DA)
Q
INTRO ;introductory text
;;This program will generate statistical records (ORYX records) for a visit
;;date range that you enter. A log entry will be created which will log
;;the number of visits processed and the number of statistical records
;;generated. You can view this log by doing an Inquire into file
;;ORYX BACKLOAD LOG.
;;
;;END