| 1 | IBAECM3 ;WOIFO/SS-LTC PHASE 2 MONTHLY JOB PART 3 ; 20-FEB-02
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**176**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | MJ1ST ;entry for the first Monthly Calculation Process
 | 
|---|
| 6 |  N IBMDS1
 | 
|---|
| 7 |  ;------ variables
 | 
|---|
| 8 |  N IBMJ1ST S IBMJ1ST="MJ1ST" ;to identify 1st MJ in IBAECU4
 | 
|---|
| 9 |  N IBPRMNTH S IBPRMNTH=$$PREVMNTH^IBAECM1() ;last day of previous month
 | 
|---|
| 10 |  N IBCLKAD1 ; variable to return back from PROCPAT info for clock adjustment
 | 
|---|
| 11 |  N IBDFN,IBMNS,IBVAR
 | 
|---|
| 12 |  N IBCLKIE1
 | 
|---|
| 13 |  N IBCLKDAT ;clock data
 | 
|---|
| 14 |  N IBSTRTD ;EFFECTIVE DATE
 | 
|---|
| 15 |  S (IBMNS,IBMDS1)=""
 | 
|---|
| 16 |  S IBSTRTD=$$BILDATE^IBAECN1()
 | 
|---|
| 17 |  K ^TMP($J,"IBMJERR")
 | 
|---|
| 18 |  K ^TMP($J,"IBMJINP")
 | 
|---|
| 19 |  K ^TMP($J,"IBMJOUT")
 | 
|---|
| 20 |  ;prepare arrays for months since the effective date
 | 
|---|
| 21 |  D PRMONTHS(.IBMNS,IBPRMNTH)
 | 
|---|
| 22 |  ;go thru all patients in #351.81
 | 
|---|
| 23 |  S IBDFN1=0
 | 
|---|
| 24 |  ;for each patient in file 351.81
 | 
|---|
| 25 |  F  S IBDFN1=$O(^IBA(351.81,"C",IBDFN1)) Q:+IBDFN1=0  D
 | 
|---|
| 26 |  . S IBCLKIE1=0,IBERR=""
 | 
|---|
| 27 |  . F  S IBCLKIE1=+$O(^IBA(351.81,"C",IBDFN1,IBCLKIE1)) Q:+IBCLKIE1=0  D
 | 
|---|
| 28 |  . . S IBCLKDAT=^IBA(351.81,IBCLKIE1,0)
 | 
|---|
| 29 |  . . ; quit if STATUS'=OPEN
 | 
|---|
| 30 |  . . Q:$P(IBCLKDAT,"^",5)'=1
 | 
|---|
| 31 |  . . ; quit if CURRENT EVENTS DATE="" i.e. no LTC events happend 
 | 
|---|
| 32 |  . . ; this month for the patient
 | 
|---|
| 33 |  . . Q:$P(IBCLKDAT,"^",7)=""
 | 
|---|
| 34 |  . . ; quit if CURRENT EVENTS DATE>last day of "real-time" previous month -the veteran 
 | 
|---|
| 35 |  . . ; has been processed for all months in the past
 | 
|---|
| 36 |  . . Q:$P(IBCLKDAT,"^",7)>IBPRMNTH
 | 
|---|
| 37 |  . . ; if error save it in ^TMP for further e-mail
 | 
|---|
| 38 |  . . S IBCLKAD1=""
 | 
|---|
| 39 |  . . ;process the patient
 | 
|---|
| 40 |  . . S IBVAR=0
 | 
|---|
| 41 |  . . F  S IBVAR=$O(IBMNS(IBVAR)) Q:+IBVAR=0  D
 | 
|---|
| 42 |  . . . Q:$$CHKXTMP(IBDFN1,IBVAR)  ;check if it was a crush and the month has been already processed
 | 
|---|
| 43 |  . . . M IBMDS1=IBMNS(IBVAR) ;set month to process
 | 
|---|
| 44 |  . . . S IBMDS1=$E(IBMDS1(1),6,7)
 | 
|---|
| 45 |  . . . D CHNGEVEN^IBAECU4(IBCLKIE1,IBDFN1,IBMDS1(0)) ;set CURRENT EVENT DATE to a date of the MONTH (say,1st day)
 | 
|---|
| 46 |  . . . I $$PROCPAT^IBAECM2(.IBMDS1,IBDFN1,IBSTRTD,IBCLKIE1)=-1 D  ;perform calcualtion
 | 
