| 1 | BPSOSCF ;BHAM ISC/FCS/DRS/DLF - Low-level format of .02 ;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 | ; XLOOP - Build claim record | 
|---|
| 6 | ; Inputs: | 
|---|
| 7 | ;   BPS    - This is shared among the BPSOSC* routines | 
|---|
| 8 | ;   FORMAT - Pointer to 9002313.92 | 
|---|
| 9 | ;   NODE   - Segment Node | 
|---|
| 10 | ;            100  (5.1 Transaction Header Segment) | 
|---|
| 11 | ;            110  (5.1 Patient Segment) | 
|---|
| 12 | ;            120  (5.1 Insurance Segment) | 
|---|
| 13 | ;            130  (5.1 Claim Segment) | 
|---|
| 14 | ;            140  (5.1 Pharmacy Provider Segment) | 
|---|
| 15 | ;            150  (5.1 Prescriber Segment) | 
|---|
| 16 | ;            160  (5.1 COB/Other Payments Segment) | 
|---|
| 17 | ;            170  (5.1 Worker's Compensation Segment) | 
|---|
| 18 | ;            180  (5.1 DUR/PPS Segment) | 
|---|
| 19 | ;            190  (5.1 Pricing Segment) | 
|---|
| 20 | ;            200  (5.1 Coupon Segment) | 
|---|
| 21 | ;            210  (5.1 Compound Segment) | 
|---|
| 22 | ;            220  (5.1 Prior Authorization Segment) | 
|---|
| 23 | ;            230  (5.1 Clinical Segment) | 
|---|
| 24 | ;   MEDN   - Prescription multiple in BPS Claims | 
|---|
| 25 | ; | 
|---|
| 26 | XLOOP(FORMAT,NODE,MEDN) ;EP | 
|---|
| 27 | N ORDER,RECMIEN,MDATA,FLDIEN,PMODE,FLAG,OVERRIDE | 
|---|
| 28 | ; | 
|---|
| 29 | ; Check parameters | 
|---|
| 30 | I $G(FORMAT)="" Q | 
|---|
| 31 | I $G(NODE)="" Q | 
|---|
| 32 | ; | 
|---|
| 33 | ; If the payer sheet does have a particular segment quit | 
|---|
| 34 | I '$D(^BPSF(9002313.92,FORMAT,NODE,0)) Q | 
|---|
| 35 | ; | 
|---|
| 36 | ; VA does not currently do these segments | 
|---|
| 37 | I ",230,220,210,200,170,160,"[(","_NODE_",") Q | 
|---|
| 38 | ; | 
|---|
| 39 | ; DUR is handled differently since it is repeating | 
|---|
| 40 | I NODE=180 D DURPPS^BPSOSHF(FORMAT,NODE,MEDN) Q | 
|---|
| 41 | ; | 
|---|
| 42 | ; Loop through the fields in the segment | 
|---|
| 43 | S ORDER=0 | 
|---|
| 44 | F  S ORDER=$O(^BPSF(9002313.92,FORMAT,NODE,"B",ORDER)) Q:'ORDER  D | 
|---|
| 45 | . ; | 
|---|
| 46 | . ; Get the pointer to the BPS NCPDP FIELD DEFS table | 
|---|
| 47 | . S RECMIEN=$O(^BPSF(9002313.92,FORMAT,NODE,"B",ORDER,0)) | 
|---|
| 48 | . I 'RECMIEN D IMPOSS^BPSOSUE("DB","TI","NODE="_NODE,"ORDER="_ORDER,2,$T(+0)) | 
|---|
| 49 | . S MDATA=^BPSF(9002313.92,FORMAT,NODE,RECMIEN,0) | 
|---|
| 50 | . S FLDIEN=$P(MDATA,U,2) | 
|---|
| 51 | . ; | 
|---|
| 52 | . ; Quit for 111-AM (Segment ID), 478-H7 (Other Amt Claimed Sub Count), and | 
|---|
| 53 | . ;   479-H8 (Other Amt Claimed Sub Qual) | 
|---|
| 54 | . ; 478 and 479 are handled by 480 and 111 is standard field for each segment | 
|---|
| 55 | . Q:FLDIEN=241!(FLDIEN=240)!(FLDIEN=93) | 
|---|
| 56 | . ; | 
|---|
| 57 | . ; Corrupt or erroneous format file | 
|---|
| 58 | . I 'FLDIEN Q | 
|---|
| 59 | . ; | 
|---|
| 60 | . ; Set override value (may not be defined so override will be null) | 
|---|
| 61 | . I $D(MEDN) S OVERRIDE=$G(BPS("OVERRIDE","RX",MEDN,FLDIEN)) | 
|---|
| 62 | . E  S OVERRIDE=$G(BPS("OVERRIDE",FLDIEN)) | 
|---|
| 63 | . ; | 
|---|
| 64 | . ; Get processing mode (S-Standard (default), X-Special Code) | 
|---|
| 65 | . S PMODE=$P(MDATA,U,3) | 
|---|
| 66 | . I PMODE="" S PMODE="S" ;default it | 
|---|
| 67 | . ; | 
|---|
| 68 | . ; Default FLAG and value being computed | 
|---|
| 69 | . S FLAG="GFS" | 
|---|
| 70 | . S BPS("X")="" | 
|---|
| 71 | . ; | 
|---|
| 72 | . ; If there is an override, set BPS("X") to it and | 
|---|
| 73 | . ;   only do Format and Set code | 
|---|
| 74 | . I OVERRIDE]"" S FLAG="FS",BPS("X")=OVERRIDE | 
|---|
| 75 | . ; | 
|---|
| 76 | . ; If Special Code mode is set, execute special code instead | 
|---|
| 77 | . ;   of field's Get code and change Flag to FS so Format and | 
|---|
| 78 | . ;   Set code is still done but not GET code | 
|---|
| 79 | . I PMODE="X",OVERRIDE="" D | 
|---|
| 80 | .. S FLAG="FS" | 
|---|
| 81 | .. D XSPCCODE(FORMAT,NODE,RECMIEN) | 
|---|
| 82 | . ; | 
|---|
| 83 | . ; Call XFLDCODE to do processing based on FLAG setting | 
|---|
| 84 | . D XFLDCODE(NODE,FLDIEN,FLAG) | 
|---|
| 85 | Q | 
|---|
| 86 | ; | 
|---|
| 87 | ; Execute Get, Format and/or Set MUMPS code for a NCPDP Field | 
|---|
| 88 | ; | 
|---|
| 89 | ; Parameters:   NODE    -  Segment Node | 
|---|
| 90 | ;               FLDIEN  -  NCPDP Field Definitions IEN | 
|---|
| 91 | ;               FLAG    -  If variable contains: | 
|---|
| 92 | ;                          "G" - Execute Get Code | 
|---|
| 93 | ;                          "F" - Execute Format Code | 
|---|
| 94 | ;                          "S" - Execute S Code | 
|---|
| 95 | ;--------------------------------------------------------------------- | 
|---|
| 96 | XFLDCODE(NODE,FLDIEN,FLAG) ;EP | 
|---|
| 97 | ; 5.1 loops through the 10, 25, 30 nodes | 
|---|
| 98 | ; | 
|---|
| 99 | N FNODE,INDEX,MCODE | 
|---|
| 100 | ; | 
|---|
| 101 | ; Check if record exists and FLAG variable is set correctly | 
|---|
| 102 | ; Changed from Q: to give fatal error - 10/18/2000 | 
|---|
| 103 | I 'FLDIEN D IMPOSS^BPSOSUE("DB,P","TI","FLDIEN="_FLDIEN,,"XFLDCODE",$T(+0)) | 
|---|
| 104 | I '$D(^BPSF(9002313.91,FLDIEN,0)) D IMPOSS^BPSOSUE("DB,P","TI","FLDIEN="_FLDIEN,,"XFLDCODE",$T(+0)) | 
|---|
| 105 | I FLAG="" D IMPOSS^BPSOSUE("DB,P","TI","FLAG null",,"XFLDCODE",$T(+0)) | 
|---|
| 106 | ; | 
|---|
| 107 | ; Loop through Get, Format and Set Code fields and execute code | 
|---|
| 108 | F FNODE=10,25,30 D | 
|---|
| 109 | . I FLAG'[$S(FNODE=10:"G",FNODE=25:"F",FNODE=30:"S",1:"") Q | 
|---|
| 110 | . ; | 
|---|
| 111 | . ; Quit for 111-AM (Segment ID), 478-H7 (Other Amt Claimed Sub Count), and | 
|---|
| 112 | . ;   479-H8 (Other Amt Claimed Sub Qual) | 
|---|
| 113 | . ; 478 and 479 are handled by 480 and 111 is standard field for each segment | 
|---|
| 114 | . I FLDIEN=241!(FLDIEN=240)!(FLDIEN=93) Q | 
|---|
| 115 | . I '$D(^BPSF(9002313.91,FLDIEN,FNODE,0)) D IMPOSS^BPSOSUE("DB","TI","FLDIEN="_FLDIEN,"FNODE="_FNODE,"XFLDCODE",$T(+0)) | 
|---|
| 116 | . ; | 
|---|
| 117 | . ; Loop through the multiple and execute each line | 
|---|
| 118 | . S INDEX=0 | 
|---|
| 119 | . F  S INDEX=$O(^BPSF(9002313.91,FLDIEN,FNODE,INDEX)) Q:'+INDEX  D | 
|---|
| 120 | .. ; | 
|---|
| 121 | .. ; If doing SET code and if this is not the header segment, add the ID prefix | 
|---|
| 122 | .. I FNODE=30,NODE'=100 S BPS("X")=$P($G(^BPSF(9002313.91,FLDIEN,5)),U,1)_BPS("X") | 
|---|
| 123 | .. ; | 
|---|
| 124 | .. ; Get the code and xecute | 
|---|
| 125 | .. S MCODE=$G(^BPSF(9002313.91,FLDIEN,FNODE,INDEX,0)) | 
|---|
| 126 | .. Q:MCODE="" | 
|---|
| 127 | .. Q:$E(MCODE,1)=";" | 
|---|
| 128 | .. X MCODE | 
|---|
| 129 | Q | 
|---|
| 130 | ;---------------------------------------------------------------------- | 
|---|
| 131 | ;Execute Special Code (for a NCPDP Field within a NCPDP Record) | 
|---|
| 132 | ; | 
|---|
| 133 | ;Parameters:    FORMAT   - NCPDP Record Format IEN (9002313.92) | 
|---|
| 134 | ;               NODE     - Global node value (100,110,120,130,140) | 
|---|
| 135 | ;               RECMIEN  - Field Multiple IEN | 
|---|
| 136 | ;--------------------------------------------------------------------- | 
|---|
| 137 | XSPCCODE(FORMAT,NODE,RECMIEN) ;EP - Above and BPSOSHR | 
|---|
| 138 | ; | 
|---|
| 139 | N INDEX,MCODE | 
|---|
| 140 | I '$D(^BPSF(9002313.92,FORMAT,NODE,RECMIEN,0)) D IMPOSS^BPSOSUE("DB,P","TI","no special code there to XECUTE","FORMAT="_FORMAT,"XSPCCODE",$T(+0)) | 
|---|
| 141 | ; | 
|---|
| 142 | S INDEX=0 | 
|---|
| 143 | F  S INDEX=$O(^BPSF(9002313.92,FORMAT,NODE,RECMIEN,1,INDEX)) Q:'+INDEX  D | 
|---|
| 144 | . S MCODE=$G(^BPSF(9002313.92,FORMAT,NODE,RECMIEN,1,INDEX,0)) | 
|---|
| 145 | . Q:MCODE="" | 
|---|
| 146 | . Q:$E(MCODE,1)=";" | 
|---|
| 147 | . X MCODE | 
|---|
| 148 | Q | 
|---|