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

AZXZVS1.m

Go to the documentation of this file.
AZXZVS1 ;REPORT -VISIT COUNTS BY PROVIDER OF SERVICE [ 05/01/95   1:25 PM ]
 ;06/02/92  JOHN H. LYNCH
 ;
 ;THIS PROGRAM WILL GIVE THE TOTAL NUMBER
 ;OF VISITS BY ALL PROVIDERS OF SERVICE.
 ;
 ;PATIENT NAME     (APC DATA)
 ;DATE OF SERVICE  (APC DATA)
 ;PRIMARY PROVIDER (APC DATA)
 ;CHART NUMBER     (APC DATA)
 ;
MAIN ;AZXZVS1 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 of Service 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^AZXZVS1",ZTDESC="APC Visit Counts by Provider" F G="LDATE","UDATE","LDATE1","UDATE1","PATNUM","INUM2","IO","DEV" S ZTSAVE(G)=""
 ;I  D ^%ZTLOAD Q
 ;S IO=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(^AZXZTMP3(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 ^AZXZTMP3(0)="TMP FILE FOR AZXZVS1 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 ^AZXZTMP3 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 of Service"" report is 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
 
 ;CHECK TO MAKE SURE IT HAS A SPECIFIC PROVIDER
 D CHKSPEC
 
 I FLAG=1,FLAG2 D GETSPEC D GETNAME S Y=DATE D DD^%DT S DATE=Y D WRITETMP
 Q
 
CHKSPEC ;CHECK TO MAKE SURE IT HAS A SPECIFIC PROVIDER
 ;INITIALIZE VARIABLES
 S FLAG2=0              ;1 = SPECIFIC PROVIDER EXISTS;0 = NO SPEC. PROV.
 S SPEC=0               ;SPEC = NUMBER OF SPECIFIC PROVIDERS LISTED
 
 I $D(^AAPCRCDS(INUM2,5,0)) S SPEC=$P(^AAPCRCDS(INUM2,5,0),U,4)
 I SPEC>0 S FLAG2=1 F J=1:1:SPEC S SPECPVDR(J)=$P(^AAPCRCDS(INUM2,5,J,0),U,1)
 Q
 
GETSPEC ;GET SPECIFIC DISCIPLINE CODES (PROVIDER)
 I SPEC>0 F J=1:1:SPEC S INUM3=0,INUM3=$O(^DIC(6,"B",SPECPVDR(J),INUM3)),SPECNUM(J)=$P(^DIC(6,INUM3,0),U,4)
 Q
 
GETNAME ;GET REAL NAME OF SPECIFIC PROVIDER, PROVIDER CLASS NAME AND CODE
 ;(PROVIDER CLASS, PERSON)
 I SPEC>0 F J=1:1:SPEC S PVDRDISC(J)=$P(^DIC(7,SPECPVDR(J),0),U,1),SPECCODE(J)=$P(^DIC(7,SPECPVDR(J),9999999),U,1)
 I SPEC>0 F J=1:1:SPEC S PVDRNAME(J)=$P(^DIC(16,SPECPVDR(J),0),U,1)
 Q
 
WRITETMP ;WRITE DATA OUT TO TEMPORARY GLOBAL (^AZXZTMP3)
 ;WRITE SPECIFIC PROVIDER TO TMP GLOBAL
 I SPEC>0 F J=1:1:SPEC S DFN=DFN+1,^AZXZTMP3(DFN)=PVDRNAME(J)_"^"_PVDRDISC(J)_"^"_SPECCODE(J)
 I SPEC>0 S DFN=DFN-SPEC      ;RESET DFN COUNTER BACK BY SPEC
 I SPEC>0 F J=1:1:SPEC S DFN=DFN+1,^AZXZTMP3("B",PVDRNAME(J),PVDRDISC(J),DFN)=""
 
 K SPECPVDR,SPECNUM,PVDRDISC,PVDRNAME,SPECCODE  ;KILL ARRAYS
 Q
 
GETDATA ;GETDATA GATHERS ALL DATA, CALLS PRINT TO PRINT TO DEVICE
 ;INITIALIZE LOCAL VARIABLES
 S PVDR=""     ;PVDR = PROVIDER IN "B" CROSS-REF
 S DISC=""     ;DISC = PROVIDER DISCIPLINE NAME 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(^AZXZTMP3("B",PVDR)) Q:PVDR=""   S DISC="" F  S DISC=$O(^AZXZTMP3("B",PVDR,DISC)) Q:DISC=""  S INUM=0 F  S INUM=$O(^AZXZTMP3("B",PVDR,DISC,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 ^AZXZTMP3 S DFN=0 G MAIN
 
 ;KILL OFF LOCAL AND TEMPORARY VARIABLES
 K ^AZXZTMP3
 Q
 
SETVARS ;SET CURRENT VALUES OF VARIABLES TO PRINT OUT  
 S PVDRNAME=$P(^AZXZTMP3(INUM),U,1)
 S PVDRDISC=$P(^AZXZTMP3(INUM),U,2)
 S SPECCODE=$P(^AZXZTMP3(INUM),U,3)
 Q
 
PRINT ;PRINT ALL DATA TO DEVICE    
 ;CHECK = ONLY ON FIRST TIME THRU
 I CHECK=1 S PVDRCHK=PVDRNAME,DISCCHK=PVDRDISC,SPECCHK=SPECCODE,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 of Service     From: ",LDATE1,"  To: ",UDATE1,!,SITE,?68,"Page: ",PAGE,!,"********************************************************************************"
 I COUNTER=1 W !!,"Provider of Service",?25,"Provider Discipline",?54,"Code",?64,"Number of Visits",! S COUNTER=COUNTER+7
 I PVDRCHK'=PVDRNAME W !,PVDRCHK,?25,DISCCHK,?54,SPECCHK,?73,$J(COUNTER2,7,0) S SUBTOTAL=SUBTOTAL+COUNTER2,COUNTER2=0,COUNTER=COUNTER+1,PVDRCHK=PVDRNAME,DISCCHK=PVDRDISC,SPECCHK=SPECCODE
  
 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