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.