| 1 | BPSOSHR ;BHAM ISC/SD/lwj/DLF - Format conversion for reversals ;06/01/2004 | 
|---|
| 2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,2,5**;JUN 2004;Build 45 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; This routine was originally used by IHS to reformat reversal claims | 
|---|
| 6 | ;   into version 5.1 if the original billing request was version 3x. | 
|---|
| 7 | ;   For that purpose, this routine is no longer needed.  However, | 
|---|
| 8 | ;   it also executes the special code fields so for that reason, it | 
|---|
| 9 | ;   has not been removed. We also may need to do this if we change | 
|---|
| 10 | ;   from version 5.1 to some other version, such as version 8, in the | 
|---|
| 11 | ;   future. | 
|---|
| 12 | ; | 
|---|
| 13 | ; NOTE: There is a problem with special code if it relies on BPS array | 
|---|
| 14 | ;   values, such as BPS("Site","NCPDP") since those variables will not | 
|---|
| 15 | ;   be defined at this point.  So, the only special code that will | 
|---|
| 16 | ;   work are hard-coded values or executes of a procedure.  If executing | 
|---|
| 17 | ;   a procedure, it also needs to not rely on BPS array elements or needs | 
|---|
| 18 | ;   to distinquish between billing requests and reversals. | 
|---|
| 19 | Q | 
|---|
| 20 | ; | 
|---|
| 21 | ; Input | 
|---|
| 22 | ;   BPSFORM  - Reversal payer sheet IEN | 
|---|
| 23 | ;   CLAIMIEN - Original claim IEN | 
|---|
| 24 | ;   POS      - Multiple from original claim | 
|---|
| 25 | ; | 
|---|
| 26 | ; Input/Output | 
|---|
| 27 | ;   TMP is the array originally created in BPSECA8.  Since it is quite | 
|---|
| 28 | ;     large, we are not passing it into here.  It will be modified by | 
|---|
| 29 | ;     this routine. | 
|---|
| 30 | ; | 
|---|
| 31 | REFORM(BPSFORM,CLAIMIEN,POS) ; | 
|---|
| 32 | ; | 
|---|
| 33 | ; Validate parameters | 
|---|
| 34 | I $G(BPSFORM)="" Q | 
|---|
| 35 | I $G(CLAIMIEN)="" Q | 
|---|
| 36 | I $G(POS)="" Q | 
|---|
| 37 | ; | 
|---|
| 38 | ; Initialize variables | 
|---|
| 39 | N FLDIEN,PMODE,ORDER,RECMIEN,FIELD,NODE | 
|---|
| 40 | ; | 
|---|
| 41 | ; First go through the header fields.  The original IHS logic was only | 
|---|
| 42 | ;   checking four specific fields.  Of these, I removed: | 
|---|
| 43 | ;    109 (Transaction Count) - Always 1 for reversals and it does | 
|---|
| 44 | ;      not make sense for this to be determined by special code. | 
|---|
| 45 | ;    201 (Service Provider ID) - The logic currently implemented | 
|---|
| 46 | ;      relies on BPS array elements that are not defined here so this | 
|---|
| 47 | ;      was getting set to NULL when it needed to be set.  In addition | 
|---|
| 48 | ;      I compared reversal and request (11/30/2006) and this value is | 
|---|
| 49 | ;      always the same for both so reversals will get the right value | 
|---|
| 50 | ;      from the request. | 
|---|
| 51 | ;    202 (Service Provider ID Qualifier) - It does not make sense | 
|---|
| 52 | ;      to do this field if we are not doing field 201. | 
|---|
| 53 | ; | 
|---|
| 54 | ; So that leaves 110 (Software Vendor/Certification ID), which is needed | 
|---|
| 55 | ;   by the WEBMD reversal test payer sheet. | 
|---|
| 56 | ; | 
|---|
| 57 | ; Kept looping structure in case other fields are added later | 
|---|
| 58 | ; | 
|---|
| 59 | S NODE=100,ORDER=0 | 
|---|
| 60 | F  S ORDER=$O(^BPSF(9002313.92,BPSFORM,NODE,"B",ORDER)) Q:'ORDER  D | 
|---|
| 61 | . S RECMIEN=$O(^BPSF(9002313.92,BPSFORM,NODE,"B",ORDER,0)) | 
|---|
| 62 | . I 'RECMIEN Q | 
|---|
| 63 | . S FLDIEN=$P($G(^BPSF(9002313.92,BPSFORM,NODE,RECMIEN,0)),U,2) | 
|---|
| 64 | . S FIELD=$P($G(^BPSF(9002313.91,FLDIEN,0)),U) | 
|---|
| 65 | . I FIELD'=110 Q | 
|---|
| 66 | . ; | 
|---|
| 67 | . ; Check to see if the format has special code.  If not, quit | 
|---|
| 68 | . ;  If we change versions (5x to ??), we made need to execute FORMAT | 
|---|
| 69 | . ;    code no matter what, but for now, only do if there is special | 
|---|
| 70 | . ;    code. | 
|---|
| 71 | . S PMODE=$P($G(^BPSF(9002313.92,BPSFORM,NODE,RECMIEN,0)),U,3) | 
|---|
| 72 | . I PMODE'="X" Q | 
|---|
| 73 | . ; | 
|---|
| 74 | . ; If special code, get the value, format it and store it in TMP | 
|---|
| 75 | . D XSPCCODE^BPSOSCF(BPSFORM,NODE,RECMIEN) | 
|---|
| 76 | . D FORMAT(NODE,FLDIEN) | 
|---|
| 77 | . S TMP(9002313.02,CLAIMIEN,FIELD,"I")=BPS("X") | 
|---|
| 78 | ; | 
|---|
| 79 | ; Now reformat the "detail" portion of the claim. For now, the only | 
|---|
| 80 | ;   segment we are going to look at is 130, which is the claim segment | 
|---|
| 81 | ;   If other reversal formats become available, and they require other | 
|---|
| 82 | ;   segments - this section will have to change.  Since the claim | 
|---|
| 83 | ;   segment full of optional fields, we wil read through the format | 
|---|
| 84 | ;   and take it a field at a time. | 
|---|
| 85 | S NODE=130,ORDER=0 | 
|---|
| 86 | F  S ORDER=$O(^BPSF(9002313.92,BPSFORM,NODE,"B",ORDER)) Q:'ORDER  D | 
|---|
| 87 | . S RECMIEN=$O(^BPSF(9002313.92,BPSFORM,NODE,"B",ORDER,0)) | 
|---|
| 88 | . I 'RECMIEN Q | 
|---|
| 89 | . S FLDIEN=$P($G(^BPSF(9002313.92,BPSFORM,NODE,RECMIEN,0)),U,2) | 
|---|
| 90 | . S FIELD=$P($G(^BPSF(9002313.91,FLDIEN,0)),U) | 
|---|
| 91 | . I FIELD=111 Q    ; Never do Segment Indentifier | 
|---|
| 92 | . ; | 
|---|
| 93 | . ; Check to see if the format has special code.  If not, quit | 
|---|
| 94 | . ; If we change versions (5x to ??), we made need to execute FORMAT | 
|---|
| 95 | . ;   code no matter what, but for now, only do if there is special | 
|---|
| 96 | . ;   code. | 
|---|
| 97 | . S PMODE=$P($G(^BPSF(9002313.92,BPSFORM,NODE,RECMIEN,0)),U,3) | 
|---|
| 98 | . I PMODE'="X" Q | 
|---|
| 99 | . ; | 
|---|
| 100 | . ; If special code, get the value, format it and store it in TMP | 
|---|
| 101 | . D XSPCCODE^BPSOSCF(BPSFORM,NODE,RECMIEN) | 
|---|
| 102 | . D FORMAT(NODE,FLDIEN) | 
|---|
| 103 | . S TMP(9002313.0201,POS_","_CLAIMIEN,FIELD,"I")=BPS("X") | 
|---|
| 104 | Q | 
|---|
| 105 | ; | 
|---|
| 106 | ; FORMAT will format the data based on the FORMAT code in BPS NCPDP | 
|---|
| 107 | ;   FIELD DEFS | 
|---|
| 108 | FORMAT(NODE,FLDIEN) ; | 
|---|
| 109 | N INDEX,MCODE,QUAL | 
|---|
| 110 | ; | 
|---|
| 111 | ; Loop through format code and format the data | 
|---|
| 112 | S INDEX=0 | 
|---|
| 113 | F  S INDEX=$O(^BPSF(9002313.91,FLDIEN,25,INDEX))  Q:'+INDEX  D | 
|---|
| 114 | . S MCODE=$G(^BPSF(9002313.91,FLDIEN,25,INDEX,0)) | 
|---|
| 115 | . I MCODE="" Q | 
|---|
| 116 | . I $E(MCODE,1)=";" Q | 
|---|
| 117 | . X MCODE | 
|---|
| 118 | ; | 
|---|
| 119 | ; If node not equal to 100, append qualifier | 
|---|
| 120 | I NODE'=100 D | 
|---|
| 121 | . S QUAL=$P(^BPSF(9002313.91,FLDIEN,5),"^",1) | 
|---|
| 122 | . S BPS("X")=QUAL_BPS("X") | 
|---|
| 123 | Q | 
|---|