| 1 | BPSOSQG ;BHAM ISC/FCS/DRS/FLS - form transmission packets ;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 | Q | 
|---|
| 5 | ; | 
|---|
| 6 | ; PACKET | 
|---|
| 7 | ;   Calls BPSOSCA to get claims data (BPS array) | 
|---|
| 8 | ;   Calls BPSECA1 to create packet | 
|---|
| 9 | ;   Calls CHOP^BPSECMC2 to send packet to HL7 application | 
|---|
| 10 | ; | 
|---|
| 11 | PACKET() ;EP - BPSOSQ2 | 
|---|
| 12 | ; packetize one prescription (and possibly more prescriptions | 
|---|
| 13 | ; for the same patient, if they're ready now.) | 
|---|
| 14 | ; Called from BPSOSQ2, | 
|---|
| 15 | ;  which gave us RXILIST(IEN59) array of claims to packetize. | 
|---|
| 16 | ; | 
|---|
| 17 | N CLAIMIEN,ERROR,FIRST59 | 
|---|
| 18 | ; | 
|---|
| 19 | ; Get first transaction from list | 
|---|
| 20 | S FIRST59=$O(RXILIST(0)) | 
|---|
| 21 | ; | 
|---|
| 22 | ; If it's a reversal, we already have an ^BPSC(, which was | 
|---|
| 23 | ;   created by the call to BPSECA8, way back at the beginning. | 
|---|
| 24 | ; So, unlike claims, we need only the NCPDP formatting for it | 
|---|
| 25 | ;   by creating CLAIMIEN array and jumping to POINTM | 
|---|
| 26 | I $G(^BPST(FIRST59,4)) D  G POINTM | 
|---|
| 27 | . ; Mimic a few things that are set up in the code we're skipping | 
|---|
| 28 | . S CLAIMIEN=$P(^BPST(FIRST59,4),U) | 
|---|
| 29 | . S CLAIMIEN(CLAIMIEN)="" | 
|---|
| 30 | ; | 
|---|
| 31 | ; DMB - This code will only be executed if there is more than one | 
|---|
| 32 | ;  transaction in RXILIST.  This will not happen for the VA but leave | 
|---|
| 33 | ;  functionality in case we bundle claims later | 
|---|
| 34 | I $O(RXILIST($O(RXILIST("")))) D | 
|---|
| 35 | . D LOG2LIST^BPSOSL($T(+0)_"-Packetizing - we have more than one claim:") | 
|---|
| 36 | . N I,X,Y S (X,Y)="" | 
|---|
| 37 | . F I=1:1 S X=$O(RXILIST(X)) Q:'X  D | 
|---|
| 38 | . . S $P(Y,", ",I-1#4+1)=X | 
|---|
| 39 | . . I I#4=0 D LOG2LIST^BPSOSL(Y) S Y="" | 
|---|
| 40 | . I Y]"" D LOG2LIST^BPSOSL(Y) | 
|---|
| 41 | ; | 
|---|
| 42 | ; BPSOSCA calls BPSOSCB,BPSOSCC,BPSOSCD to set up BPS(*) and | 
|---|
| 43 | ;    then calls BPSOSCE to create claims in 9002313.02 | 
|---|
| 44 | ; BPSOSCA expects RXILIST(*) to be defined and will return | 
|---|
| 45 | ;   ERROR - any error encountered | 
|---|
| 46 | ;   CLAIMIEN - last claim created | 
|---|
| 47 | ;   CLAIMIEN(CLAIMIEN) - the list of all claims created | 
|---|
| 48 | S ERROR=$$EN^BPSOSCA(.CLAIMIEN) | 
|---|
| 49 | I ERROR D LOG2LIST^BPSOSL($T(+0)_"-ERROR="_ERROR_" returned from BPSOSCA") | 
|---|
| 50 | I $G(CLAIMIEN)<1 Q $S(ERROR:ERROR,1:"300^No Claim IEN returned by BPSOSCA") | 
|---|
| 51 | ; | 
|---|
| 52 | ; POINTM will create the claims packet and put them in XTMP | 
|---|
| 53 | POINTM ; Reversals are joining again here | 
|---|
| 54 | N VAMSG,IEN59,ERROR | 
|---|
| 55 | ; | 
|---|
| 56 | ; CLAIMIEN(*) = a list of CLAIMIENs that were generated from | 
|---|
| 57 | ;   all the prescriptions that might have been bundled together. | 
|---|
| 58 | ;   So we must loop through that list. | 
|---|
| 59 | ; Currently, VA does not bundle claims.  If it does so, | 
|---|
| 60 | ;   we may want to change error handling. | 
|---|
| 61 | S ERROR=0,CLAIMIEN="" | 
|---|
| 62 | F  S CLAIMIEN=$O(CLAIMIEN(CLAIMIEN)) Q:CLAIMIEN=""  D | 
|---|
| 63 | . S IEN59=$O(^BPST("AE",CLAIMIEN,"")) | 
|---|
| 64 | . I IEN59="" S IEN59=$O(^BPST("AER",CLAIMIEN,"")) | 
|---|
| 65 | . I IEN59="" S ERROR="500^Transaction IEN not determined for "_CLAIMIEN Q | 
|---|
| 66 | . D SETSTAT^BPSOSU(IEN59,50) | 
|---|
| 67 | . K VAMSG | 
|---|
| 68 | . D LOG2CLM^BPSOSL(CLAIMIEN,$T(+0)_"-Packet being built for Claim ID "_$P(^BPSC(CLAIMIEN,0),U)) | 
|---|
| 69 | . D ASCII^BPSECA1(CLAIMIEN,.VAMSG) | 
|---|
| 70 | . I '$G(VAMSG("HLS",0)) S ERROR="501^Claim packet not built for "_$P($G(^BPSC(CLAIMIEN,0)),U,1) Q | 
|---|
| 71 | . D CHOP^BPSECMC2(.VAMSG,CLAIMIEN,IEN59) | 
|---|
| 72 | Q ERROR | 
|---|