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

CIMSRYXD.m

Go to the documentation of this file.
  1. CIMSRYXD ;CMI [ 04/20/98 1:05 PM ]
  1. ;
  1. ;
  1. ;
  1. START ;Begin processing backload
  1. W:$D(IOF) @IOF
  1. W !,$$CTR($$LOC(),80),!
  1. S X="***** PHOENIX AREA ORYX BACKLOAD PROCESSING *****" 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. 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,!
  1. I $D(^CIMSORY1) W !!,$C(7),$C(7),"CIMSORY1 GLOBAL EXISTS FROM A PREVIOUS RUN - CANNOT CONTINUE" D XIT Q
  1. GETDATES ;
  1. W !,"Please enter the date range for which the statistical (ORYX) records",!,"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 CIMSBD=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<CIMSBD W !,"Ending date must be greater than or equal to beginning date!" G ED
  1. S CIMSED=Y
  1. S X1=CIMSBD,X2=-1 D C^%DTC S CIMSSD=X
  1. S CIMSERR=0
  1. D CHECK
  1. I $G(CIMSERR) W !!,"Goodbye",! D XIT Q
  1. W !!,"Log entry ",$$NLOG," will be created and records generated for visit",!,"date range ",$$FMTE^XLFDT(CIMSBD)," to ",$$FMTE^XLFDT(CIMSED),".",!
  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 CIMSRUN="NEW",CIMSERR=0
  1. D HOME^%ZIS S CIMSBS=$S('$D(ZTQUEUED):IOBS,1:"")
  1. D GENLOG ;generate new log entry
  1. I $G(CIMSERR) D XIT Q
  1. D QUEUE
  1. I $G(CIMSERR) W !!,"Goodbye, no processing will occur.",! D XIT Q
  1. I $D(CIMSQUE) D XIT Q
  1. ;
  1. PROCESS ;EP - process new run
  1. 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,"")"""
  1. W:'$D(ZTQUEUED) !,"Generating transactions. Counting visits. (1)"
  1. K ^CIMSORY1
  1. S CIMSSD=CIMSSD_".9999"
  1. ;set counters
  1. S (CIMSTOTV,CIMSTERR,CIMSTOTR,CIMSUSED)=0
  1. V ; Run by visit date
  1. F S CIMSSD=$O(^AUPNVSIT("B",CIMSSD)) Q:CIMSSD=""!((CIMSSD\1)>CIMSED) D V1
  1. S DA=CIMSLOG,DIE="^CIMSORYX(",DR=".05///"_CIMSTOTV_";.06///"_CIMSUSED_";.07///"_CIMSTOTR_";.08///P" D ^DIE K DIE,DA,DR ;no error check
  1. S ^CIMSORYX(CIMSLOG,11,0)="^19250.0611^0^0"
  1. S X="",C=0 F S X=$O(CIMSERRT(X)) Q:X="" S C=C+1,^CIMSORYX(CIMSLOG,11,C,0)=X_"^"_CIMSERRT(X)
  1. S DA=CIMSLOG,DIK="^CIMSORYX(" D IX1^DIK K DA,DIK
  1. D WRITEF
  1. D XIT
  1. Q
  1. V1 ;go through each visit on this date
  1. S CIMSVDFN="" F S CIMSVDFN=$O(^AUPNVSIT("B",CIMSSD,CIMSVDFN)) Q:CIMSVDFN'=+CIMSVDFN I $D(^AUPNVSIT(CIMSVDFN,0)) S CIMSVREC=^(0) D PROC
  1. Q
  1. PROC ;
  1. X CIMSCNT
  1. I '$P(CIMSVREC,U,9) S CIMSERRT("ZERO DEP ENTRIES")=$G(CIMSERRT("ZERO DEP ENTRIES"))+1 Q ;no dependent entries
  1. I $P(CIMSVREC,U,11) S CIMSERRT("DELETED VISIT")=$G(CIMSERRT("DELETED VISIT"))+1 Q
  1. I "E"[$P(CIMSVREC,U,7) S CIMSERRT("EVENT VISIT")=$G(CIMSERRT("EVENT VISIT"))+1 Q
  1. S DFN=$P(CIMSVREC,U,5)
  1. Q:'DFN
  1. I $P(^DPT(DFN,0),U)="DEMO,PATIENT" S CIMSERRT("DEMO PATIENT")=$G(CIMSERRT("DEMO PATIENT"))+1 Q
  1. I '$D(^AUPNVPOV("AD",CIMSVDFN)) S CIMSERRT("NO POV")=$G(CIMSERRT("NO POV"))+1 Q
  1. I $$PRIMPROV^APCLV(CIMSVDFN,"I")="" S CIMSERRT("NO PRIM PROV")=$G(CIMSERRT("NO PRIM PROV"))+1 Q ;no primary provider
  1. S Z=$O(^AUPNVINP("AD",CIMSVDFN,0))
  1. I $P(CIMSVREC,U,7)="H",'Z S CIMSERRT("NO V HOSP")=$G(CIMSERRT("NO V HOSP"))+1 Q
  1. 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
  1. S CIMSX=$$VREC^APCLVDR(CIMSVDFN,"MEGA RECORD 1")
  1. I CIMSX=-1!(CIMSX="") S CIMSERRT("STAT RECORD ERROR")=$G(CIMSERRT("STAT RECORD ERROR"))+1 Q
  1. S CIMSX2=$$VREC^APCLVDR(CIMSVDFN,"MEGA RECORD 2")
  1. I CIMSX2=-1!(CIMSX2="") S CIMSERRT("STAT RECORD ERROR")=$G(CIMSERRT("STAT RECORD ERROR"))+1 Q
  1. S CIMSX3=$$VREC^APCLVDR(CIMSVDFN,"MEGA RECORD 3")
  1. I CIMSX3=-1!(CIMSX3="") S CIMSERRT("STAT RECORD ERROR")=$G(CIMSERRT("STAT RECORD ERROR"))+1 Q
  1. S CIMSUSED=CIMSUSED+1,CIMSTOTR=CIMSTOTR+1
  1. S ^CIMSORY1(CIMSTOTR)="AD1^"_CIMSX
  1. S CIMSTOTR=CIMSTOTR+1
  1. S ^CIMSORY1(CIMSTOTR)="AD2^"_CIMSX2
  1. S CIMSTOTR=CIMSTOTR+1
  1. S ^CIMSORY1(CIMSTOTR)="AD3^"_CIMSX3
  1. Q
  1. CHECK ;
  1. 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
  1. 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
  1. 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
  1. Q
  1. RERUN ;EP - rerun old log entry
  1. W:$D(IOF) @IOF
  1. W !!,"Rerun ORYX Backload Visit Set",!
  1. ;GET LOG
  1. S DIC="^CIMSORYX(",DIC(0)="AEMQ" D ^DIC
  1. K DIC,DA,DD,DO,D0
  1. I Y=-1 D XIT Q
  1. S CIMSLOG=+Y
  1. S CIMSBD=$P(^CIMSORYX(CIMSLOG,0),U,3),CIMSED=$P(^(0),U,4),CIMSSD=$$FMADD^XLFDT(CIMSBD,-1),CIMSRUN="REDO"
  1. S CIMS0=^CIMSORYX(CIMSLOG,0)
  1. W !!,"Log entry ",CIMSLOG," will be reprocessed. Visits in the date range ",!,$$FMTE^XLFDT(CIMSBD)," to ",$$FMTE^XLFDT(CIMSED)," will be processed.",!
  1. W !,"The output file created will be called OX"_$P(^AUTTLOC(DUZ(2),0),U,10)_"."_CIMSLOG
  1. W !,"The last time a total of ",$P(CIMS0,U,5)," visits were processed, of which, ",!,$P(CIMS0,U,6)," generated statistical records.",!!
  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. D QUEUE
  1. I $G(CIMSERR) W !!,"Goodbye, no processing will occur.",! D XIT Q
  1. I $D(CIMSQUE) D XIT Q
  1. ;
  1. RERUN1 ;
  1. ;reset log entry
  1. F X=5,6,7 S $P(^CIMSORYX(CIMSLOG,0),U,X)=""
  1. K ^CIMSORYX(CIMSLOG,11) ;kill error multiple
  1. S DA=CIMSLOG,DIE="^CIMSORYX(",DR=".02///"_DT D ^DIE K DIE,DR,DA
  1. S CIMSRUN="REDO",CIMSERR=0
  1. D HOME^%ZIS S CIMSBS=$S('$D(ZTQUEUED):IOBS,1:"")
  1. G PROCESS
  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 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
  1. I CIMSRUN="REDO",$D(DIRUT) S CIMSERR=1 Q
  1. Q
  1. QUEUE1 ;
  1. S ZTRTN=$S(CIMSRUN="NEW":"PROCESS^CIMSRYXD",1:"RERUN1^CIMSRYXD")
  1. S ZTIO="",ZTDTH="",ZTDESC="ORYX BACKLOAD" S ZTSAVE("CIMS*")=""
  1. D ^%ZTLOAD
  1. W !!,$S($D(ZTSK):"Request Queued!!",1:"Request cancelled")
  1. 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
  1. S CIMSQUE=""
  1. S DIE="^CIMSORYX(",DA=CIMSLOG,DR=".15///Q" D ^DIE K DIE,DA,DR
  1. K ZTSK
  1. Q
  1. WRITEF ;EP - write out flat file
  1. I '$D(^CIMSORY1)!(CIMSTOTR=0) W:'$D(ZTQUEUED) !!,"No transactions to send in that date range.",! Q
  1. S XBGL="CIMSORY1"
  1. 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)
  1. S XBF=0,XBQ="N"
  1. D ^XBGSAVE
  1. ;check for error
  1. I XBFLG=-1 S CIMSERR=1 W:'$D(ZTQUEUED) !,$C(7),$C(7),XBFLG(1) Q
  1. K ^CIMSORY1
  1. S DA=CIMSLOG,DIE="^CIMSORYX(",DR=".08///S;.11////OX"_$P(^AUTTLOC(DUZ(2),0),U,10)_"."_CIMSLOG D ^DIE K DA,DIE,DR
  1. K XBGL,XBMED,XBTLE,XBFN,XBF,XBQ,XBFLT
  1. Q
  1. GENLOG ;generate new log entry
  1. W:'$D(ZTQUEUED) !,"Generating New Log entry.."
  1. 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)
  1. D ^DIC K DIC,DLAYGO,DR
  1. I Y<0 W !!,$C(7),$C(7),"Error creating log entry." S CIMSERR=1 Q
  1. S CIMSLOG=+Y
  1. Q
  1. XIT ;exit, eoj cleanup
  1. D EOP
  1. D ^XBFMK
  1. D EN^XBVK("CIMS")
  1. D KILL^AUPNPAT
  1. Q
  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. ;
  1. NLOG() ;get next log
  1. NEW X,L S (X,L)=0 F S X=$O(^CIMSORYX(X)) Q:X'=+X S L=X
  1. Q L+1
  1. SETB ;
  1. 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)=""
  1. Q
  1. SETE ;
  1. 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)=""
  1. Q
  1. KILLB ;
  1. 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)
  1. Q
  1. KILLE ;
  1. 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)
  1. Q
  1. INTRO ;introductory text
  1. ;;This program will generate statistical records (ORYX 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 statistical records
  1. ;;generated. You can view this log by doing an Inquire into file
  1. ;;ORYX BACKLOAD LOG.
  1. ;;
  1. ;;END