Чому 18 ідентифікаторів HIPAA важливі для розробників
Якщо ви будуєте будь-який продукт або сервіс, що торкається охорони здоров'я в США, розуміння 18 ідентифікаторів PHI — не просто юридична формальність. Це технічна специфікація, яку потрібно реалізувати в коді.
Помилки тут мають прямі наслідки: штрафи OCR від $100 до $50 000 за порушення (і до $1,9 млн на рік), кримінальна відповідальність за умисні порушення, і нескінченно більші репутаційні збитки.
Повний список 18 ідентифікаторів з технічними деталями
1. Імена (Names)
Що включає: імена та прізвища, ініціали, псевдоніми, подружні прізвища.
Складність виявлення: ВИСОКА
- Імена не мають фіксованого формату
- Контекст важливий: «Майкл» у записі лікаря vs «Майкл» у назві ліків
- Культурні варіації: китайські імена (прізвище першим), арабські імена з «аль-»
Regex-приклад (обмежений):
# Тільки для структурованих полів
^[A-Z][a-z]+ [A-Z][a-z]+$
Рекомендований підхід: NLP-модель (spaCy з мед-NER або Presidio) значно краща за regex.
2. Географічні дані (Geographic data)
Що включає: вулиця, місто, округ, поштові індекси (крім перших 3 цифр), GPS-координати, рівноцінні геокоди.
Виняток Safe Harbor: перші 3 цифри ZIP можна залишити, якщо населення ZIP-зони > 20 000.
Regex для повного ZIP:
\d{5}(-\d{4})?
Regex для частини адреси:
\d+\s+[A-Za-z\s]+(Street|St|Avenue|Ave|Road|Rd|Blvd|Drive|Dr|Lane|Ln|Court|Ct)
3. Дати, що стосуються особи (Dates)
Що включає: дати народження, прийому, виписки, смерті, дати діагнозу, будь-які точні дати.
Виняток: рік можна залишити, якщо особі < 90 років. Для ≥90 — лише «90+».
Regex:
# MM/DD/YYYY
(0?[1-9]|1[0-2])/(0?[1-9]|[12]\d|3[01])/\d{4}
# YYYY-MM-DD
\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])
# Текстові дати
(January|February|March|April|May|June|July|August|September|October|November|December)\s+\d{1,2},?\s+\d{4}
4. Телефонні номери (Phone numbers)
Що включає: домашні, мобільні, робочі телефони, пейджери.
Regex:
(\+1[-.\s]?)?(\(?\d{3}\)?[-.\s]?)?\d{3}[-.\s]?\d{4}
5. Номери факсу (Fax numbers)
Той самий формат, що й телефонні. Важливо перевіряти поля «fax», «факс», «fax number».
6. Електронні адреси (Email addresses)
Regex:
[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}
Увага: медичні email можуть виглядати як dr.smith@hospital.org — ім'я розкрите через email.
7. Номери соціального страхування (SSN)
Regex:
(?!000|666|9\d{2})\d{3}[-\s]?(?!00)\d{2}[-\s]?(?!0000)\d{4}
Замасковані формати: XXX-XX-1234, ***-**-1234 — також потрібно виявляти.
8. Номери медичних записів (Medical record numbers)
Формат варіюється за системою: MRN-123456, 12345678, A1234567.
Виклик: немає стандарту. Потребує специфічних для установи правил або контекстного виявлення.
Presidio custom recognizer:
from presidio_analyzer import Pattern, PatternRecognizer
mrn_pattern = Pattern(name="MRN", regex=r'MRN[:\s]?\d{6,10}', score=0.9)
mrn_recognizer = PatternRecognizer(supported_entity="MRN", patterns=[mrn_pattern])
9. Номери плану медичного страхування (Health plan numbers)
Включає: Medicare beneficiary ID, Medicaid ID, приватні страхові ID.
Medicare Beneficiary ID (MBI):
[1-9][AC-HJ-NP-TV-Z][AC-HJ-NP-TV-Z0-9][0-9][AC-HJ-NP-TV-Z][AC-HJ-NP-TV-Z0-9][0-9][AC-HJ-NP-TV-Z]{2}[0-9]{2}
10. Номери рахунків (Account numbers)
Фінансові рахунки, пов'язані з медичним обслуговуванням: номер рахунку пацієнта, IBAN для міжнародних пацієнтів.
11. Номери сертифікатів/ліцензій (Certificate/license numbers)
Включає: номери медичних ліцензій, NPI (National Provider Identifier).
NPI regex:
NPI[:\s]?\d{10}
12. Ідентифікатори транспортних засобів (Vehicle identifiers)
VIN та номерні знаки — менш поширені в медичних записах, але можуть з'являтися в записах про ДТП або транспортну медицину.
VIN regex:
[A-HJ-NPR-Z0-9]{17}
13. Ідентифікатори та серійні номери пристроїв (Device identifiers)
Критично для IoMT (Internet of Medical Things): кардіостимулятори, інсулінові помпи, носимі пристрої мають унікальні серійні номери.
UDI (Unique Device Identifier):
(\(01\)|01=)\d{14}
14. URL-адреси (Web URLs)
Персональні URL: hospital.org/patient/john-smith-12345.
Regex:
https?://[^\s]+
Увага: деякі URL містять PII в параметрах: ?patient_id=123&name=Smith.
15. IP-адреси (IP addresses)
IPv4:
(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)
IPv6: значно складніший regex, рекомендується бібліотека.
16. Біометричні ідентифікатори (Biometric identifiers)
Включає: відбитки пальців, геометрія руки, малюнок райдужки, аналіз голосу, ДНК.
У текстових медичних записах зустрічаються рідко, але можуть бути в: звітах судово-медичної експертизи, записах про трансплантацію, спортивній медицині.
17. Повноекранні фотографії та зображення (Full-face photographs)
Будь-яке фото, що показує обличчя пацієнта, є PHI. Медичні зображення (рентген, МРТ) стають PHI, якщо містять метадані пацієнта або демонструють унікальні ознаки.
Технічний захід: видалення DICOM-заголовків, де є ім'я та ідентифікатор пацієнта.
18. Будь-які інші унікальні ідентифікатори (Any other unique identifying number)
Це «catch-all» категорія, що покриває:
- Генетичні послідовності ДНК
- Биометричні шаблони
- Будь-який ідентифікатор, специфічний для установи
Автоматизоване виявлення PHI
Рекомендований стек
from presidio_analyzer import AnalyzerEngine
from presidio_analyzer.nlp_engine import NlpEngineProvider
# Налаштування з медичними сутностями
configuration = {
"nlp_engine_name": "spacy",
"models": [{"lang_code": "en", "model_name": "en_core_web_lg"}]
}
provider = NlpEngineProvider(nlp_configuration=configuration)
nlp_engine = provider.create_engine()
analyzer = AnalyzerEngine(nlp_engine=nlp_engine)
# Аналіз тексту
results = analyzer.analyze(
text="Patient John Smith (DOB: 03/15/1958) admitted 01/20/2025",
entities=["PERSON", "DATE_TIME", "EMAIL_ADDRESS", "PHONE_NUMBER", "US_SSN"],
language="en"
)
Пакетна обробка медичних документів
Для клінік та лікарень, що обробляють тисячі документів:
- Структуровані дані (EHR): SQL-запити для виявлення PHI-полів
- Неструктуровані тексти: Presidio + spaCy з медичним NER
- Зображення: OCR + наступний PHI-аналіз тексту
- DICOM: Спеціалізовані DICOM-анонімізатори
Висновок
Правильне виявлення та видалення всіх 18 ідентифікаторів PHI — технічно складне завдання. Regex-підходи покривають структуровані ідентифікатори (SSN, телефони, дати), але неструктурований текст вимагає NLP.
Для реальних медичних застосувань: поєднуйте Presidio (або anonym.legal API) з медично-специфічними моделями, регулярно оновлюйте бази правил, і завжди зберігайте документацію процесу деідентифікації.
Джерела: