anonym.legal
Назад до блогуОхорона здоров'я

18 ідентифікаторів PHI за HIPAA: Повний посібник з...

Детальний технічний посібник з виявлення та анонімізації всіх 18 ідентифікаторів PHI відповідно до вимог HIPAA Safe Harbor.

April 19, 20269 хв читання
HIPAA 18 identifiersPHI complete detectionMRN detectionNPI DEA numbersHIPAA Safe Harbor compliance

Чому 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"
)

Пакетна обробка медичних документів

Для клінік та лікарень, що обробляють тисячі документів:

  1. Структуровані дані (EHR): SQL-запити для виявлення PHI-полів
  2. Неструктуровані тексти: Presidio + spaCy з медичним NER
  3. Зображення: OCR + наступний PHI-аналіз тексту
  4. DICOM: Спеціалізовані DICOM-анонімізатори

Висновок

Правильне виявлення та видалення всіх 18 ідентифікаторів PHI — технічно складне завдання. Regex-підходи покривають структуровані ідентифікатори (SSN, телефони, дати), але неструктурований текст вимагає NLP.

Для реальних медичних застосувань: поєднуйте Presidio (або anonym.legal API) з медично-специфічними моделями, регулярно оновлюйте бази правил, і завжди зберігайте документацію процесу деідентифікації.

Джерела:

Готові захистити свої дані?

Почніть анонімізувати PII з 285+ типами сутностей на 48 мовах.