| 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
 | 
|---|