MacroHealth Internal

Data Obfuscation Using Shovel Expressions

In order to protect PHI from inbound documents, shovel expressions need to be added for the fields containing PHI so that they can be replaced.

The following page details the fields that need to be replacement and the shovel expressions to apply.

834

PHI

Goal

Field Replaced

Subcripber's Zip code

Truncate the Subscriber’s Zip code to the first 3 digits

N403

atFieldModify(<builtin:document/primary|builtin:key/data/segments|builtin:array_filter_by_key/2000|builtin:key/2000|builtin:array_filter_by_key/2100A|builtin:key/2100A|builtin:array_filter_by_key/N403|builtin:key/N403/value>, leftString(getContext(), 3))

~ ~ ~

PHI

Goal

Field Replaced

Date of birth

Replace the Date of birth with the age calculated using current system time. If the age is greater than 89 then set it as 89

DMG02

atFieldModify(<builtin:document/primary|builtin:key/data/segments|builtin:array_filter_by_key/2000|builtin:key/2000|builtin:array_filter_by_key/2100A|builtin:key/2100A|builtin:array_filter_by_key/DMG02|builtin:key/DMG02>, let birth = createDateTime(readField(<builtin:key/value>), \"yyyyMMdd\", \"UTC\") in let age = floor(divide(subtract(currentTime(), birth), 31536000000), 0) in atFieldModify(<builtin:key/value>, if(gt(age, 89), 89, age)))

837i

PHI

Goal

Field Replaced

Zip code

Truncate the Subscriber’s Zip code to the first 3 digits

N403

atFieldModify(<builtin:document/primary|builtin:key/data/segments|builtin:array_filter_by_key/2000B|builtin:key/2000B|builtin:array_filter_by_key/2010BA|builtin:key/2010BA|builtin:array_filter_by_key/N403|builtin:key/N403/value>, leftString(getContext(), 3))

~ ~ ~

PHI

Goal

Field Replaced

Subcriber ID

Hash the subscriber ID

NM109

atFieldModify(<builtin:document/primary|builtin:key/data/segments|builtin:array_filter_by_key/2000B|builtin:key/2000B|builtin:array_filter_by_key/2010BA|builtin:key/2010BA|builtin:array_filter_by_key/NM109|builtin:key/NM109/value>, strSHA256(getContext()))

~ ~ ~

PHI

Goal

Field Replaced

Date of birth

Modify the date of birth to the patient’s age instead (calculated using the date of birth (DMG02) and service start date (DTP03)). If the age is greater than 89 then set it as 89

DMG02

atFieldModify(<builtin:document/primary|builtin:key/data>, let serviceStartDate = createDateTime(leftString(getElemAt(flatten(readField(<builtin:key/segments|builtin:array_filter_by_key/2000B|builtin:key/2000B|builtin:array_filter_by_key/2300|builtin:key/2300|builtin:array_filter_by_key_value/DTP01/value=434|builtin:key/DTP03/value>)), 0), 8), "yyyyMMdd", "UTC") in let birthDate = createDateTime(getElemAt(flatten(readField(<builtin:key/segments|builtin:array_filter_by_key/2000B|builtin:key/2000B|builtin:array_filter_by_key/2010BA|builtin:key/2010BA|builtin:array_filter_by_key/DMG02|builtin:key/DMG02/value>)), 0), "yyyyMMdd", "UTC") in let age = floor(divide(subtract(serviceStartDate, birthDate), 31536000000), 0) in atFieldModify(<builtin:key/segments|builtin:array_filter_by_key/2000B|builtin:key/2000B|builtin:array_filter_by_key/2010BA|builtin:key/2010BA|builtin:array_filter_by_key/DMG02|builtin:key/DMG02/value>, if(gt(age, 89), 89, age)))

~ ~ ~

PHI

Goal

Field Replaced

Service start and end dates

Modify the service start and end date to truncated service start date (year/month) and span of service in days

DTP03

atFieldModify(<builtin:document/primary|builtin:key/data/segments|builtin:array|builtin:key/2000B|builtin:array|builtin:key/2300|builtin:array_filter_by_key_value/DTP01/value=434|builtin:key/DTP03>, let dates = readField(<builtin:key/value>) in let start = leftString(dates, 8) in let end = rightString(dates, 8) in atFieldModify(<builtin:key/value>, concat(leftString(start, 6), concat(", ", add(divide(subtract(createDateTime(end, "yyyyMMdd", "UTC"), createDateTime(start, "yyyyMMdd", "UTC")), 86400000), 0)))))
837p

PHI

Goal

Field Replaced

Zip code

Truncate the Subscriber’s Zip code to the first 3 digits

N403

atFieldModify(<builtin:document/primary|builtin:key/data/segments|builtin:array_filter_by_key/2000C|builtin:key/2000C|builtin:array_filter_by_key/2010CA|builtin:key/2010CA|builtin:array_filter_by_key/N403|builtin:key/N403/value>, leftString(getContext(), 3))

~ ~ ~

PHI

Goal

Field Replaced

Subcriber ID

Hash the subscriber ID

NM109

atFieldModify(<builtin:document/primary|builtin:key/data/segments|builtin:array_filter_by_key/2000B|builtin:key/2000B|builtin:array_filter_by_key/2010BA|builtin:key/2010BA|builtin:array_filter_by_key/NM109|builtin:key/NM109/value>, strSHA256(getContext()))

~ ~ ~

PHI

Goal

Field Replaced

Date of birth

Modify the date of birth to the patient’s age instead (calculated using the date of birth (DMG02) and service start date (DTP03)). If the age is greater than 89 then set it as 89

DMG02 in 2010CA

atFieldModify(<builtin:document/primary|builtin:key/data>, let serviceStartDate = createDateTime(leftString(getElemAt(flatten(readField(<builtin:key/segments|builtin:array_filter_by_key/2000C|builtin:key/2000C|builtin:array_filter_by_key/2300|builtin:key/2300|builtin:array_filter_by_key/2400|builtin:key/2400|builtin:array_filter_by_key/DTP03|builtin:key/DTP03/value>)), 0), 8), \"yyyyMMdd\", \"UTC\") in let birthDate = createDateTime(getElemAt(flatten(readField(<builtin:key/segments|builtin:array_filter_by_key/2000C|builtin:key/2000C|builtin:array_filter_by_key/2010CA|builtin:key/2010CA|builtin:array_filter_by_key/DMG02|builtin:key/DMG02/value>)), 0), \"yyyyMMdd\", \"UTC\") in let age = floor(divide(subtract(serviceStartDate, birthDate), 31536000000), 0) in atFieldModify(<builtin:key/segments|builtin:array_filter_by_key/2000C|builtin:key/2000C|builtin:array_filter_by_key/2010CA|builtin:key/2010CA|builtin:array_filter_by_key/DMG02|builtin:key/DMG02/value>, if(gt(age, 89), 89, age)))

~ ~ ~

PHI

Goal

Field Replaced

Service start and end dates

Modify the service start and end date to truncated service start date (year/month)

DTP03

atFieldModify(<builtin:document/primary|builtin:key/data|builtin:key/segments|builtin:array_filter_by_key/2000C|builtin:key/2000C|builtin:array_filter_by_key/2300|builtin:key/2300|builtin:array_filter_by_key/2400|builtin:key/2400|builtin:array_filter_by_key/DTP03|builtin:key/DTP03/value>, leftString(getContext(), 6))