chore: deploy initial code base
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
## Routine to transform given NDC code (v\_ndc) to HIPAA 11-digit format (ret\_ndc)
|
||||
|
||||
### Define variables
|
||||
|
||||
- v\_ndc = value of source NDC to be normalized
|
||||
- v\_rsab = RxNorm root source abbreviation (SAB)
|
||||
- ret\_ndc = string(50); 'the normalized NDC
|
||||
- v\_format = string(50); 'the format of source NDC code
|
||||
|
||||
### Find the format of source NDC value to be normalized
|
||||
|
||||
### Format can vary from source to source
|
||||
```
|
||||
IF LEN(v_ndc) - LEN(REPLACE (v_ndc, '-')) = 2 ## If NDC string contains 2 dashes
|
||||
THEN ## find the format of the NDC string. Format could be 6-4-2, 6-4-1, 5-4-2, etc.
|
||||
v_format =
|
||||
LEN (SUBSTR (v_ndc, 1, INSTR (v_ndc, '-') - 1)) ## find number of digits before first dash
|
||||
+ '-'
|
||||
+ LEN (SUBSTR (v_ndc,
|
||||
INSTR (v_ndc, '-') + 1, ## digit number after first dash
|
||||
INSTR (v_ndc, '-', 1, 2) - INSTR (v_ndc, '-') -1 ## number of digits between first and second dash
|
||||
)
|
||||
) ## find number of digits between the dashes
|
||||
+ '-'
|
||||
+ LEN (SUBSTR (v_ndc, INSTR (v_ndc, '-', 1, 2) + 1)) ## number of digits after second dash
|
||||
END IF ## v_format now contains ‘X-X-X’
|
||||
```
|
||||
### Format has been identified. Convert into normalized NDC
|
||||
```
|
||||
IF v_format IS NOT NULL ## source NDC string contains dashes
|
||||
THEN
|
||||
IF v_format = '6-4-2' ## drop first digit of string
|
||||
THEN
|
||||
ret_ndc =
|
||||
SUBSTR (v_ndc, 2, 5) ## last 5 digits of number before first dash
|
||||
+ SUBSTR (v_ndc, 8, 4) ## all four digits after first dash
|
||||
+ SUBSTR (v_ndc, 13, 2) ## last 2 digits after second dash
|
||||
ELSE IF v_format = '6-4-1' ## drop first digit of string
|
||||
THEN
|
||||
ret_ndc =
|
||||
SUBSTR (v_ndc, 2, 5)
|
||||
+ SUBSTR (v_ndc, 8, 4)
|
||||
+ '0' ## pad last digit to 2 chars
|
||||
+ SUBSTR (v_ndc, 13, 1)
|
||||
ELSE IF v_format = '6-3-2' ## drop first digit of string
|
||||
THEN
|
||||
ret_ndc =
|
||||
SUBSTR (v_ndc, 2, 5)
|
||||
+ '0' ## pad second digit to 4 chars
|
||||
+ SUBSTR (v_ndc, 8, 3)
|
||||
+ SUBSTR (v_ndc, 12, 2)
|
||||
ELSE IF v_format = '6-3-1' ## drop first digit of string
|
||||
THEN
|
||||
ret_ndc =
|
||||
SUBSTR (v_ndc, 2, 5)
|
||||
+ '0' ## pad second digit to 4 chars
|
||||
+ SUBSTR (v_ndc, 8, 3)
|
||||
+ '0' ## pad third digit to 2 chars
|
||||
+ SUBSTR (v_ndc, 12, 1)
|
||||
ELSE IF v_format = '5-4-2' ## keep all digits
|
||||
THEN
|
||||
ret_ndc =
|
||||
SUBSTR (v_ndc, 1, 5)
|
||||
+ SUBSTR (v_ndc, 7, 4)
|
||||
+ SUBSTR (v_ndc, 12, 2)
|
||||
ELSE IF v_format = '5-4-1' ## keep all digits
|
||||
THEN
|
||||
ret_ndc =
|
||||
SUBSTR (v_ndc, 1, 5)
|
||||
+ SUBSTR (v_ndc, 7, 4)
|
||||
+ '0' ## pad third digit to 2 chars
|
||||
+ SUBSTR (v_ndc, 12, 1)
|
||||
ELSE IF v_format = '5-3-2' ## keep all digits
|
||||
THEN
|
||||
ret_ndc =
|
||||
SUBSTR (v_ndc, 1, 5)
|
||||
+ '0' ## pad second digit to 4 chars
|
||||
+ SUBSTR (v_ndc, 7, 3)
|
||||
+ SUBSTR (v_ndc, 11, 2)
|
||||
ELSE IF v_format = '4-4-2' ## keep all digits
|
||||
THEN
|
||||
ret_ndc =
|
||||
'0' ## pad first digit to 5 chars
|
||||
+ SUBSTR (v_ndc, 1, 4)
|
||||
+ SUBSTR (v_ndc, 6, 4)
|
||||
+ SUBSTR (v_ndc, 11, 2)
|
||||
END IF
|
||||
```
|
||||
#### If NDC passed has 11 digits without any '-' then return input NDC as Normalized NDC value
|
||||
|
||||
#### NDC string is already in normalized format, it does not contain any dashes
|
||||
```
|
||||
ELSE IF INSTR (v_ndc, '-') = 0 AND LEN (v_ndc) = 11
|
||||
THEN
|
||||
ret_ndc = v_ndc
|
||||
```
|
||||
#### If NDC passed has 12 digits and first char is '0' and its from VANDF then trim first char
|
||||
#### VA sometimes pads '0' to make it 12 digit NDC
|
||||
```
|
||||
ELSE IF INSTR (v_ndc, '-') = 0 ## no dashes in string
|
||||
AND LEN (v_ndc) = 12
|
||||
AND SUBSTR (v_ndc, 1, 1) = '0' ## first digit is 0
|
||||
AND v_rsab = 'VANDF'
|
||||
THEN
|
||||
ret_ndc = SUBSTR (v_ndc, 2) ## return all digits except first char which is 0
|
||||
END IF
|
||||
```
|
||||
#### Replace '\*' with '0' as some of the NDCs from MTHFDA contain \* instead of 0
|
||||
```
|
||||
ret_ndc = REPLACE (ret_ndc, '\*', '0')
|
||||
```
|
||||
#### Check to see if NDC value contains any Alphanumeric values, if yes, then its an invalid NDC code
|
||||
```
|
||||
IF TRIM (TRANSLATE (ret_ndc, '1234567890', ' ')) IS NOT NULL
|
||||
THEN
|
||||
ret_ndc = ''
|
||||
END IF
|
||||
RETURN ret_ndc
|
||||
```
|
||||
### For any other cases, return NULL. String cannot be normalized
|
||||
Reference in New Issue
Block a user