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