| [613] | 1 | IBCNEUT1 ;DAOU/ESG - IIV MISC. UTILITIES ;03-JUN-2002
 | 
|---|
 | 2 |  ;;2.0;INTEGRATED BILLING;**184**;21-MAR-94
 | 
|---|
 | 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 |  ; Can't be called from the top
 | 
|---|
 | 6 |  Q
 | 
|---|
 | 7 |  ;
 | 
|---|
 | 8 | FO(VALUE,LENGTH,JUSTIFY,FILL,TRUNC) ; Formatted output function
 | 
|---|
 | 9 |  ;
 | 
|---|
 | 10 |  ; Input parameters:
 | 
|---|
 | 11 |  ;   VALUE    the data to get formatted (required)
 | 
|---|
 | 12 |  ;   LENGTH   the resulting length of the formatted string (required)
 | 
|---|
 | 13 |  ;   JUSTIFY  "L" or "R" to indicate left or right justification
 | 
|---|
 | 14 |  ;               Default is "L" if not passed
 | 
|---|
 | 15 |  ;   FILL     the character to fill in the spaces
 | 
|---|
 | 16 |  ;               Default is a space if not passed
 | 
|---|
 | 17 |  ;   TRUNC    Whether or not to truncate Value if its longer than length
 | 
|---|
 | 18 |  ;               Default is Yes, to truncate if not passed
 | 
|---|
 | 19 |  ;
 | 
|---|
 | 20 |  NEW PAD,Z
 | 
|---|
 | 21 |  I LENGTH>200 S LENGTH=200               ; reasonable length
 | 
|---|
 | 22 |  S JUSTIFY=$G(JUSTIFY,"L")               ; default Left
 | 
|---|
 | 23 |  S FILL=$E($G(FILL)_" ")                 ; default space
 | 
|---|
 | 24 |  S TRUNC=$G(TRUNC,1)                     ; default true
 | 
|---|
 | 25 |  S $P(PAD,FILL,LENGTH-$L(VALUE)+1)=""
 | 
|---|
 | 26 |  S Z=""
 | 
|---|
 | 27 |  ;
 | 
|---|
 | 28 |  ; Check for JUSTIFY being "R" first
 | 
|---|
 | 29 |  I JUSTIFY["R" D  G FOXIT
 | 
|---|
 | 30 |  . I $L(VALUE)'>LENGTH S Z=PAD_VALUE Q
 | 
|---|
 | 31 |  . I 'TRUNC S Z=VALUE Q
 | 
|---|
 | 32 |  . S Z=$E(VALUE,$L(VALUE)-LENGTH+1,$L(VALUE)) Q
 | 
|---|
 | 33 |  . Q
 | 
|---|
 | 34 |  ;
 | 
|---|
 | 35 |  ; JUSTIFY is "L" below
 | 
|---|
 | 36 |  I $L(VALUE)'>LENGTH S Z=$E(VALUE_PAD,1,LENGTH) G FOXIT
 | 
|---|
 | 37 |  I 'TRUNC S Z=VALUE G FOXIT
 | 
|---|
 | 38 |  S Z=$E(VALUE,1,LENGTH)
 | 
|---|
 | 39 |  ;
 | 
|---|
 | 40 | FOXIT ;
 | 
|---|
 | 41 |  Q Z
 | 
|---|
 | 42 |  ;
 | 
|---|
 | 43 |  ;
 | 
|---|
 | 44 | AMLOOK(NAME,ERRFLG,LIST) ; Look-up an ins. co. name in Auto Match
 | 
|---|
 | 45 |  ;
 | 
|---|
 | 46 |  ; Input parameters
 | 
|---|
 | 47 |  ;   NAME       Insurance company name to look for (required)
 | 
|---|
 | 48 |  ;   ERRFLG     Error flag to determine whether or not to return
 | 
|---|
 | 49 |  ;                an array of all hits (optional)
 | 
|---|
 | 50 |  ;   LIST       The array to be built - passed by reference
 | 
|---|
 | 51 |  ;                (optional)
 | 
|---|
 | 52 |  ;                LIST(ins co name)=auto match value
 | 
|---|
 | 53 |  ;
 | 
|---|
 | 54 |  ; Output
 | 
|---|
 | 55 |  ;   The value of this function is either 0 or 1.
 | 
|---|
 | 56 |  ;     0 - no matches in the Auto Match file for this name
 | 
|---|
 | 57 |  ;     1 - at least one match was found in the Auto Match file
 | 
|---|
 | 58 |  ;
 | 
|---|
 | 59 |  NEW FOUND,AMIEN,INSNAME,AMV,AMVSTART,NOMATCH
 | 
|---|
 | 60 |  S FOUND=0                         ; default to not found
 | 
|---|
 | 61 |  KILL LIST                         ; initialize results array
 | 
|---|
 | 62 |  S ERRFLG=+$G(ERRFLG)              ; ERRFLG default is 0 if not present
 | 
|---|
 | 63 |  S NAME=$$TRIM^XLFSTR($G(NAME))    ; strip leading/trailing spaces
 | 
|---|
 | 64 |  I NAME="" G AMLOOKX               ; get out if NAME not present
 | 
|---|
 | 65 |  ;
 | 
|---|
 | 66 |  ; First look for direct hits in the Auto Match file
 | 
|---|
 | 67 |  S AMIEN=$O(^IBCN(365.11,"B",NAME,""))
 | 
|---|
 | 68 |  I AMIEN D
 | 
|---|
 | 69 |  . S FOUND=1
 | 
|---|
 | 70 |  . I 'ERRFLG Q
 | 
|---|
 | 71 |  . S INSNAME=$P($G(^IBCN(365.11,AMIEN,0)),U,2)
 | 
|---|
 | 72 |  . I INSNAME'="" S LIST(INSNAME)=NAME
 | 
|---|
 | 73 |  . Q
 | 
|---|
 | 74 |  ;
 | 
|---|
 | 75 |  ; If we found one and we're not building the array, then exit
 | 
|---|
 | 76 |  I FOUND,'ERRFLG G AMLOOKX
 | 
|---|
 | 77 |  ;
 | 
|---|
 | 78 |  ; Use the first character of the NAME as a seed value to start
 | 
|---|
 | 79 |  ; looping through the Auto Match entries.  Only need to look at
 | 
|---|
 | 80 |  ; entries with the "*" wildcard character.
 | 
|---|
 | 81 |  S AMV=$E(NAME)
 | 
|---|
 | 82 |  F  S AMV=$O(^IBCN(365.11,"B",AMV)) Q:$E(AMV)'=$E(NAME)  D  I FOUND,'ERRFLG Q
 | 
|---|
 | 83 |  . I AMV'["*" Q    ; only looking for wildcarded entries
 | 
|---|
 | 84 |  . ;
 | 
|---|
 | 85 |  . ; Ensure that the first part of NAME is the same as the first
 | 
|---|
 | 86 |  . ; part of the Auto Match value.
 | 
|---|
 | 87 |  . S AMVSTART=$P(AMV,"*",1)
 | 
|---|
 | 88 |  . I AMVSTART'="",$E(NAME,1,$L(AMVSTART))'=AMVSTART Q
 | 
|---|
 | 89 |  . ;
 | 
|---|
 | 90 |  . ; Build the NOMATCH variable and check it
 | 
|---|
 | 91 |  . D AMC("NAME",AMV,.NOMATCH,0)
 | 
|---|
 | 92 |  . I @NOMATCH Q
 | 
|---|
 | 93 |  . ;
 | 
|---|
 | 94 |  . ; We've got a match so process this accordingly
 | 
|---|
 | 95 |  . S FOUND=1
 | 
|---|
 | 96 |  . I 'ERRFLG Q
 | 
|---|
 | 97 |  . S AMIEN=$O(^IBCN(365.11,"B",AMV,""))
 | 
|---|
 | 98 |  . S INSNAME=$P($G(^IBCN(365.11,+AMIEN,0)),U,2)
 | 
|---|
 | 99 |  . I INSNAME'="" S LIST(INSNAME)=AMV
 | 
|---|
 | 100 |  . Q
 | 
|---|
 | 101 |  ;
 | 
|---|
 | 102 |  ; If we found one and we're not building the array, then exit
 | 
|---|
 | 103 |  I FOUND,'ERRFLG G AMLOOKX
 | 
|---|
 | 104 |  ;
 | 
|---|
 | 105 |  ; Now we need to look at the Auto Match entries which start with
 | 
|---|
 | 106 |  ; the "*" wildcard character.
 | 
|---|
 | 107 |  S AMV="*"
 | 
|---|
 | 108 |  F  S AMV=$O(^IBCN(365.11,"B",AMV)) Q:$E(AMV)'="*"  D  I FOUND,'ERRFLG Q
 | 
|---|
 | 109 |  . D AMC("NAME",AMV,.NOMATCH,0)    ; build the NOMATCH variable
 | 
|---|
 | 110 |  . I @NOMATCH Q                    ; check it
 | 
|---|
 | 111 |  . S FOUND=1                       ; We've got a match
 | 
|---|
 | 112 |  . I 'ERRFLG Q
 | 
|---|
 | 113 |  . S AMIEN=$O(^IBCN(365.11,"B",AMV,""))
 | 
|---|
 | 114 |  . S INSNAME=$P($G(^IBCN(365.11,+AMIEN,0)),U,2)
 | 
|---|
 | 115 |  . I INSNAME'="" S LIST(INSNAME)=AMV
 | 
|---|
 | 116 |  . Q
 | 
|---|
 | 117 |  ;
 | 
|---|
 | 118 | AMLOOKX ;
 | 
|---|
 | 119 |  Q FOUND
 | 
|---|
 | 120 |  ;
 | 
|---|
 | 121 |  ;
 | 
|---|
 | 122 | AMC(NAME,AMV,MATCH,FLAG) ; Auto Match check function
 | 
|---|
 | 123 |  ;
 | 
|---|
 | 124 |  ; NAME   - literal variable name to be matched; enclosed in quotes
 | 
|---|
 | 125 |  ; AMV    - Auto Match Value to be pattern matched
 | 
|---|
 | 126 |  ; MATCH  - Variable passed by reference; returns condition check command
 | 
|---|
 | 127 |  ; FLAG   - if 1, then pattern match check is positive (default)
 | 
|---|
 | 128 |  ;        - if 0, then pattern match check is negative
 | 
|---|
 | 129 |  ;
 | 
|---|
 | 130 |  NEW NUMPCE,J,PCE,PCE1
 | 
|---|
 | 131 |  S FLAG=$G(FLAG,1)
 | 
|---|
 | 132 |  S MATCH=NAME_$S('FLAG:"'?",1:"?")
 | 
|---|
 | 133 |  S NUMPCE=$L(AMV,"*")
 | 
|---|
 | 134 |  F J=1:1:NUMPCE D
 | 
|---|
 | 135 |  . S PCE=$P(AMV,"*",J),PCE1=""
 | 
|---|
 | 136 |  . I PCE'="" S PCE1="1"""_PCE_""""
 | 
|---|
 | 137 |  . S MATCH=MATCH_PCE1
 | 
|---|
 | 138 |  . I J'=NUMPCE S MATCH=MATCH_".E"
 | 
|---|
 | 139 |  . Q
 | 
|---|
 | 140 | AMCX ;
 | 
|---|
 | 141 |  Q
 | 
|---|
 | 142 |  ;
 | 
|---|
 | 143 |  ;
 | 
|---|
 | 144 | AMSEL(AMARRAY) ; Select an insurance company name from an Auto Match hit list
 | 
|---|
 | 145 |  ;
 | 
|---|
 | 146 |  ; Input
 | 
|---|
 | 147 |  ;   Array of Auto Match hits.  The structure of this array is the
 | 
|---|
 | 148 |  ;   same as that returned by the call to $$AMLOOK above.
 | 
|---|
 | 149 |  ;   AMARRAY(ins co name) = Auto Match value
 | 
|---|
 | 150 |  ;
 | 
|---|
 | 151 |  ; Output
 | 
|---|
 | 152 |  ;   Insurance Company name (subscript of input array), or
 | 
|---|
 | 153 |  ;   -1 if user entered "^" or timed out, or
 | 
|---|
 | 154 |  ;   0 if user didn't select any of these names
 | 
|---|
 | 155 |  ;   No changes are made to the array.
 | 
|---|
 | 156 |  ;
 | 
|---|
 | 157 |  NEW SEL,NM,CNT,MSG,MSGNUM,CH,TXT
 | 
|---|
 | 158 |  NEW DIR,X,Y,DIRUT,DTOUT,DUOUT,DIROUT
 | 
|---|
 | 159 |  S SEL=0
 | 
|---|
 | 160 |  I '$D(AMARRAY) G AMSELX    ; Get out if array not passed in
 | 
|---|
 | 161 |  ;
 | 
|---|
 | 162 |  ; Display the contents of the array
 | 
|---|
 | 163 |  S MSG(1)="Results of Auto Match search"
 | 
|---|
 | 164 |  S MSG(2)=""
 | 
|---|
 | 165 |  S MSG(3)="  "_$$FO("Insurance Company Name",30)_"   Auto Match Value"
 | 
|---|
 | 166 |  S MSG(4)="  "_$$FO("----------------------",30)_"   ----------------"
 | 
|---|
 | 167 |  S MSG(1,"F")="!!"
 | 
|---|
 | 168 |  S NM="",MSGNUM=$O(MSG(""),-1),CNT=0,CH=""
 | 
|---|
 | 169 |  F  S NM=$O(AMARRAY(NM)) Q:NM=""  D
 | 
|---|
 | 170 |  . S CNT=CNT+1
 | 
|---|
 | 171 |  . S TXT=$$FO(NM,30)_"   "_AMARRAY(NM)
 | 
|---|
 | 172 |  . S MSGNUM=MSGNUM+1
 | 
|---|
 | 173 |  . S MSG(MSGNUM)="  "_TXT
 | 
|---|
 | 174 |  . I $L(CH)>440 Q
 | 
|---|
 | 175 |  . I CH="" S CH=CNT_":"_TXT       ; building the set of codes string
 | 
|---|
 | 176 |  . E  S CH=CH_";"_CNT_":"_TXT     ; for the DIR reader later on
 | 
|---|
 | 177 |  . Q
 | 
|---|
 | 178 |  ;
 | 
|---|
 | 179 |  ; Get out if there are no entries in the list
 | 
|---|
 | 180 |  I 'CNT G AMSELX
 | 
|---|
 | 181 |  ;
 | 
|---|
 | 182 |  ; One more blank line in the display
 | 
|---|
 | 183 |  S MSGNUM=MSGNUM+1
 | 
|---|
 | 184 |  S MSG(MSGNUM)=""
 | 
|---|
 | 185 |  ;
 | 
|---|
 | 186 |  ; Display the entries in the list
 | 
|---|
 | 187 |  DO EN^DDIOL(.MSG)
 | 
|---|
 | 188 |  ;
 | 
|---|
 | 189 |  ; Ask the first question
 | 
|---|
 | 190 |  S DIR(0)="YO"
 | 
|---|
 | 191 |  S DIR("A")="Would you like to select this insurance company"
 | 
|---|
 | 192 |  I CNT>1 S DIR("A")="Would you like to select one of these insurance companies"
 | 
|---|
 | 193 |  S DIR("B")="Yes"
 | 
|---|
 | 194 |  D ^DIR K DIR
 | 
|---|
 | 195 |  I $D(DIRUT) S SEL=-1 G AMSELX
 | 
|---|
 | 196 |  I 'Y S SEL=0 G AMSELX
 | 
|---|
 | 197 |  ;
 | 
|---|
 | 198 |  ; User said Yes to the above question
 | 
|---|
 | 199 |  ; Get out if there is only one entry in the array
 | 
|---|
 | 200 |  I CNT=1 S SEL=$O(AMARRAY("")) G AMSELX
 | 
|---|
 | 201 |  ;
 | 
|---|
 | 202 |  ; At this point we know there are multiple entries in the list
 | 
|---|
 | 203 |  S DIR(0)="SO^"_CH
 | 
|---|
 | 204 |  S DIR("A")="Please choose an insurance company"
 | 
|---|
 | 205 |  D ^DIR K DIR
 | 
|---|
 | 206 |  I $D(DIRUT) S SEL=-1 G AMSELX
 | 
|---|
 | 207 |  I 'Y S SEL=0 G AMSELX
 | 
|---|
 | 208 |  S SEL=$$TRIM^XLFSTR($E(Y(0),1,30),"R")    ; strip trailing spaces
 | 
|---|
 | 209 | AMSELX ;
 | 
|---|
 | 210 |  Q SEL
 | 
|---|
 | 211 |  ;
 | 
|---|