| 1 | BPSECFM ;BHAM ISC/FCS/DRS/VA/DLF - NCPDP Field Format Functions ;05/17/2004
 | 
|---|
| 2 |  ;;1.0;E CLAIMS MGMT ENGINE;**1**;JUN 2004
 | 
|---|
| 3 |  ;----------------------------------------------------------------------
 | 
|---|
| 4 |  ;----------------------------------------------------------------------
 | 
|---|
| 5 |  ;NCPDP Field Format Functions
 | 
|---|
| 6 |  ; These are all $$ functions called from lots of places.
 | 
|---|
| 7 |  ;--------------------------------------------------------
 | 
|---|
| 8 |  ; IHS/SD/lwj 8/28/02 NCPDP 5.1 changes
 | 
|---|
| 9 |  ;  Added a new subroutine to translate the rejection code
 | 
|---|
| 10 |  ;  Added a new subroutine to translate the reason for service code
 | 
|---|
| 11 |  ;  Used for AdvancePCS certification process
 | 
|---|
| 12 |  ;--------------------------------------------------------
 | 
|---|
| 13 |  ;Numeric Format Function
 | 
|---|
| 14 | NFF(X,L) ;EP -
 | 
|---|
| 15 |  Q $E($TR($J("",L-$L(X))," ","0")_X,1,L)
 | 
|---|
| 16 |  ;----------------------------------------------------------------------
 | 
|---|
| 17 |  ;Signed Numeric Field Format
 | 
|---|
| 18 | DFF(X,L) ;
 | 
|---|
| 19 |  N FNUMBER,DOLLAR,CENTS,SVALUE
 | 
|---|
| 20 |  Q:X="" $TR($J("",L)," ","0")
 | 
|---|
| 21 |  S DOLLAR=+$TR($P(X,".",1),"-","")
 | 
|---|
| 22 |  S CENTS=$E($P(X,".",2),1,2)
 | 
|---|
| 23 |  S:$L(CENTS)=0 CENTS="00"
 | 
|---|
| 24 |  S:$L(CENTS)=1 CENTS=CENTS_"0"
 | 
|---|
| 25 |  S SVALUE=$S(X<0:"}JKLMNOPQR",1:"{ABCDEFGHI")
 | 
|---|
| 26 |  S $E(CENTS,2)=$E(SVALUE,$E(CENTS,2)+1)
 | 
|---|
| 27 |  Q $E($TR($J("",L-$L(DOLLAR_CENTS))," ","0")_DOLLAR_CENTS,1,L)
 | 
|---|
| 28 |  ;----------------------------------------------------------------------
 | 
|---|
| 29 |  ;Converts Signed Numeric Field to Decimal Value
 | 
|---|
| 30 | DFF2EXT(X) ;EP -
 | 
|---|
| 31 |  N LCHAR
 | 
|---|
| 32 |  S LCHAR=$E(X,$L(X))
 | 
|---|
| 33 |  S X=$TR(X,"{ABCDEFGHI","0123456789")
 | 
|---|
| 34 |  S X=$TR(X,"}JKLMNOPQR","0123456789")
 | 
|---|
| 35 |  S X=X*.01
 | 
|---|
| 36 |  I "}JKLMNOPQR"[LCHAR S X=X*-1
 | 
|---|
| 37 |  Q $J(+X,$L(+X),2)
 | 
|---|
| 38 |  ;----------------------------------------------------------------------
 | 
|---|
| 39 |  ;Alpha-Numeric Field Format
 | 
|---|
| 40 | ANFF(X,L) ;EP
 | 
|---|
| 41 |  Q $E(X_$J("",L-$L(X)),1,L)
 | 
|---|
| 42 |  ;----------------------------------------------------------------------
 | 
|---|
| 43 |  ;Numerics Field Format
 | 
|---|
| 44 |  ; DUPLICATE TAGS!   commented out this one
 | 
|---|
| 45 |  ; The other one appears to zero fill.
 | 
|---|
| 46 |  ; NFF(X,L) 
 | 
|---|
| 47 |  ; Q $E(X_$J("",L-$L(X)),1,L)
 | 
|---|
| 48 |  ;----------------------------------------------------------------------
 | 
|---|
| 49 |  ;Convert FileManager date into CCYYMMDD format
 | 
|---|
| 50 | DTF1(X) ;EP -
 | 
|---|
| 51 |  N Y,%DT
 | 
|---|
| 52 |  ;Q:X'["." X
 | 
|---|
| 53 |  S X=$P(X,".",1)
 | 
|---|
| 54 |  Q:X="" "00000000"
 | 
|---|
| 55 |  S Y=X D DD^%DT
 | 
|---|
| 56 |  S X=Y,%DT="X" D ^%DT
 | 
|---|
| 57 |  Q:Y=-1 "00000000"
 | 
|---|
| 58 |  S X=Y+17000000
 | 
|---|
| 59 |  Q X
 | 
|---|
| 60 |  ;----------------------------------------------------------------------
 | 
|---|
| 61 |  ;Reformats NDC number
 | 
|---|
| 62 | NDCF(X) ;EP -
 | 
|---|
| 63 |  S X=$TR(X,"-","")
 | 
|---|
| 64 |  I X?11N Q X                                 ; no reformatting needed
 | 
|---|
| 65 |  I $L(X)<11 F I=1:1:(11-$L(X)) S X="0"_X
 | 
|---|
| 66 |  I $L(X)>11 S X=$E(X,2,12)
 | 
|---|
| 67 |  S X=$E(X,1,5)_"-"_$E(X,6,9)_"-"_$E(X,10,11)
 | 
|---|
| 68 |  N Y,I
 | 
|---|
| 69 |  F I=1:1:3 S Y(I)=$P(X,"-",I)
 | 
|---|
| 70 |  S X=$$RJZF(Y(1),5)_$$RJZF(Y(2),4)_$$RJZF(Y(3),2)
 | 
|---|
| 71 |  Q X
 | 
|---|
| 72 |  ;----------------------------------------------------------------------
 | 
|---|
| 73 |  ;Right justify and zero fill X in a string of length L
 | 
|---|
| 74 | RJZF(X,L) ;
 | 
|---|
| 75 |  I $L(X)<L Q $E($TR($J("",L-$L(X))," ","0")_X,1,L)
 | 
|---|
| 76 |  Q $E(X,$L(X)-L+1,$L(X))
 | 
|---|
| 77 |  ;----------------------------------------------------------------------
 | 
|---|
| 78 |  ;Right justify and blank fill X in a string of length L
 | 
|---|
| 79 | RJBF(X,L) ;EP -
 | 
|---|
| 80 |  Q $E($J("",L-$L(X))_X,1,L)
 | 
|---|
| 81 |  ;----------------------------------------------------------------------
 | 
|---|
| 82 |  ;STRIP TEXT of all non-numerics
 | 
|---|
| 83 | STRIPN(TEXT) ;
 | 
|---|
| 84 |  N NUM,I,CH
 | 
|---|
| 85 |  S NUM=""
 | 
|---|
| 86 |  F I=1:1:$L(TEXT) D
 | 
|---|
| 87 |  .S CH=$E(TEXT,I,I)
 | 
|---|
| 88 |  .S:CH?1N NUM=NUM_CH
 | 
|---|
| 89 |  Q NUM
 | 
|---|
| 90 |  ;----------------------------------------------------------------------
 | 
|---|
| 91 |  ;IHS/SD/lwj 8/28/02  NCPDP 5.1 changes
 | 
|---|
| 92 |  ; For the certification process with AdvancePCS, they require that the
 | 
|---|
| 93 |  ; reject explanation appear with the rejection code.  The following
 | 
|---|
| 94 |  ; Additionally, they require that within the DUR segment, the 
 | 
|---|
| 95 |  ; description for the reason for service code also appear (fld 439).
 | 
|---|
| 96 |  ; To accomodate this requirement, the following subroutines were
 | 
|---|
| 97 |  ; created to act as an output transform for the reject codes and the
 | 
|---|
| 98 |  ; reason for service code.  These routine will not currently be used
 | 
|---|
| 99 |  ; any where else, but will be kept in the software in case they are
 | 
|---|
| 100 |  ; needed.
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 | TRANREJ(REJCD) ;EP - REJCD will be the incoming rejection code
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  I $G(REJCD)="" Q ""
 | 
|---|
| 105 |  N REJECT,REJIEN
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  S REJIEN=0
 | 
|---|
| 108 |  S REJIEN=$O(^BPSF(9002313.93,"B",REJCD,REJIEN))  ;find record
 | 
|---|
| 109 |  I REJIEN S REJECT=$P($G(^BPSF(9002313.93,REJIEN,0)),U,2)
 | 
|---|
| 110 |  E  S REJECT="Description not found for rejection code"
 | 
|---|
| 111 |  S REJECT=REJCD_" ("_REJECT_")"
 | 
|---|
| 112 |  S REJECT=$$ANFF(REJECT,50)
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  Q REJECT
 | 
|---|
| 115 |  ;----------------------------------------------------------------------
 | 
|---|
| 116 | TRANSCD(SRVCD) ;EP - SRCCD will be the incoming reason for service code
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  N SCDIEN,SCDESC
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  S SCDIEN=0
 | 
|---|
| 121 |  S SRVCD=$E(SRVCD,1,2)
 | 
|---|
| 122 |  S:$G(SRVCD)'="" SCDIEN=$O(^BPSF(9002313.82439,"B",SRVCD,SCDIEN))  ;find record
 | 
|---|
| 123 |  S:$G(SCDIEN) SCDESC=$P($G(^BPSF(9002313.82439,SCDIEN,0)),U,2)
 | 
|---|
| 124 |  S:$G(SCDESC)="" SCDESC="Description not found for service code"
 | 
|---|
| 125 |  S SCDESC=SRVCD_" ("_SCDESC_" )"
 | 
|---|
| 126 |  S SCDESC=$$ANFF(SCDESC,50)
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  Q SCDESC
 | 
|---|
| 129 |  ;----------------------------------------------------------------------
 | 
|---|