IBCU41 ;ALB/ARH - THIRD PARTY BILLING UTILITIES (OP VISIT DATES) ; 6-JUN-93
;;Version 2.0 ; INTEGRATED BILLING ;; 21-MAR-94
;;Per VHA Directive 10-93-142, this routine should not be modified.
;
;
OPV(DATE,IFN) ;input transform for outpatient visit dates (399,43,.01)
;input: DATE - to add
; IFN - bill to add to
;returns: 1 - if OK to add
; 0 - if not
N X,Y S X=1
I '$$OPV2(DATE,IFN,1) S X=0
I '$$OPV1(IFN,1) S X=0
S Y=$$APPT^IBCU3(DATE,$P($G(^DGCR(399,IFN,0)),U,2),1)
S Y=$$DUPCHK(DATE,IFN,1)
Q X
;
OPV1(IFN,DISP,CNT) ;edit checks for adding visit dates, if any of these fail then no visit date should be added to the bill
;these are the types of checks that if they fail a message should be displayed to the user
;does not check date passed in against existing dates, assumes new visit date
;input: IFN - required, internal file number of bill to check
; DISP - if true then error messager will be printed, if any
; CNT - number of visit dates user wants to add to bill
;returns: "1^warning message" - if OK to add more visit dates to the bill
; "0^error message" - if no more visit dates should added to the bill
;
N X,Y S Y=1 S:$G(CNT)="" CNT=1 S:$G(UN)="" UN=$G(^DGCR(399,+IFN,"U"))
I '$P(UN,U,1) S Y="0^No 'Statement From' date on file ... Can't enter OP visit dates ..." G OPV1E
I '$P(UN,U,2) S Y="0^No 'Statement To' date on file ... Can't enter OP visit dates ..." G OPV1E
G:'$O(^DGCR(399,IFN,"OP",0))&(CNT<2) OPV1E
I $P($G(^DGCR(399,IFN,"OP",0)),U,4)+CNT>30 S Y="0^Maximum of 30 visit dates allowed per bill!" G OPV1E
I +$P($G(^DGCR(399,+IFN,0)),U,19)'=2,$D(^DGCR(399,IFN,"CP","ASC")) S Y="0^Only one visit date allowed on bills with Billable Amb. Surg. Codes!" G OPV1E
;warnings:
I +Y,+$P($G(^DIC(36,+$G(^DGCR(399,IFN,"M")),0)),U,8) S Y="1^This insurance Company will only accept one visit per bill!" G OPV1E
OPV1E I +$G(DISP),$P(Y,U,2)'="" W !,?10,$P(Y,U,2)
Q Y
;
OPV2(DATE,IFN,DISP,UN) ;edit checks for adding visit dates, if any if these fail then the given date should not be added to the bill
;these are the types of checks that determine if a particular visit date should be presented to the user for possible addition to the bill
;does not check date passed in against existing dates, assumes new visit date
;also being used for Procedure Date (399,304,1) input transform
;input: DATE - required, date to check for addition to the bill
; IFN - required, internal file number of bill to check
; DISP - if true then error messager will be printed, if any
; UN - the "U" node of the bill, pass if alrady defined in a var
;returns: "1^warning message" - if date is OK to add to the bill
; "0^error message" - if date should not be added to the bill
;
N X,Y S Y=1,DATE=$P(DATE,".",1) S:$G(UN)="" UN=$G(^DGCR(399,+IFN,"U"))
I DATE<+UN S Y="0^Can't enter a visit date prior to the 'Statement From' date ..." G OPV2E
I DATE>+$P(UN,U,2) S Y="0^Can't enter a visit date later than the 'Statement To' date ..." G OPV2E
OPV2E I +$G(DISP),$P(Y,U,2)'="" W !,?10,$P(Y,U,2)
Q Y
;
DUPCHK(DATE,IFN,DISP,DFN,RTG) ;Check for duplicate billing of opt visit - checks for given visit date on other
;bills with the same rate type and that have not been cancelled (if not IFN then use DFN and RTG)
;input: DATE - visit date to check
; IFN - internal file number of bill date is being added to
; DISP - true if error message should be printed before exit, if any
; DFN - patient'S IFN (required only if IFN is not passed)
; RTG - rate group to check for (""), if no rate group (0 passed and/or no IFN) then any bill found for
; visit date will cause error message
;returns: 0 - if another bill was not found with this visit date, patient, and rate type
; (dup IFN)_"^error message" - if duplicate date found, same rate group, IFN of other bill w/visit date
;(initially set up to check for same rate group because MT billing was done on the UB-82 so it was valid to have multiple bills with different rate groups for the same episode)
N IFN2,Y,X S Y=0,DATE=$P(+$G(DATE),".",1),IFN=+$G(IFN),X=$G(^DGCR(399,IFN,0))
S DFN=$S(+$G(DFN):$G(DFN),1:$P(X,U,2)),RTG=$S($G(RTG)'="":RTG,1:$P(X,U,7)) G:'DFN DUPCHKE
I '$D(^DGCR(399,"AOPV",DFN,DATE)) G DUPCHKE
S IFN2=0 F S IFN2=$O(^DGCR(399,"AOPV",DFN,DATE,IFN2)) Q:'IFN2 I IFN2'=IFN D Q:+Y
. S X=$G(^DGCR(399,IFN2,0)) I $P(X,U,13)=7 Q ; bill for date cancelled
. I +RTG,RTG'=$P(X,U,7) Q ; different rate group
. S Y=IFN2_"^A "_$P($G(^DGCR(399.3,+$P(X,U,7),0)),U,1)_" bill ("_$P(X,U,1)_") exists for visit date ("_$$DAT1^IBOUTL(DATE)_")."
DUPCHKE I +$G(DISP),+Y W !,?10,$P(Y,U,2)
Q Y
IBCU41 ;ALB/ARH - THIRD PARTY BILLING UTILITIES (OP VISIT DATES) ; 6-JUN-93
+1 ;;Version 2.0 ; INTEGRATED BILLING ;; 21-MAR-94
+2 ;;Per VHA Directive 10-93-142, this routine should not be modified.
+3 ;
+4 ;
OPV(DATE,IFN) ;input transform for outpatient visit dates (399,43,.01)
+1 ;input: DATE - to add
+2 ; IFN - bill to add to
+3 ;returns: 1 - if OK to add
+4 ; 0 - if not
+5 NEW X,Y
SET X=1
+6 IF '$$OPV2(DATE,IFN,1)
SET X=0
+7 IF '$$OPV1(IFN,1)
SET X=0
+8 SET Y=$$APPT^IBCU3(DATE,$PIECE($GET(^DGCR(399,IFN,0)),U,2),1)
+9 SET Y=$$DUPCHK(DATE,IFN,1)
+10 QUIT X
+11 ;
OPV1(IFN,DISP,CNT) ;edit checks for adding visit dates, if any of these fail then no visit date should be added to the bill
+1 ;these are the types of checks that if they fail a message should be displayed to the user
+2 ;does not check date passed in against existing dates, assumes new visit date
+3 ;input: IFN - required, internal file number of bill to check
+4 ; DISP - if true then error messager will be printed, if any
+5 ; CNT - number of visit dates user wants to add to bill
+6 ;returns: "1^warning message" - if OK to add more visit dates to the bill
+7 ; "0^error message" - if no more visit dates should added to the bill
+8 ;
+9 NEW X,Y
SET Y=1
IF $GET(CNT)=""
SET CNT=1
IF $GET(UN)=""
SET UN=$GET(^DGCR(399,+IFN,"U"))
+10 IF '$PIECE(UN,U,1)
SET Y="0^No 'Statement From' date on file ... Can't enter OP visit dates ..."
GOTO OPV1E
+11 IF '$PIECE(UN,U,2)
SET Y="0^No 'Statement To' date on file ... Can't enter OP visit dates ..."
GOTO OPV1E
+12 IF '$ORDER(^DGCR(399,IFN,"OP",0))&(CNT<2)
GOTO OPV1E
+13 IF $PIECE($GET(^DGCR(399,IFN,"OP",0)),U,4)+CNT>30
SET Y="0^Maximum of 30 visit dates allowed per bill!"
GOTO OPV1E
+14 IF +$PIECE($GET(^DGCR(399,+IFN,0)),U,19)'=2
IF $DATA(^DGCR(399,IFN,"CP","ASC"))
SET Y="0^Only one visit date allowed on bills with Billable Amb. Surg. Codes!"
GOTO OPV1E
+15 ;warnings:
+16 IF +Y
IF +$PIECE($GET(^DIC(36,+$GET(^DGCR(399,IFN,"M")),0)),U,8)
SET Y="1^This insurance Company will only accept one visit per bill!"
GOTO OPV1E
OPV1E IF +$GET(DISP)
IF $PIECE(Y,U,2)'=""
WRITE !,?10,$PIECE(Y,U,2)
+1 QUIT Y
+2 ;
OPV2(DATE,IFN,DISP,UN) ;edit checks for adding visit dates, if any if these fail then the given date should not be added to the bill
+1 ;these are the types of checks that determine if a particular visit date should be presented to the user for possible addition to the bill
+2 ;does not check date passed in against existing dates, assumes new visit date
+3 ;also being used for Procedure Date (399,304,1) input transform
+4 ;input: DATE - required, date to check for addition to the bill
+5 ; IFN - required, internal file number of bill to check
+6 ; DISP - if true then error messager will be printed, if any
+7 ; UN - the "U" node of the bill, pass if alrady defined in a var
+8 ;returns: "1^warning message" - if date is OK to add to the bill
+9 ; "0^error message" - if date should not be added to the bill
+10 ;
+11 NEW X,Y
SET Y=1
SET DATE=$PIECE(DATE,".",1)
IF $GET(UN)=""
SET UN=$GET(^DGCR(399,+IFN,"U"))
+12 IF DATE<+UN
SET Y="0^Can't enter a visit date prior to the 'Statement From' date ..."
GOTO OPV2E
+13 IF DATE>+$PIECE(UN,U,2)
SET Y="0^Can't enter a visit date later than the 'Statement To' date ..."
GOTO OPV2E
OPV2E IF +$GET(DISP)
IF $PIECE(Y,U,2)'=""
WRITE !,?10,$PIECE(Y,U,2)
+1 QUIT Y
+2 ;
DUPCHK(DATE,IFN,DISP,DFN,RTG) ;Check for duplicate billing of opt visit - checks for given visit date on other
+1 ;bills with the same rate type and that have not been cancelled (if not IFN then use DFN and RTG)
+2 ;input: DATE - visit date to check
+3 ; IFN - internal file number of bill date is being added to
+4 ; DISP - true if error message should be printed before exit, if any
+5 ; DFN - patient'S IFN (required only if IFN is not passed)
+6 ; RTG - rate group to check for (""), if no rate group (0 passed and/or no IFN) then any bill found for
+7 ; visit date will cause error message
+8 ;returns: 0 - if another bill was not found with this visit date, patient, and rate type
+9 ; (dup IFN)_"^error message" - if duplicate date found, same rate group, IFN of other bill w/visit date
+10 ;(initially set up to check for same rate group because MT billing was done on the UB-82 so it was valid to have multiple bills with different rate groups for the same episode)
+11 NEW IFN2,Y,X
SET Y=0
SET DATE=$PIECE(+$GET(DATE),".",1)
SET IFN=+$GET(IFN)
SET X=$GET(^DGCR(399,IFN,0))
+12 SET DFN=$SELECT(+$GET(DFN):$GET(DFN),1:$PIECE(X,U,2))
SET RTG=$SELECT($GET(RTG)'="":RTG,1:$PIECE(X,U,7))
IF 'DFN
GOTO DUPCHKE
+13 IF '$DATA(^DGCR(399,"AOPV",DFN,DATE))
GOTO DUPCHKE
+14 SET IFN2=0
FOR
SET IFN2=$ORDER(^DGCR(399,"AOPV",DFN,DATE,IFN2))
IF 'IFN2
QUIT
IF IFN2'=IFN
Begin DoDot:1
+15 ; bill for date cancelled
SET X=$GET(^DGCR(399,IFN2,0))
IF $PIECE(X,U,13)=7
QUIT
+16 ; different rate group
IF +RTG
IF RTG'=$PIECE(X,U,7)
QUIT
+17 SET Y=IFN2_"^A "_$PIECE($GET(^DGCR(399.3,+$PIECE(X,U,7),0)),U,1)_" bill ("_$PIECE(X,U,1)_") exists for visit date ("_$$DAT1^IBOUTL(DATE)_")."
End DoDot:1
IF +Y
QUIT
DUPCHKE IF +$GET(DISP)
IF +Y
WRITE !,?10,$PIECE(Y,U,2)
+1 QUIT Y