|---|
| 47 |  . . . . D ERRLOG^IBAECU5(+$G(IBDFN1),+$G(IBCLKIE1),"Charge","Error with LTC clock creation occured during calculation, no proper charges have been created") Q
 | 
|---|
| 48 |  . . . D UPDXTMP(IBDFN1,IBVAR) ;mark the month as done
 | 
|---|
| 49 |  . . D DELXTMP(IBDFN1)
 | 
|---|
| 50 |  ;send all errors to user group
 | 
|---|
| 51 |  D SENDERR^IBAECU5 ;send all errors
 | 
|---|
| 52 |  ;if we reach this place that means that we processed everybody
 | 
|---|
| 53 |  ;and we stamp the date into IB SITE PARAMETERS 
 | 
|---|
| 54 |  S $P(^IBE(350.9,1,0),"^",16)=$$TODAY^IBAECN1()
 | 
|---|
| 55 |  ;if Nightly Job founds that date $P(^IBE(350.9,1,0),"^",16)
 | 
|---|
| 56 |  ;is less that begining of current month than NJ runs MJ again and MJ will 
 | 
|---|
| 57 |  ;process a rest patients
 | 
|---|
| 58 |  D KILLXTMP ;delete ^XTMP
 | 
|---|
| 59 |  Q
 | 
|---|
| 60 |  ;IBALLM - Array with month info
 | 
|---|
| 61 |  ;  IBALLM (0)-first day of the month
 | 
|---|
| 62 |  ;  IBALLM (1)-last day of the month
 | 
|---|
| 63 |  ;  IBALLM (2)-yyymm in Fileman format (like 30201 - for Jan 2002)
 | 
|---|
| 64 |  ;IBPRMNTH -Last day of the last mont
 | 
|---|
| 65 | PRMONTHS(IBALLM,IBPRMNTH) ;prepare months
 | 
|---|
| 66 |  S IBALLM=""
 | 
|---|
| 67 |  N X,IB176YM,IB176TMP
 | 
|---|
| 68 |  S IB176YM=$E($$BILDATE^IBAECN1(),1,5)
 | 
|---|
| 69 |  F  Q:IB176YM>$E(IBPRMNTH,1,5)  D
 | 
|---|
| 70 |  . S X=IB176YM_"01"
 | 
|---|
| 71 |  . S IBALLM(IB176YM,1)=$$LASTDT^IBAECU(X)
 | 
|---|
| 72 |  . S IBALLM(IB176YM,2)=$E(IBALLM(IB176YM,1),1,5)
 | 
|---|
| 73 |  . S IBALLM(IB176YM,0)=IBALLM(IB176YM,2)_"01",IBALLM=$E(IBALLM(IB176YM,1),6,7)
 | 
|---|
| 74 |  . I +$E(IB176YM,4,5)=12 S IB176YM=$E(IB176YM,1,3)+1,IB176YM=IB176YM_"01" Q
 | 
|---|
| 75 |  . S IB176YM=IB176YM+1
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 | KILLXTMP ;
 | 
|---|
| 79 |  K ^XTMP("IBAEC-P176")
 | 
|---|
| 80 |  Q
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  ;IBDFN - ien of #2
 | 
|---|
| 83 |  ;IBYM - year_month in yyymm format
 | 
|---|
| 84 | CHKXTMP(IBDFN,IBYM) ;check if ^XTMP for the patient and month is exist
 | 
|---|
| 85 |  Q $D(^XTMP("IBAEC-P176",IBDFN,IBYM))>0
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ;IBDFN - ien of #2
 | 
|---|
| 88 |  ;IBYM - year_month in yyymm format
 | 
|---|
| 89 | UPDXTMP(IBDFN,IBYM) ;update XTMP with new info
 | 
|---|
| 90 |  N IBDT S IBDT=$$TODAY^IBAECN1()
 | 
|---|
| 91 |  S ^XTMP("IBAEC-P176",0)=$$CHNGDATE^IBAECU4(IBDT,30)_"^"_IBDT_"^1st LTC copay calculation"
 | 
|---|
| 92 |  S ^XTMP("IBAEC-P176",+IBDFN,IBYM)=""
 | 
|---|
| 93 |  Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  ;IBDFN - ien of #2
 | 
|---|
| 96 | DELXTMP(IBDFN) ;Kills ^XTMP node for the patient.
 | 
|---|
| 97 |  K ^XTMP("IBAEC-P176",+IBDFN)
 | 
|---|
| 98 |  Q
 | 
|---|
| 99 |  ;
 | 
|---|