AZXZVS ;REPORT -AHCCCS VISIT COUNTS BY PROVIDER (APC) [ 05/01/95 1:25 PM ]
;06/02/92 JOHN H. LYNCH
;
;THIS PROGRAM SEARCHES THE MEDICAID ELIGIBLE
;FILE AND PRINTS OUT INFORMATION USING THE PATIENT
;NAME TO PULL INFORMATION FROM THE APC DATA FILE.
;
;PATIENT NAME (MEDICAID ELIGIBLE)
;DATE OF SERVICE (APC DATA)
;PRIMARY PROVIDER (APC DATA)
;MEDICAID NUMBER (MEDICAID ELIGLBLE)
;CHART NUMBER (APC DATA)
;
MAIN ;AZXZVS PROGRAM CONTROL
;INITIALIZE LOCAL VARIABLES
;DELETE COMMENT ONLY IF RUNNING THIS ROUTINE IN PROGRAMMER MODE
D ^XBKSET ;INITIALIZE SYSTEM VARIABLES
W @IOF ;CLEAR SCREEN
W !!!,"APC Visit Counts by Provider Report..."
LBDATE ;READ USER INPUT ON LOWER BOUND DATE
R !!,"Please enter the Lower Date: ",LDATE
;IF "^" QUIT AND RETURN TO PREVIOUS MENU
I (LDATE="^")!(LDATE="") Q
;IF "?" GIVE HELP AND RETURN TO LDATE PROMPT
I (LDATE="?") W !!,"Enter Lower Boundary Date to search on for report." G LBDATE
I (LDATE="??") W !!,"Enter Lower Boundary Date to search on for report."
I (LDATE="??") W !!,"Date Formats:",?15,"MM/DD/YY",?29,"- STANDARD",!,?15,"T",?29,"- TODAY",!,?15,"T-###",?29,"- TODAY MINUS ### DAYS",!,?15,"NOW",?29,"- CURRENT DATE",!,?15,"MON ##, ####",?29,"- MON DAY, YEAR" G LBDATE
I (LDATE="???") W !!,"Enter Lower Boundary Date to search on for report.",!!,"Date Examples:",?15,"Format",?29,"- Example User Input"
I (LDATE="???") W !!,?15,"MM/DD/YY",?29,"- 01/01/92",!,?15,"T",?29,"- T",!,?15,"T-###",?29,"- T-10",!,?15,"NOW",?29,"- NOW",!,?15,"MON ##, ####",?29,"- SEP 01, 1992" G LBDATE
;CHECK TO SEE IF A VALID DATE HAS BEEN ENTERED
I (LDATE?1.2N0.1"/"1.2N0.1"/"0.4N)!(LDATE?1"T"1"-"1.3N)!(LDATE="T")!(LDATE="NOW")!(LDATE?3A1" "1.2N1","1" "4N) G LBDATE2
W !!,"Illegal date; check format and re-enter lower boundary date.",!,*7
G LBDATE
LBDATE2 ;CONVERT LDATE TO NEW FORMATS
S X=LDATE ;X = DATE TO CONVERT USING ^%DT
D CONVERT ;CONVERT USER DATE TO FILEMAN DATE FORMAT
;DATE FORMAT WAS ILLEGAL
I Y<1 W !!,"Illegal date; check format and re-enter lower boundary date.",!,*7 G LBDATE
S LDATE=Y
S Y=LDATE D DD^%DT S LDATE1=Y ;LDATE1 = DATE IN USER FORMAT
UBDATE ;READ USER INPUT ON UPPER BOUND DATE
R !!,"Please enter the Upper Date: ",UDATE
;IF "^" RETURN TO PREVIOUS PROMPT (LBDATE)
I (UDATE="^")!(UDATE="") G LBDATE
;IF "?" GIVE HELP AND RETURN TO UDATE PROMPT
I (UDATE="?") W !!,"Enter Upper Boundary Date to search on for report." G UBDATE
I (UDATE="??") W !!,"Enter Upper Boundary Date to search on for report."
I (UDATE="??") W !!,"Date Formats:",?15,"MM/DD/YY",?29,"- STANDARD",!,?15,"T",?29,"- TODAY",!,?15,"T-###",?29,"- TODAY MINUS ### DAYS",!,?15,"NOW",?29,"- CURRENT DATE",!,?15,"MON ##, ####",?29,"- MON DAY, YEAR" G UBDATE
I (UDATE="???") W !!,"Enter Upper Boundary Date to search on for report.",!!,"Date Examples:",?15,"Format",?29,"- Example User Input"
I (UDATE="???") W !!,?15,"MM/DD/YY",?29,"- 01/01/92",!,?15,"T",?29,"- T",!,?15,"T-###",?29,"- T-10",!,?15,"NOW",?29,"- NOW",!,?15,"MON ##, ####",?29,"- SEP 01, 1992" G UBDATE
;CHECK TO SEE IF A VALID DATE HAS BEEN ENTERED
I (UDATE?1.2N0.1"/"1.2N0.1"/"0.4N)!(UDATE?1"T"1"-"1.3N)!(UDATE="T")!(UDATE="NOW")!(UDATE?3A1" "1.2N1","1" "4N) G UBDATE2
W !!,"Illegal date; check format and re-enter upper boundary date.",!,*7
G UBDATE
UBDATE2 ;CONVERT UDATE TO NEW FORMATS
S X=UDATE ;X = DATE TO CONVERT USING ^%DT
D CONVERT ;CONVERT USER DATE TO FILEMAN DATE FORMAT
W ! ;GIVE AN EXTRA LINE FEED
;DATE FORMAT WAS ILLEGAL
I Y<1 W !!,"Illegal date; check format and re-enter upper boundary date.",!,*7 G UBDATE
S UDATE=Y
S Y=UDATE D DD^%DT S UDATE1=Y ;UDATE1 = DATE IN USER FORMAT
;CHECK TO SEE IF UDATE > LDATE
I (UDATE<LDATE) W !!,"Upper boundary date must be greater than or equal to lower boundary date.",!,*7 G UBDATE
D GETPNUM ;RETRIEVE DATA FROM MEDICAID ELIGIBLE
;KILL LOCAL VARIABLES
Q
GETPNUM ;RETRIEVE DATA FROM "MEDICAID ELIGIBLE"
;INITIALIZE LOCAL VARIABLES
S DEV=$I ;ORIG. DEVICE
S PATNUM=0 ;PATIENT NUMBER
S INUM2=0
;CALL DEVICE
;IS DEVICE VALID (NO, ABORT REPORT)
;S %ZIS="FQMN" D ^%ZIS K %ZIS ;CHECK FOR DEVICE CHARACTERISTICS
;I (IO="")!(IO="^") W !,*7,"No device specified." H 2 G MAIN
;I IO=$I,$D(IO("Q")) R !,"Do you really want me to queue to this device? NO//",YN I ("Nn"[$E(X,1))!(YN="") K IO("Q") G GETPNUM
;I $D(IO("Q")) K IO("Q") S ZTRTN="SETUP^AZXZVS",ZTDESC="APC Visit Counts by Provider" F G="LDATE","UDATE","LDATE1","UDATE1","PATNUM","INUM2","IO","DEV" S ZTSAVE(G)=""
;I D ^%ZTLOAD Q
;S IOP=IO D ^%ZIS I 'POP G SETUP
;W !,"Device ",IO," busy." G GETPNUM
D ^%ZIS U IO
SETUP ;SETUP FOR CALL FROM TASKMAN (OR DIRECT)
;CHECK TO MAKE SURE REPORT ISN'T ALREADY RUNNING SOMEWHERE ELSE
I $D(^AZXZTMP2(0)) D ERR Q
;INITIALIZE LOCAL VARIABLES
S DFN=0 ;INTERNAL ENTRY NUMBER (COUNTER)
S COUNTER=1 ;LINES PER PAGE COUNTER
S COUNTER2=0 ;TOTAL # OF VISITS COUNTER
S PAGE=0 ;INITIALIZE PAGE #
S CHECK=1 ;INITIALIZE CHECK VARIABLE (PVDRCHK=PVDRNAME?)
S RET="" ;RET = IF IO=DEV CHECK FOR "^" TO EXIT
;SET 0-NODE FOR TMP GLOBAL (^AZXZTMP)
S ^AZXZTMP2(0)="TMP FILE FOR AZXZVS PROGRAM^NEEDS TO BE DELETED IF A PROGRAM ERROR OCCURS"
F S INUM2=0,PATNUM=$O(^AAPCRCDS("B",PATNUM)) Q:PATNUM="" F S INUM2=$O(^AAPCRCDS("B",PATNUM,INUM2)) Q:INUM2="" D CHKDATE
;CALL GETDATA
D GETDATA ;THE DEVICE DECIDES WHERE THE DATA GOES
;CLOSE DEVICE
X ^%ZIS("C")
Q
ERR ;THE ^AZXZTMP2 GLOBAL EXISTS (ERROR HAS OCCURRED OR
;THE PROGRAM IS CURRENTLY RUNNING ALREADY!!!
I IO=DEV W @IOF ;CLEAR SCREEN
W !!!,"********************************************************************************",!!,"The ""APC Visit Counts by Provider"" report is already currently running."
W !!,"If you find that the report is not currently running..."
W !,"please contact the MIS Manager immediately, a program error"
W !,"may have occured."
W !!,"********************************************************************************"
I IO=DEV R !!,"Press return to continue...",RET
I IO'=DEV W # ;SEND FORM FEED
Q
CONVERT ;CONVERT USER DATES TO FILEMAN DATE FORMAT
;SET LOCAL VARIABLES
S %DT="EX" ;E=ECHO ANSWER;X=EXACT DATE
D ^%DT ;VALUE RETURNED IN Y
Q
CHKDATE ;CHECK FOR A VALID DATE (WITHIN LDATE & UDATE)
;INITIALIZE LOCAL VARIABLES
S FLAG=0 ;1 = VALID DATE, 0 = INVALID DATE
S DATE=$P(^AAPCRCDS(INUM2,0),U,3)
;SET FLAG=1 IF DATE IS WITHING LDATE & UDATE (DO WRITETMP)
I (DATE>(LDATE-1))&(DATE<(UDATE+1)) S FLAG=1
I FLAG=1 D GETAPC D GETPVDR S Y=DATE D DD^%DT S DATE=Y D WRITETMP
Q
GETAPC ;RETRIEVE DATA FROM "APC DATA"
;INITIALIZE LOCAL VARIABLES
S OTHER=0 ;OTHER PROVIDERS?
S PVDRNUM=$P(^AAPCRCDS(INUM2,0),U,14) ;PROVIDER NUMBER
;OTHER PROVIDERS?
I $D(^AAPCRCDS(INUM2,1,0)) S OTHER=$P(^AAPCRCDS(INUM2,1,0),U,4)
;SET OTHER PROVIDER NUMBERS
I OTHER>0 F I=1:1:OTHER S OTHERNUM(I)=$P(^AAPCRCDS(INUM2,1,I,0),U,1)
Q
GETPVDR ;GET THE ACTUAL PROVIDER NAME USING PROVIDER FILE (PVDRNUM)
;ALSO, GET THE OTHER PROVIDER NAMES USING PROVIDER FILE.
S PVDRNAME=$P(^DIC(7,PVDRNUM,0),U,1)
I OTHER>0 F I=1:1:OTHER S OTHRNAME(I)=$P(^DIC(7,OTHERNUM(I),0),U,1)
Q
WRITETMP ;WRITE DATA OUT TO TEMPORARY GLOBAL (^AZXZTMP2)
S DFN=DFN+1 ;INTERNAL ENTRY NUMBER (COUNTER)
;WRITE PRIMARY PROVIDER TO TMP GLOBAL
S ^AZXZTMP2(DFN)=PVDRNAME_"^"_PVDRNUM_"^"_PATNUM_"^"_DATE
S ^AZXZTMP2("B",PVDRNAME,PATNUM,DFN)=""
;WRITE OTHER PROVIDERS TO TMP GLOBAL
I OTHER>0 F I=1:1:OTHER S DFN=DFN+1,^AZXZTMP2(DFN)=OTHRNAME(I)_"^"_OTHERNUM(I)_"^"_PATNUM_"^"_DATE
I OTHER>0 S DFN=DFN-OTHER
I OTHER>0 F I=1:1:OTHER S DFN=DFN+1,^AZXZTMP2("B",OTHRNAME(I),PATNUM,DFN)=""
K OTHERNUM,OTHRNAME ;KILL OTHERNUM,OTHRNAME ARRAY
Q
GETDATA ;GETDATA GATHERS ALL DATA, CALLS PRINT TO PRINT TO DEVICE
;INITIALIZE LOCAL VARIABLES
S PVDR="" ;PVDR = PROVIDER IN "B" CROSS-REF
S PAT="" ;PAT = PATIENT IN "B" CROSS-REF
S INUM=0 ;INUM = INTERNAL ENTRY # IN "B" CROSS-REF
S SUBTOTAL=0 ;SUBTOTAL = SUBTOTAL OF # OF VISITS PER PAGE
S TOTAL=0 ;TOTAL = TOTAL # OF VISITS PER PROVIDER TYPE
F S PVDR=$O(^AZXZTMP2("B",PVDR)) Q:PVDR="" S PAT="" F S PAT=$O(^AZXZTMP2("B",PVDR,PAT)) Q:PAT="" S INUM=0 F S INUM=$O(^AZXZTMP2("B",PVDR,PAT,INUM)) Q:'INUM D SETVARS D PRINT I RET="^" S PVDR="ZZZZZZZZ" Q
I RET="",SUBTOTAL W !,?73,"_______",!,?64,"Subtotal:",?73,$J(SUBTOTAL,7,0)
I RET="",TOTAL S TOTAL=TOTAL+SUBTOTAL W !,?73,"_______",!,?67,"Total:",?73,$J(TOTAL,7,0)
I IO=DEV,RET="" R !,"Press return to continue...",RET W @IOF
R !!,"Do you want to print another report? YES// ",YN I ("Yy"[$E(X,1))!(YN="") K ^AZXZTMP2 S DFN=0 G MAIN
;KILL OFF LOCAL AND TEMPORARY VARIABLES
K ^AZXZTMP2
Q
SETVARS ;SET CURRENT VALUES OF VARIABLES TO PRINT OUT
S PVDRNAME=$P(^AZXZTMP2(INUM),U,1)
S NUM=$P(^AZXZTMP2(INUM),U,2)
S PVDRNUM=$P(^DIC(7,NUM,9999999),U,1)
Q
PRINT ;PRINT ALL DATA TO DEVICE
;CHECK = ONLY ON FIRST TIME THRU
I CHECK=1 S PVDRCHK=PVDRNAME,PNUMCHK=PVDRNUM,SITE=$P(^DIC(4,DUZ(2),0),U,1)
;CLEAR SCREEN IF IO=DEV, 1ST TIME
I (CHECK=1),(IO=DEV) W @IOF S CHECK=CHECK+1
I COUNTER=1 W !,"********************************************************************************" S PAGE=PAGE+1
I COUNTER=1 W !,"APC Visit Counts by Provider From: ",LDATE1," To: ",UDATE1,!,SITE,?68,"Page: ",PAGE,!,"********************************************************************************"
I COUNTER=1 W !!,"Provider Discipline",?40,"Discipline Code",?64,"Number of Visits",! S COUNTER=COUNTER+7
I PVDRCHK'=PVDRNAME W !,PVDRCHK,?40,PNUMCHK,?73,$J(COUNTER2,7,0) S SUBTOTAL=SUBTOTAL+COUNTER2,COUNTER2=0,COUNTER=COUNTER+1,PVDRCHK=PVDRNAME,PNUMCHK=PVDRNUM
S COUNTER2=COUNTER2+1 ;INCREMENT # OF VISITS COUNTER
I IO=DEV,COUNTER>18 W !,?73,"_______",!,?64,"Subtotal:",?73,$J(SUBTOTAL,7,0) R !,"Press return to continue...",RET S COUNTER=1,TOTAL=TOTAL+SUBTOTAL,SUBTOTAL=0 W @IOF
I IO'=DEV,COUNTER>57 W !,?73,"_______",!,?64,"Subtotal:",?73,$J(SUBTOTAL,7,0) S COUNTER=1,TOTAL=TOTAL+SUBTOTAL,SUBTOTAL=0 W #
Q
AZXZVS ;REPORT -AHCCCS VISIT COUNTS BY PROVIDER (APC) [ 05/01/95 1:25 PM ]
+1 ;06/02/92 JOHN H. LYNCH
+2 ;
+3 ;THIS PROGRAM SEARCHES THE MEDICAID ELIGIBLE
+4 ;FILE AND PRINTS OUT INFORMATION USING THE PATIENT
+5 ;NAME TO PULL INFORMATION FROM THE APC DATA FILE.
+6 ;
+7 ;PATIENT NAME (MEDICAID ELIGIBLE)
+8 ;DATE OF SERVICE (APC DATA)
+9 ;PRIMARY PROVIDER (APC DATA)
+10 ;MEDICAID NUMBER (MEDICAID ELIGLBLE)
+11 ;CHART NUMBER (APC DATA)
+12 ;
MAIN ;AZXZVS PROGRAM CONTROL
+1 ;INITIALIZE LOCAL VARIABLES
+2 +3 ;DELETE COMMENT ONLY IF RUNNING THIS ROUTINE IN PROGRAMMER MODE
+4 ;INITIALIZE SYSTEM VARIABLES
DO ^XBKSET
+5 +6 ;CLEAR SCREEN
WRITE @IOF
+7 WRITE !!!,"APC Visit Counts by Provider Report..."
LBDATE ;READ USER INPUT ON LOWER BOUND DATE
+1 READ !!,"Please enter the Lower Date: ",LDATE
+2 ;IF "^" QUIT AND RETURN TO PREVIOUS MENU
+3 IF (LDATE="^")!(LDATE="")
QUIT
+4 +5 ;IF "?" GIVE HELP AND RETURN TO LDATE PROMPT
+6 IF (LDATE="?")
WRITE !!,"Enter Lower Boundary Date to search on for report."
GOTO LBDATE
+7 IF (LDATE="??")
WRITE !!,"Enter Lower Boundary Date to search on for report."
+8 IF (LDATE="??")
WRITE !!,"Date Formats:",?15,"MM/DD/YY",?29,"- STANDARD",!,?15,"T",?29,"- TODAY",!,?15,"T-###",?29,"- TODAY MINUS ### DAYS",!,?15,"NOW",?29,"- CURRENT DATE",!,?15,"MON ##, ####",?29,"- MON DAY, YEAR"
GOTO LBDATE
+9 IF (LDATE="???")
WRITE !!,"Enter Lower Boundary Date to search on for report.",!!,"Date Examples:",?15,"Format",?29,"- Example User Input"
+10 IF (LDATE="???")
WRITE !!,?15,"MM/DD/YY",?29,"- 01/01/92",!,?15,"T",?29,"- T",!,?15,"T-###",?29,"- T-10",!,?15,"NOW",?29,"- NOW",!,?15,"MON ##, ####",?29,"- SEP 01, 1992"
GOTO LBDATE
+11 +12 ;CHECK TO SEE IF A VALID DATE HAS BEEN ENTERED
+13 IF (LDATE?1.2N0.1"/"1.2N0.1"/"0.4N)!(LDATE?1"T"1"-"1.3N)!(LDATE="T")!(LDATE="NOW")!(LDATE?3A1" "1.2N1","1" "4N)
GOTO LBDATE2
+14 WRITE !!,"Illegal date; check format and re-enter lower boundary date.",!,*7
+15 GOTO LBDATE
+16 LBDATE2 ;CONVERT LDATE TO NEW FORMATS
+1 ;X = DATE TO CONVERT USING ^%DT
SET X=LDATE
+2 ;CONVERT USER DATE TO FILEMAN DATE FORMAT
DO CONVERT
+3 ;DATE FORMAT WAS ILLEGAL
+4 IF Y<1
WRITE !!,"Illegal date; check format and re-enter lower boundary date.",!,*7
GOTO LBDATE
+5 SET LDATE=Y
+6 ;LDATE1 = DATE IN USER FORMAT
SET Y=LDATE
DO DD^%DT
SET LDATE1=Y
+7 UBDATE ;READ USER INPUT ON UPPER BOUND DATE
+1 READ !!,"Please enter the Upper Date: ",UDATE
+2 ;IF "^" RETURN TO PREVIOUS PROMPT (LBDATE)
+3 IF (UDATE="^")!(UDATE="")
GOTO LBDATE
+4 ;IF "?" GIVE HELP AND RETURN TO UDATE PROMPT
+5 IF (UDATE="?")
WRITE !!,"Enter Upper Boundary Date to search on for report."
GOTO UBDATE
+6 IF (UDATE="??")
WRITE !!,"Enter Upper Boundary Date to search on for report."
+7 IF (UDATE="??")
WRITE !!,"Date Formats:",?15,"MM/DD/YY",?29,"- STANDARD",!,?15,"T",?29,"- TODAY",!,?15,"T-###",?29,"- TODAY MINUS ### DAYS",!,?15,"NOW",?29,"- CURRENT DATE",!,?15,"MON ##, ####",?29,"- MON DAY, YEAR"
GOTO UBDATE
+8 IF (UDATE="???")
WRITE !!,"Enter Upper Boundary Date to search on for report.",!!,"Date Examples:",?15,"Format",?29,"- Example User Input"
+9 IF (UDATE="???")
WRITE !!,?15,"MM/DD/YY",?29,"- 01/01/92",!,?15,"T",?29,"- T",!,?15,"T-###",?29,"- T-10",!,?15,"NOW",?29,"- NOW",!,?15,"MON ##, ####",?29,"- SEP 01, 1992"
GOTO UBDATE
+10 +11 ;CHECK TO SEE IF A VALID DATE HAS BEEN ENTERED
+12 IF (UDATE?1.2N0.1"/"1.2N0.1"/"0.4N)!(UDATE?1"T"1"-"1.3N)!(UDATE="T")!(UDATE="NOW")!(UDATE?3A1" "1.2N1","1" "4N)
GOTO UBDATE2
+13 WRITE !!,"Illegal date; check format and re-enter upper boundary date.",!,*7
+14 GOTO UBDATE
+15 UBDATE2 ;CONVERT UDATE TO NEW FORMATS
+1 ;X = DATE TO CONVERT USING ^%DT
SET X=UDATE
+2 ;CONVERT USER DATE TO FILEMAN DATE FORMAT
DO CONVERT
+3 ;GIVE AN EXTRA LINE FEED
WRITE !
+4 ;DATE FORMAT WAS ILLEGAL
+5 IF Y<1
WRITE !!,"Illegal date; check format and re-enter upper boundary date.",!,*7
GOTO UBDATE
+6 SET UDATE=Y
+7 ;UDATE1 = DATE IN USER FORMAT
SET Y=UDATE
DO DD^%DT
SET UDATE1=Y
+8 +9 ;CHECK TO SEE IF UDATE > LDATE
+10 IF (UDATE<LDATE)
WRITE !!,"Upper boundary date must be greater than or equal to lower boundary date.",!,*7
GOTO UBDATE
+11 +12 ;RETRIEVE DATA FROM MEDICAID ELIGIBLE
DO GETPNUM
+13 +14 ;KILL LOCAL VARIABLES
+15 QUIT
+16 GETPNUM ;RETRIEVE DATA FROM "MEDICAID ELIGIBLE"
+1 ;INITIALIZE LOCAL VARIABLES
+2 ;ORIG. DEVICE
SET DEV=$IO
+3 ;PATIENT NUMBER
SET PATNUM=0
+4 SET INUM2=0
+5 +6 ;CALL DEVICE
+7 ;IS DEVICE VALID (NO, ABORT REPORT)
+8 ;S %ZIS="FQMN" D ^%ZIS K %ZIS ;CHECK FOR DEVICE CHARACTERISTICS
+9 ;I (IO="")!(IO="^") W !,*7,"No device specified." H 2 G MAIN
+10 +11 ;I IO=$I,$D(IO("Q")) R !,"Do you really want me to queue to this device? NO//",YN I ("Nn"[$E(X,1))!(YN="") K IO("Q") G GETPNUM
+12 ;I $D(IO("Q")) K IO("Q") S ZTRTN="SETUP^AZXZVS",ZTDESC="APC Visit Counts by Provider" F G="LDATE","UDATE","LDATE1","UDATE1","PATNUM","INUM2","IO","DEV" S ZTSAVE(G)=""
+13 ;I D ^%ZTLOAD Q
+14 ;S IOP=IO D ^%ZIS I 'POP G SETUP
+15 ;W !,"Device ",IO," busy." G GETPNUM
+16 DO ^%ZIS
USE IO
+17 SETUP ;SETUP FOR CALL FROM TASKMAN (OR DIRECT)
+1 +2 ;CHECK TO MAKE SURE REPORT ISN'T ALREADY RUNNING SOMEWHERE ELSE
+3 IF $DATA(^AZXZTMP2(0))
DO ERR
QUIT
+4 +5 ;INITIALIZE LOCAL VARIABLES
+6 ;INTERNAL ENTRY NUMBER (COUNTER)
SET DFN=0
+7 ;LINES PER PAGE COUNTER
SET COUNTER=1
+8 ;TOTAL # OF VISITS COUNTER
SET COUNTER2=0
+9 ;INITIALIZE PAGE #
SET PAGE=0
+10 ;INITIALIZE CHECK VARIABLE (PVDRCHK=PVDRNAME?)
SET CHECK=1
+11 ;RET = IF IO=DEV CHECK FOR "^" TO EXIT
SET RET=""
+12 +13 ;SET 0-NODE FOR TMP GLOBAL (^AZXZTMP)
+14 SET ^AZXZTMP2(0)="TMP FILE FOR AZXZVS PROGRAM^NEEDS TO BE DELETED IF A PROGRAM ERROR OCCURS"
+15 +16 FOR
SET INUM2=0
SET PATNUM=$ORDER(^AAPCRCDS("B",PATNUM))
IF PATNUM=""
QUIT
FOR
SET INUM2=$ORDER(^AAPCRCDS("B",PATNUM,INUM2))
IF INUM2=""
QUIT
DO CHKDATE
+17 +18 ;CALL GETDATA
+19 ;THE DEVICE DECIDES WHERE THE DATA GOES
DO GETDATA
+20 +21 ;CLOSE DEVICE
+22 XECUTE ^%ZIS("C")
+23 QUIT
+24 ERR ;THE ^AZXZTMP2 GLOBAL EXISTS (ERROR HAS OCCURRED OR
+1 ;THE PROGRAM IS CURRENTLY RUNNING ALREADY!!!
+2 ;CLEAR SCREEN
IF IO=DEV
WRITE @IOF
+3 WRITE !!!,"********************************************************************************",!!,"The ""APC Visit Counts by Provider"" report is already currently running."
+4 WRITE !!,"If you find that the report is not currently running..."
+5 WRITE !,"please contact the MIS Manager immediately, a program error"
+6 WRITE !,"may have occured."
+7 WRITE !!,"********************************************************************************"
+8 IF IO=DEV
READ !!,"Press return to continue...",RET
+9 ;SEND FORM FEED
IF IO'=DEV
WRITE #
+10 QUIT
+11 CONVERT ;CONVERT USER DATES TO FILEMAN DATE FORMAT
+1 ;SET LOCAL VARIABLES
+2 ;E=ECHO ANSWER;X=EXACT DATE
SET %DT="EX"
+3 ;VALUE RETURNED IN Y
DO ^%DT
+4 QUIT
+5 CHKDATE ;CHECK FOR A VALID DATE (WITHIN LDATE & UDATE)
+1 ;INITIALIZE LOCAL VARIABLES
+2 ;1 = VALID DATE, 0 = INVALID DATE
SET FLAG=0
+3 SET DATE=$PIECE(^AAPCRCDS(INUM2,0),U,3)
+4 +5 ;SET FLAG=1 IF DATE IS WITHING LDATE & UDATE (DO WRITETMP)
+6 IF (DATE>(LDATE-1))&(DATE<(UDATE+1))
SET FLAG=1
+7 IF FLAG=1
DO GETAPC
DO GETPVDR
SET Y=DATE
DO DD^%DT
SET DATE=Y
DO WRITETMP
+8 QUIT
+9 GETAPC ;RETRIEVE DATA FROM "APC DATA"
+1 ;INITIALIZE LOCAL VARIABLES
+2 ;OTHER PROVIDERS?
SET OTHER=0
+3 ;PROVIDER NUMBER
SET PVDRNUM=$PIECE(^AAPCRCDS(INUM2,0),U,14)
+4 +5 ;OTHER PROVIDERS?
+6 IF $DATA(^AAPCRCDS(INUM2,1,0))
SET OTHER=$PIECE(^AAPCRCDS(INUM2,1,0),U,4)
+7 +8 ;SET OTHER PROVIDER NUMBERS
+9 IF OTHER>0
FOR I=1:1:OTHER
SET OTHERNUM(I)=$PIECE(^AAPCRCDS(INUM2,1,I,0),U,1)
+10 QUIT
+11 GETPVDR ;GET THE ACTUAL PROVIDER NAME USING PROVIDER FILE (PVDRNUM)
+1 ;ALSO, GET THE OTHER PROVIDER NAMES USING PROVIDER FILE.
+2 SET PVDRNAME=$PIECE(^DIC(7,PVDRNUM,0),U,1)
+3 IF OTHER>0
FOR I=1:1:OTHER
SET OTHRNAME(I)=$PIECE(^DIC(7,OTHERNUM(I),0),U,1)
+4 QUIT
+5 WRITETMP ;WRITE DATA OUT TO TEMPORARY GLOBAL (^AZXZTMP2)
+1 ;INTERNAL ENTRY NUMBER (COUNTER)
SET DFN=DFN+1
+2 ;WRITE PRIMARY PROVIDER TO TMP GLOBAL
+3 SET ^AZXZTMP2(DFN)=PVDRNAME_"^"_PVDRNUM_"^"_PATNUM_"^"_DATE
+4 SET ^AZXZTMP2("B",PVDRNAME,PATNUM,DFN)=""
+5 +6 ;WRITE OTHER PROVIDERS TO TMP GLOBAL
+7 IF OTHER>0
FOR I=1:1:OTHER
SET DFN=DFN+1
SET ^AZXZTMP2(DFN)=OTHRNAME(I)_"^"_OTHERNUM(I)_"^"_PATNUM_"^"_DATE
+8 IF OTHER>0
SET DFN=DFN-OTHER
+9 IF OTHER>0
FOR I=1:1:OTHER
SET DFN=DFN+1
SET ^AZXZTMP2("B",OTHRNAME(I),PATNUM,DFN)=""
+10 ;KILL OTHERNUM,OTHRNAME ARRAY
KILL OTHERNUM,OTHRNAME
+11 QUIT
+12 GETDATA ;GETDATA GATHERS ALL DATA, CALLS PRINT TO PRINT TO DEVICE
+1 ;INITIALIZE LOCAL VARIABLES
+2 ;PVDR = PROVIDER IN "B" CROSS-REF
SET PVDR=""
+3 ;PAT = PATIENT IN "B" CROSS-REF
SET PAT=""
+4 ;INUM = INTERNAL ENTRY # IN "B" CROSS-REF
SET INUM=0
+5 ;SUBTOTAL = SUBTOTAL OF # OF VISITS PER PAGE
SET SUBTOTAL=0
+6 ;TOTAL = TOTAL # OF VISITS PER PROVIDER TYPE
SET TOTAL=0
+7 +8 FOR
SET PVDR=$ORDER(^AZXZTMP2("B",PVDR))
IF PVDR=""
QUIT
SET PAT=""
FOR
SET PAT=$ORDER(^AZXZTMP2("B",PVDR,PAT))
IF PAT=""
QUIT
SET INUM=0
FOR
SET INUM=$ORDER(^AZXZTMP2("B",PVDR,PAT,INUM))
IF 'INUM
QUIT
DO SETVARS
DO PRINT
IF RET="^"
SET PVDR="ZZZZZZZZ"
QUIT
+9 IF RET=""
IF SUBTOTAL
WRITE !,?73,"_______",!,?64,"Subtotal:",?73,$JUSTIFY(SUBTOTAL,7,0)
+10 IF RET=""
IF TOTAL
SET TOTAL=TOTAL+SUBTOTAL
WRITE !,?73,"_______",!,?67,"Total:",?73,$JUSTIFY(TOTAL,7,0)
+11 IF IO=DEV
IF RET=""
READ !,"Press return to continue...",RET
WRITE @IOF
+12 READ !!,"Do you want to print another report? YES// ",YN
IF ("Yy"[$EXTRACT(X,1))!(YN="")
KILL ^AZXZTMP2
SET DFN=0
GOTO MAIN
+13 +14 ;KILL OFF LOCAL AND TEMPORARY VARIABLES
+15 KILL ^AZXZTMP2
+16 QUIT
+17 SETVARS ;SET CURRENT VALUES OF VARIABLES TO PRINT OUT
+1 SET PVDRNAME=$PIECE(^AZXZTMP2(INUM),U,1)
+2 SET NUM=$PIECE(^AZXZTMP2(INUM),U,2)
+3 SET PVDRNUM=$PIECE(^DIC(7,NUM,9999999),U,1)
+4 QUIT
+5 PRINT ;PRINT ALL DATA TO DEVICE
+1 ;CHECK = ONLY ON FIRST TIME THRU
+2 IF CHECK=1
SET PVDRCHK=PVDRNAME
SET PNUMCHK=PVDRNUM
SET SITE=$PIECE(^DIC(4,DUZ(2),0),U,1)
+3 +4 ;CLEAR SCREEN IF IO=DEV, 1ST TIME
+5 IF (CHECK=1)
IF (IO=DEV)
WRITE @IOF
SET CHECK=CHECK+1
+6 +7 IF COUNTER=1
WRITE !,"********************************************************************************"
SET PAGE=PAGE+1
+8 IF COUNTER=1
WRITE !,"APC Visit Counts by Provider From: ",LDATE1," To: ",UDATE1,!,SITE,?68,"Page: ",PAGE,!,"********************************************************************************"
+9 IF COUNTER=1
WRITE !!,"Provider Discipline",?40,"Discipline Code",?64,"Number of Visits",!
SET COUNTER=COUNTER+7
+10 IF PVDRCHK'=PVDRNAME
WRITE !,PVDRCHK,?40,PNUMCHK,?73,$JUSTIFY(COUNTER2,7,0)
SET SUBTOTAL=SUBTOTAL+COUNTER2
SET COUNTER2=0
SET COUNTER=COUNTER+1
SET PVDRCHK=PVDRNAME
SET PNUMCHK=PVDRNUM
+11 +12 ;INCREMENT # OF VISITS COUNTER
SET COUNTER2=COUNTER2+1
+13 +14 IF IO=DEV
IF COUNTER>18
WRITE !,?73,"_______",!,?64,"Subtotal:",?73,$JUSTIFY(SUBTOTAL,7,0)
READ !,"Press return to continue...",RET
SET COUNTER=1
SET TOTAL=TOTAL+SUBTOTAL
SET SUBTOTAL=0
WRITE @IOF
+15 IF IO'=DEV
IF COUNTER>57
WRITE !,?73,"_______",!,?64,"Subtotal:",?73,$JUSTIFY(SUBTOTAL,7,0)
SET COUNTER=1
SET TOTAL=TOTAL+SUBTOTAL
SET SUBTOTAL=0
WRITE #
+16 QUIT