chore: deploy initial code base

This commit is contained in:
Thom Lamb
2026-05-12 10:34:59 -05:00
parent cbe3f6cc09
commit e826bf412b
257 changed files with 6137748 additions and 1 deletions
+120
View File
@@ -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