BPSOSCA ;BHAM ISC/FCS/DRS - Create BPS Claims entries ;06/01/2004
;;1.0;E CLAIMS MGMT ENGINE;**1,5,10**;JUN 2004;Build 27
;;Per VHA Directive 2004-038, this routine should not be modified.
;
Q
; Create BPS Claims entries for TRANLIST(*) claims.
; Called from PACKET^BPSOSQG
;
; Input:
; TRANLIST(IEN59) - Array of pointers to 9002313.59
; A list of transactions for the same visit/patient/etc.
; to be bundled into one or more 9002313.02 claims
;
; Outputs:
; CLAIMIEN(CLAIMIEN)="", pointers to the ^BPSC(CLAIMIEN,
; claim records created.
; ERROR
;
; BPSOSCA calls:
; BPSOSCB to build BPS(*) array
; (and BPSOSCB calls BPSOSCC and BPSOSCD)
; BPSOSCE to build the ^BPSC( entry
;
EN(CLAIMIEN) ;EP - from BPSOSQG
I $D(TRANLIST)<10 D Q "306^No TRANLIST defined"
. N RETVAL S RETVAL=$$IMPOSS^BPSOSUE("P","TI","Bad TRANLIST",,,$T(+0))
. D LOG2LIST^BPSOSL($T(+0)_"-No TRANLIST passed into BPSOSCA")
;
; Manage local variables
N BPS,START,END,TOTAL,NCLAIMS,CLAIMN,ERROR
S ERROR=$$BPS^BPSOSCB()
I ERROR D LOG2LIST^BPSOSL($T(+0)_"-$$BPS^BPSOSCB(.BPS) returned "_ERROR)
I $G(BPS("RX",0))="" S:'ERROR ERROR="301^BPS(""RX"" not created" Q ERROR
I $G(BPS("NCPDP","# Meds/Claim"))="" Q "302^Number of Meds not returned"
;
; Calculate number of claim records to be generated for Billing Item
S NCLAIMS=((BPS("RX",0)-1)\BPS("NCPDP","# Meds/Claim"))+1
I NCLAIMS=0 Q "303^Number of claims is zero"
;
;Generate claim submission records
F CLAIMN=1:1:NCLAIMS D Q:$G(ERROR)
. S START=((CLAIMN-1)*BPS("NCPDP","# Meds/Claim"))+1
. S END=START+BPS("NCPDP","# Meds/Claim")-1
. S:END>BPS("RX",0) END=BPS("RX",0)
. S TOTAL=END-START+1
. S ERROR=$$NEWCLAIM^BPSOSCE(START,END,TOTAL)
. I ERROR]"" Q
. S CLAIMIEN=BPS(9002313.02)
. S CLAIMIEN(CLAIMIEN)=""
. ; Mark each of the .59s with the claim number and position within
. F I=START:1:END D
.. ;
.. ; IEN59 handling 06/23/2000. The ELSE should never happen again.
.. ; and the $G() can probably be gotten rid of, safely.
.. N IEN59 S IEN59=$G(BPS("RX",I,"IEN59"))
.. I IEN59 D
... N DIE,DA,DR S DIE=9002313.59
... ;
... ; Field #3-CLAIM, #14-POSITION
... ; POSITION: Not the relative position within the packet,
... ; but the index in BPS("RX",n,.... This is the position in which
... ; it will be stored in ^BPSC(ien,400,POSITION
... ; and likewise for 9002313.03 when the response comes in.
... S DA=IEN59,DR=3_"////"_CLAIMIEN_";14////"_I N I D ^DIE
.. E D
... S $P(^BPST(BPS("RX",I,"RX IEN"),0),"^",4)=CLAIMIEN
... S ^BPST("AE",CLAIMIEN,BPS("RX",I,"RX IEN"))=""
... S $P(^BPST(BPS("RX",I,"RX IEN"),0),"^",9)=I
Q ERROR
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HBPSOSCA 2751 printed Dec 13, 2024@01:51:34 Page 2
BPSOSCA ;BHAM ISC/FCS/DRS - Create BPS Claims entries ;06/01/2004
+1 ;;1.0;E CLAIMS MGMT ENGINE;**1,5,10**;JUN 2004;Build 27
+2 ;;Per VHA Directive 2004-038, this routine should not be modified.
+3 ;
+4 QUIT
+5 ; Create BPS Claims entries for TRANLIST(*) claims.
+6 ; Called from PACKET^BPSOSQG
+7 ;
+8 ; Input:
+9 ; TRANLIST(IEN59) - Array of pointers to 9002313.59
+10 ; A list of transactions for the same visit/patient/etc.
+11 ; to be bundled into one or more 9002313.02 claims
+12 ;
+13 ; Outputs:
+14 ; CLAIMIEN(CLAIMIEN)="", pointers to the ^BPSC(CLAIMIEN,
+15 ; claim records created.
+16 ; ERROR
+17 ;
+18 ; BPSOSCA calls:
+19 ; BPSOSCB to build BPS(*) array
+20 ; (and BPSOSCB calls BPSOSCC and BPSOSCD)
+21 ; BPSOSCE to build the ^BPSC( entry
+22 ;
EN(CLAIMIEN) ;EP - from BPSOSQG
+1 IF $DATA(TRANLIST)<10
Begin DoDot:1
+2 NEW RETVAL
SET RETVAL=$$IMPOSS^BPSOSUE("P","TI","Bad TRANLIST",,,$TEXT(+0))
+3 DO LOG2LIST^BPSOSL($TEXT(+0)_"-No TRANLIST passed into BPSOSCA")
End DoDot:1
QUIT "306^No TRANLIST defined"
+4 ;
+5 ; Manage local variables
+6 NEW BPS,START,END,TOTAL,NCLAIMS,CLAIMN,ERROR
+7 SET ERROR=$$BPS^BPSOSCB()
+8 IF ERROR
DO LOG2LIST^BPSOSL($TEXT(+0)_"-$$BPS^BPSOSCB(.BPS) returned "_ERROR)
+9 IF $GET(BPS("RX",0))=""
if 'ERROR
SET ERROR="301^BPS(""RX"" not created"
QUIT ERROR
+10 IF $GET(BPS("NCPDP","# Meds/Claim"))=""
QUIT "302^Number of Meds not returned"
+11 ;
+12 ; Calculate number of claim records to be generated for Billing Item
+13 SET NCLAIMS=((BPS("RX",0)-1)\BPS("NCPDP","# Meds/Claim"))+1
+14 IF NCLAIMS=0
QUIT "303^Number of claims is zero"
+15 ;
+16 ;Generate claim submission records
+17 FOR CLAIMN=1:1:NCLAIMS
Begin DoDot:1
+18 SET START=((CLAIMN-1)*BPS("NCPDP","# Meds/Claim"))+1
+19 SET END=START+BPS("NCPDP","# Meds/Claim")-1
+20 if END>BPS("RX",0)
SET END=BPS("RX",0)
+21 SET TOTAL=END-START+1
+22 SET ERROR=$$NEWCLAIM^BPSOSCE(START,END,TOTAL)
+23 IF ERROR]""
QUIT
+24 SET CLAIMIEN=BPS(9002313.02)
+25 SET CLAIMIEN(CLAIMIEN)=""
+26 ; Mark each of the .59s with the claim number and position within
+27 FOR I=START:1:END
Begin DoDot:2
+28 ;
+29 ; IEN59 handling 06/23/2000. The ELSE should never happen again.
+30 ; and the $G() can probably be gotten rid of, safely.
+31 NEW IEN59
SET IEN59=$GET(BPS("RX",I,"IEN59"))
+32 IF IEN59
Begin DoDot:3
+33 NEW DIE,DA,DR
SET DIE=9002313.59
+34 ;
+35 ; Field #3-CLAIM, #14-POSITION
+36 ; POSITION: Not the relative position within the packet,
+37 ; but the index in BPS("RX",n,.... This is the position in which
+38 ; it will be stored in ^BPSC(ien,400,POSITION
+39 ; and likewise for 9002313.03 when the response comes in.
+40 SET DA=IEN59
SET DR=3_"////"_CLAIMIEN_";14////"_I
NEW I
DO ^DIE
End DoDot:3
+41 IF '$TEST
Begin DoDot:3
+42 SET $PIECE(^BPST(BPS("RX",I,"RX IEN"),0),"^",4)=CLAIMIEN
+43 SET ^BPST("AE",CLAIMIEN,BPS("RX",I,"RX IEN"))=""
+44 SET $PIECE(^BPST(BPS("RX",I,"RX IEN"),0),"^",9)=I
End DoDot:3
End DoDot:2
End DoDot:1
if $GET(ERROR)
QUIT
+45 QUIT ERROR