metodologia · słownik i mapowanie

LOINC to międzynarodowy język badań — a my mostem między nim a polską rzeczywistością.

Każde badanie laboratoryjne na świecie ma swój kod LOINC. „Glukoza w surowicy, molowo, mmol/L" = 14749-6, i to samo w Warszawie, Chicago i Tokio. LabKarta musi każdy Twój wynik dopasować do właściwego kodu — bo bez tego Apple Zdrowie nie wie, co scalić w trend.

Reguła, na której trzyma się wszystko

Odkryłem to empirycznie testując wiele wariantów: Apple Zdrowie scala wyniki w jeden wykres trendu tylko wtedy, gdy zgadza się PARA:

(kod LOINC) + (nazwa wyświetlana) — oba pola identyczne

Jeśli glukoza z 2023 ma nazwę „Glukoza [stężenie molowe] surowica/osocze", a rok później dostanie „Glukoza we krwi" (przy tym samym kodzie!) — w Apple Zdrowie pojawią się dwa osobne wpisy, każdy z własnym pojedynczym punktem, bez wspólnej historii.

Dlatego polska nazwa w naszym słowniku to nie „etykieta", tylko półklucz produktu. Wybór raz, na lata. Każda korekta zapisu = rozbicie historii u istniejących użytkowników.

Trzy warstwy słownika

Warstwa 1 — słownik seed (to, co widzisz dziś)

Ok. 55 najczęstszych badań (morfologia, biochemia, lipidogram, tarczyca, elektrolity, hormony, koagulologia, kardiologia). Kuratorowany ręcznie, z uwzględnieniem tego, jak polskie laby raportują — molowo (mmol/L, µmol/L), nie masowo jak Amerykanie. To zmienia dobór kodu LOINC.

Przykład: glukoza. Wariant molowy = 14749-6 (mmol/L), wariant masowy = 2345-7 (mg/dL). Polski lab raportuje mmol/L → wybieramy 14749-6. Wybór kodu podąża za jednostką, nie za samą nazwą.

Warstwa 2 — pipeline build-time (PHP)

W folderze loinc-dictionary/ mamy skrypty PHP, które biorą oficjalną tablicę LOINC (~90 000 pojęć) i naszą listę „celowniczą" z aliasami OCR, i produkują gotowy slownik_startowy.json. Uruchamiane raz na pół roku, gdy LOINC wydaje nową wersję (luty i sierpień).

Punktacja dopasowania waży komponent angielski, materiał (surowica/krew), typ wielkości (molowo/masowo — SCnc wybiera wariant molowy) i oczekiwaną jednostkę UCUM. Wpisy poniżej progu trafiają do do_weryfikacji.csv — dobijamy ręcznie z search.loinc.org.

Warstwa 3 — oficjalne polskie tłumaczenie (kanoniczne źródło)

Ministerstwo Zdrowia zleciło UM w Łodzi (razem z PTDL) tłumaczenie ~20 000 pojęć LOINC. Zakończone w lipcu 2023, zdeponowane w oficjalnej bazie LOINC na loinc.org — dostępne za darmo (po rejestracji), również komercyjnie. To docelowe źródło nazw polskich, do którego docelowo przejdziemy w warstwie 2.

W przygotowaniu jest też SSIDL (System Standaryzacji Informacji w Diagnostyce Laboratoryjnej, UMED) — ma być open source, z API HL7/FHIR, i dostarczać mapowania nazwa polska → LOINC bezpośrednio. Kiedy się pojawi, wpięcie się w niego to nasza następna duża integracja.

Ścieżka OCR — czemu tylko Diagnostyka na razie

PDF-y polskich laboratoriów mają jeden techniczny problem: często używają osadzonych subset-fontów bez tablicy ToUnicode. To znaczy, że standardowy ekstraktor tekstu (PDF.js, pdfplumber) zamiast „Hemoglobina" dostaje (cid:53)(cid:24)…. Cyfry się ekstrahują, nazwy — nie.

Nasze rozwiązanie: renderujemy stronę do obrazu i czytamy Tesseractem, jak człowiek. Zaleta: działa niezależnie od tego, jaki font laboratorium zaszyło. Wada: wolniejsze (kilkanaście–kilkadziesiąt sekund na stronę, pierwsze użycie ładuje polski model OCR ~15 MB).

Aktualnie mamy przetestowaną pipeline'ę tylko na czystych PDF-ach wyeksportowanych z konta pacjenta Diagnostyki. Inne pracownie (ALAB, Synevo) i skany — planowana faza uniwersalizacji. Tymczasem dla nich działa ścieżka Parser AI, która nie zależy od konkretnego układu dokumentu.

Angielski użytkownik ma łatwiej

Anglojęzyczna wersja LabCard (labcard.io) korzysta z LOINC LONG_COMMON_NAME jako nazwy kanonicznej — to angielski „display" wprost z bazy LOINC, bez pośrednich tłumaczeń. W polskiej wersji musimy tłumaczyć (i utrzymywać spójność wg reguły pary), po EN po prostu bierzemy oficjalne.

Co, jeśli badania nie ma w słowniku?

Na dziś: pomijamy je (w ścieżce OCR i AI parser) albo nie oferujemy w drzewku (ścieżka ręczna). Świadomie nie pozwalamy wpisywać własnych kodów LOINC z ręki — bo literówka użytkownika w kodzie albo nazwie oznaczałaby rozbicie trendu w Apple Zdrowie na cichaczka.

Jeśli brakuje badania, którego oczekujesz — zgłoś się, dopiszemy w kolejnej wersji słownika. Docelowo z warstwy 3 (UMED/SSIDL) będziemy pobierać cały katalog automatycznie.