| 1 | FBUTL4 ;WOIFO/SAB-FEE BASIS UTILITY ;7/6/2003 | 
|---|
| 2 | ;;3.5;FEE BASIS;**61**;JAN 30, 1995 | 
|---|
| 3 | Q | 
|---|
| 4 | RR(FBRRMK,FBMAX,FBDT,FBRRMKD) ; Prompt for Remittance Remarks | 
|---|
| 5 | ; | 
|---|
| 6 | ; Input | 
|---|
| 7 | ;   FBRRMK - required, array passed by reference | 
|---|
| 8 | ;            will be initialized (killed) | 
|---|
| 9 | ;            array of any entered remark codes | 
|---|
| 10 | ;            format | 
|---|
| 11 | ;              FBRRMK(#)=FBRRMKC | 
|---|
| 12 | ;            where | 
|---|
| 13 | ;              # = sequentially assigned number starting with 1 | 
|---|
| 14 | ;              FBRRMKC = remittance remark (internal value file 162.93) | 
|---|
| 15 | ;   FBMAX  -  optional, number, default to 2 | 
|---|
| 16 | ;             maximum number of remarks that may be entered by user | 
|---|
| 17 | ;   FBDT   -  optional, effective date, FileMan internal format | 
|---|
| 18 | ;             default to current date, used to determine available codes | 
|---|
| 19 | ;   FBRRMKD-  optional, array passed by reference | 
|---|
| 20 | ;             same format as FBRRMK | 
|---|
| 21 | ;             if passed, it will be used to supply default values | 
|---|
| 22 | ;             normally only used when editing an existing payment | 
|---|
| 23 | ; Result (value of $$RR extrinsic function) | 
|---|
| 24 | ;   FBRET  - boulean value (0 or 1) | 
|---|
| 25 | ;             = 1 when process did not end due to time-out or "^" | 
|---|
| 26 | ;             = 0 when process ended due to time-out OR "^" | 
|---|
| 27 | ; Output | 
|---|
| 28 | ;   FBRRMK-  the FBRRMK input array passed by reference will be modified | 
|---|
| 29 | ;            it will contain any entered remarks | 
|---|
| 30 | ; | 
|---|
| 31 | N FBRRMKC,FBCNT,FBEDIT,FBERR,FBI,FBNEW,FBRET | 
|---|
| 32 | N DIR,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
| 33 | S FBRET=1 | 
|---|
| 34 | S FBMAX=$G(FBMAX,2) | 
|---|
| 35 | S FBDT=$G(FBDT,DT) | 
|---|
| 36 | K FBRRMK | 
|---|
| 37 | ; | 
|---|
| 38 | ; if default remarks exist then load them into array | 
|---|
| 39 | I $D(FBRRMKD) M FBRRMK=FBRRMKD | 
|---|
| 40 | S FBCNT=0 | 
|---|
| 41 | I $D(FBRRMK) S FBI=0 F  S FBI=$O(FBRRMK(FBI)) Q:'FBI  S FBCNT=FBCNT+1 | 
|---|
| 42 | ; | 
|---|
| 43 | ASKRR ; multiply prompt for remarks | 
|---|
| 44 | ; | 
|---|
| 45 | ; display current list of remarks when more than 1 allowed | 
|---|
| 46 | I FBMAX>1!(FBCNT>1) D | 
|---|
| 47 | . W !!,"Current list of Remittance Remarks: " | 
|---|
| 48 | . I '$O(FBRRMK(0)) W "none" | 
|---|
| 49 | . S FBI=0 F  S FBI=$O(FBRRMK(FBI)) Q:'FBI  D | 
|---|
| 50 | . . W:$P(FBRRMK(FBI),U)]"" $P($G(^FB(161.93,$P(FBRRMK(FBI),U),0)),U),", " | 
|---|
| 51 | . W ! | 
|---|
| 52 | ; | 
|---|
| 53 | ; prompt for remark | 
|---|
| 54 | ;   if max is 1 and reason already on list then automatically select it | 
|---|
| 55 | I FBMAX=1,FBCNT=1 D | 
|---|
| 56 | . N FBI,FBRRMKC | 
|---|
| 57 | . S FBI=$O(FBRRMK(0)) | 
|---|
| 58 | . S:FBI FBRRMKC=$P(FBRRMK(FBI),U) | 
|---|
| 59 | . I FBRRMKC S Y=FBRRMKC_U_$P($G(^FB(161.93,FBRRMKC,0)),U) | 
|---|
| 60 | E  D  I $D(DTOUT)!$D(DUOUT) S FBRET=0 G EXIT  ; prompt user | 
|---|
| 61 | . S DIR(0)="PO^161.93:EMZ" | 
|---|
| 62 | . S DIR("A")="Select REMITTANCE REMARK" | 
|---|
| 63 | . S DIR("S")="I $P($$RR^FBUTL1(Y,,FBDT),U,4)=1" | 
|---|
| 64 | . S DIR("?")="Select a HIPAA Remittance Remark Code." | 
|---|
| 65 | . S DIR("?",1)="Select a remittance remark code to provide non-financial" | 
|---|
| 66 | . S DIR("?",2)="information critical to understanding the adjudication of the claim." | 
|---|
| 67 | . D ^DIR K DIR | 
|---|
| 68 | ; | 
|---|
| 69 | ; if value was entered then process it and ask another if not max | 
|---|
| 70 | ;I +Y>0 D  G:FBRET=0 EXIT I FBCNT<FBMAX!(FBRRMKC="") G ASKRR | 
|---|
| 71 | I +Y>0 D  G:FBRET=0 EXIT G ASKRR | 
|---|
| 72 | . S FBRRMKC=+Y | 
|---|
| 73 | . ; if specified remark already in list set FBEDIT = it's number | 
|---|
| 74 | . S (FBI,FBEDIT)=0 F  S FBI=$O(FBRRMK(FBI)) Q:'FBI  D  Q:FBEDIT | 
|---|
| 75 | . . I $P(FBRRMK(FBI),U)=FBRRMKC S FBEDIT=FBI | 
|---|
| 76 | . S FBNEW=$S(FBEDIT:0,1:1) ; flag as new if not on list | 
|---|
| 77 | . ; if in list then edit the existing remark | 
|---|
| 78 | . I FBEDIT D  Q:$D(DIRUT)  Q:FBRRMKC="" | 
|---|
| 79 | . . S DIR(0)="162.559,.01" | 
|---|
| 80 | . . S DIR("B")=$P($G(^FB(161.93,FBRRMKC,0)),U) | 
|---|
| 81 | . . D ^DIR K DIR I $D(DTOUT)!$D(DUOUT) S:FBMAX=1 FBRET=0 Q | 
|---|
| 82 | . . I X="@" D  Q  ; "@" removes from list | 
|---|
| 83 | . . . D DEL(FBEDIT) | 
|---|
| 84 | . . I +Y>0 S FBRRMKC=+Y | 
|---|
| 85 | . . ; ensure new value of edited remark is not already on list | 
|---|
| 86 | . . S FBI=0 F  S FBI=$O(FBRRMK(FBI)) Q:'FBI  D  Q:FBRRMKC="" | 
|---|
| 87 | . . . I $P(FBRRMK(FBI),U)=FBRRMKC,FBI'=FBEDIT S FBRRMKC="" W !,$C(7),"     Change was not accepted because the new value is already on the list." | 
|---|
| 88 | . . Q:FBRRMKC="" | 
|---|
| 89 | . . ; upate the existing reason | 
|---|
| 90 | . . S $P(FBRRMK(FBEDIT),U)=FBRRMKC | 
|---|
| 91 | . ; | 
|---|
| 92 | . ; if new reason then add to list | 
|---|
| 93 | . I 'FBEDIT D  Q:FBRRMKC="" | 
|---|
| 94 | . . I (FBCNT+1)>FBMAX D  Q | 
|---|
| 95 | . . . S FBRRMKC="" | 
|---|
| 96 | . . . W !!,$C(7),"ERROR: A new reason would exceed maximum number (",FBMAX,") allowed for this invoice." | 
|---|
| 97 | . . . W !,"  If necessary, a code on the current list can be selected and changed." | 
|---|
| 98 | . . S FBEDIT=$O(FBRRMK(" "),-1)+1 | 
|---|
| 99 | . . S $P(FBRRMK(FBEDIT),U)=FBRRMKC,FBCNT=FBCNT+1 | 
|---|
| 100 | ; | 
|---|
| 101 | ; validate | 
|---|
| 102 | I FBCNT>FBMAX D  G ASKRR | 
|---|
| 103 | . W !!,$C(7),"ERROR: Maximum number of remittance remark codes (",FBMAX,") have been exceeded." | 
|---|
| 104 | ; | 
|---|
| 105 | EXIT ; | 
|---|
| 106 | Q FBRET | 
|---|
| 107 | ; | 
|---|
| 108 | DEL(FBI) ; delete remark from list | 
|---|
| 109 | S FBCNT=FBCNT-1 | 
|---|
| 110 | K FBRRMK(FBI) | 
|---|
| 111 | S FBRRMKC="" | 
|---|
| 112 | W "   (deleted)" | 
|---|
| 113 | Q | 
|---|
| 114 | ; | 
|---|
| 115 | RRL(FBRRMK) ; build list of remittance remarks extrinsic function | 
|---|
| 116 | ; Input | 
|---|
| 117 | ;   FBRRMK- required, array passed by reference | 
|---|
| 118 | ;           array of remittance remarks | 
|---|
| 119 | ;            format | 
|---|
| 120 | ;              FBRRMK(#)=FBRRMKC | 
|---|
| 121 | ;            where | 
|---|
| 122 | ;              # = integer number greater than 0 | 
|---|
| 123 | ;              FBRRMKC = remittance remark (internal value file 162.93) | 
|---|
| 124 | ; Result | 
|---|
| 125 | ;   string containing sorted list (by external code) of remarks | 
|---|
| 126 | ;   format | 
|---|
| 127 | ;      FBRRMKCE 1, FBRRMKCE 2 | 
|---|
| 128 | ;   where | 
|---|
| 129 | ;      FBRRMKCE = remittance remark code (external value) | 
|---|
| 130 | N FBRET | 
|---|
| 131 | N FBRRMKC,FBRRMKCE | 
|---|
| 132 | N FBRRMKS,FBI | 
|---|
| 133 | S FBRET="" | 
|---|
| 134 | ; | 
|---|
| 135 | ; build sorted array containing external values | 
|---|
| 136 | S FBI=0 F  S FBI=$O(FBRRMK(FBI)) Q:'FBI  D | 
|---|
| 137 | . ; obtain internal values | 
|---|
| 138 | . S FBRRMKC=$P(FBRRMK(FBI),U) | 
|---|
| 139 | . ; convert to external values | 
|---|
| 140 | . S FBRRMKCE=$S(FBRRMKC:$P($G(^FB(161.93,FBRRMKC,0)),U),1:"") | 
|---|
| 141 | . ; store in sorted array | 
|---|
| 142 | . S FBRRMKS(FBRRMKCE_U_FBI)=FBRRMKCE_"," | 
|---|
| 143 | ; | 
|---|
| 144 | ; build list from sorted array | 
|---|
| 145 | S FBI="" F  S FBI=$O(FBRRMKS(FBI)) Q:FBI=""  D | 
|---|
| 146 | . S FBRET=FBRET_FBRRMKS(FBI) | 
|---|
| 147 | ; strip trailing "," from list | 
|---|
| 148 | I $E(FBRET,$L(FBRET))="," S FBRET=$E(FBRET,1,$L(FBRET)-1) | 
|---|
| 149 | ; | 
|---|
| 150 | Q FBRET | 
|---|
| 151 | ; | 
|---|
| 152 | ;FBUTL4 | 
|---|