This commit is contained in:
2026-04-21 09:44:33 +02:00
parent 9d5e20676b
commit 509ebd1ac4
7 changed files with 375 additions and 38 deletions
+7
View File
@@ -0,0 +1,7 @@
{
"permissions": {
"allow": [
"Bash(.venv/Scripts/python.exe -c ' *)"
]
}
}
+1
View File
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import requests
import pymysql
+196
View File
@@ -22,5 +22,201 @@
{
"original": "505809020 2025-12-10 Šebestová, Zdenka [LZ ortopedie] [Fct. colli femor. l.sin., TEP kyčle l.sin., propuštění na RHB].pdf",
"corrected": "505809020 2025-12-10 Šebestová, Zdenka [PZ ortopedie] [29NOV-10DEC2025 Fct. colli femor. l.sin., TEP kyčle l.sin., propuštění na RHB].pdf"
},
{
"original": "7308100426 2026-04-15 Janda, Martin [Laboratoř] [hypercholesterolemie, S_Urea 9,18, glukóza 5,9, moč erytrocyty 6/ul].pdf",
"corrected": "7308100426 2026-04-15 Janda, Martin [Laboratoř] [Z000 hypercholesterolemie, S_Urea 9,18, glukóza 5,9, moč erytrocyty 6ul].pdf"
},
{
"original": "7454230454 2026-04-15 Zíková, Jana [Laboratoř] [moč kultivace negativní, dg. N309].pdf",
"corrected": "7454230454 2026-04-15 Zíková, Jana [Laboratoř] [N309 moč kultivace negativní].pdf"
},
{
"original": "0460142969 2026-04-15 Strnadová, Natálie [Laboratoř] [E660 koagulace: PT ratio 1,09, INR 1,10, aPTT 1,11, Fibrinogen 3,01].pdf",
"corrected": "0460142969 2026-04-15 Strnadová, Natálie [Laboratoř] [E660 koagulace PT ratio 1.09, INR 1.10, aPTT 1.11, Fibrinogen 3.01, parametry koagulace normální].pdf"
},
{
"original": "5855280013 2026-04-15 Holubová, Daniela [Laboratoř] [Z000 CKD G2, DM, P_Glukóza 6.8, HbA1c 44, TG 1.77, leukocyty 11.9, moč bakterie].pdf",
"corrected": "5855280013 2026-04-15 Holubová, Daniela [Laboratoř] [Z000 CKD G2, DM (prediabetes), P_Glukóza 6.8, HbA1c 44, TG 1.77, leukocyty 11.9, moč bakterie záplava].pdf"
},
{
"original": "5954110184 2026-04-15 Holečková, Hana [Laboratoř] [E119 CKD G2, P_Glukóza 6.7, HbA1c 44, bili 28.13, moč hlen].pdf",
"corrected": "5954110184 2026-04-15 Holečková, Hana [Laboratoř] [E119 CKD G2, P_Glukóza 6.7 (prediabetes), HbA1c 44, bili 28.13, moč hlen].pdf"
},
{
"original": "7556220452 2026-04-09 Štěpánová, Lenka [Laboratoř] [K20 Anti HAV IgM+total pozit, CKD G2, bili konj 5.58].pdf",
"corrected": "7556220452 2026-04-09 Štěpánová, Lenka [Laboratoř] [K20 Anti HAV IgM+, total pozit, postoèkovací protilátky, CKD G2, bili konj 5.58].pdf"
},
{
"original": "5862236435 2026-04-14 Kopřivová, Erika [Laboratoř] [Z000 CKD G2, hypercholesterol, TG 2.16, HbA1c 50, ALT 0.80, moč leukocyty 75ul].pdf",
"corrected": "5862236435 2026-04-14 Kopřivová, Erika [Laboratoř] [Z000 CKD G2, smíšená hypercholesterolémie, TG 2.16, HbA1c 50 (prediabetes), ALT 0.80, moč leukocyty 75ul].pdf"
},
{
"original": "6258130637 2026-04-14 Hofmannová, Oldřiška [Laboratoř] [D500 CKD G2, cholesterol 6.38, LDL 4.37, glukóza 7.1, moč bakterie záplava, nitrity poz].pdf",
"corrected": "6258130637 2026-04-14 Hofmannová, Oldřiška [Laboratoř] [D500 CKD G2, èistá hypercholesterolémie 6.38, LDL 4.37, glukóza 7.1 (DM), moč bakterie záplava, nitrity+].pdf"
},
{
"original": "8256060021 2026-04-10 Karešová, Barbora [Laboratoř] [Z000 hypercholesterol 6.54, LDL 3.73, ALT 1.00, CKD G2, moč erytrocyty 11ul].pdf",
"corrected": "8256060021 2026-04-10 Karešová, Barbora [Laboratoř] [Z000 čistá hypercholesterolémie 6.54, LDL 3.73, ALT 1.00, CKD G2, moč erytrocyty 11ul].pdf"
},
{
"original": "400424003 2026-04-07 Faměra, Jiří [Laboratoř] [I10 CKD G3b, anemie, S_Urea 16.45, kreatinin 155, glukóza 5.7].pdf",
"corrected": "400424003 2026-04-07 Faměra, Jiří [Laboratoř] [I10 CKD G3b, anemie 116, S_Urea 16.45, kreatinin 155, glukóza 5.7].pdf"
},
{
"original": "0460142969 2026-04-08 Strnadová, Natálie [Laboratoř] [E660 S_Urea 2.35, AST 0.18, CKD G1, krevní obraz v normě].pdf",
"corrected": "0460142969 2026-04-08 Strnadová, Natálie [Laboratoř] [E660 krevní obraz v normě].pdf"
},
{
"original": "6055052157 2026-04-08 Frýdlová, Jana [Laboratoř] [Z000 CKD G2, prediabetes HbA1c 43, GGT 6.48, cholesterol 5.69, moč leukocyty 42ul].pdf",
"corrected": "6055052157 2026-04-08 Frýdlová, Jana [Laboratoř] [Z000 CKD G2, prediabetes HbA1c 43, GGT 6.48 (susp. alkohol), čistá hypercholesterolémie 5.69, moč leukocyty 42ul].pdf"
},
{
"original": "7160239911 2026-04-01 Čenanovičová Krkičov, Sanja [Laboratoř] [E789 čistá hypercholesterolémie 6.68, LDL 4.76, Non-HDL 5.0].pdf",
"corrected": "7160239911 2026-04-01 Čenanovičová Krkičov, Sanja [Laboratoř] [E789 čistá hypercholesterolémie 6.68, LDL 4.76, Non-HDL 5.0, CK v pořádku].pdf"
},
{
"original": "6212231861 2026-04-01 Novotný, Vladimír [Laboratoř] [D50 sideropenní anemie 105, Fe 5.9, TIBC 88.2, trombocytóza 609, mikrocytóza].pdf",
"corrected": "6212231861 2026-04-01 Novotný, Vladimír [Laboratoř] [D50 sideropenická anémie 105, Fe 5.9, TIBC 88.2, trombocytóza 609 (známý stav), mikrocytóza].pdf"
},
{
"original": "466103013 2026-04-01 Sixtová, Blanka [Laboratoř] [C188 CKD G3a, urea 12.32, kyselina močová 425, GGT 1.41, trombocytopenie 138].pdf",
"corrected": "466103013 2026-04-01 Sixtová, Blanka [Laboratoř] [C188 CKD G3a, urea 12.32, kyselina močová 425, GGT 1.41, trombocytopenie 138, železa je stále nedostatek].pdf"
},
{
"original": "5601090550 2026-02-25 Psohlavec, Miroslav [Laboratoř] [D53 B12 134 (nízký), folát 7.90, albumin 41.3, celk. bílk. 78].pdf",
"corrected": "5601090550 2026-02-25 Psohlavec, Miroslav [Laboratoř] [D53 B12 134 (nízký), folát 7.90 (nízký), albumin 41.3 OK, celk. bílk. 78 OK].pdf"
},
{
"original": "0061010422 2026-04-10 Brabcová, Barbora [Laboratoř] [Z000 foláty 9.4 (nízké), CKD G2, TSH 2.030, krevní obraz v normě].pdf",
"corrected": "0061010422 2026-04-10 Brabcová, Barbora [Laboratoř] [Z000 foláty 9.4 (nízké), B12 nízké, CKD G2, TSH 2.030, krevní obraz v normě].pdf"
},
{
"original": "486020212 2025-03-27 Krausová, Anna [EGD] [K30 biliární duodenogastrický reflux, jinak přiměřený nález].pdf",
"corrected": "486020212 2025-03-27 Krausová, Anna [gastroskopie] [K30 biliární duodenogastrický reflux, jinak přiměřený nález].pdf"
},
{
"original": "466225409 2026-03-09 Teršová, Eva [Laboratoř] [E118 CKD G3b, glukóza 10.5, HbA1c 34, C-peptid nízký, LDL 3.32, TG 1.52].pdf",
"corrected": "466225409 2026-03-09 Teršová, Eva [Laboratoř] [E118 CKD G3b, glukóza 10.5 (DM), HbA1c 34, C-peptid nízký, LDL 3.32, TG 1.52].pdf"
},
{
"original": "476027162 2026-02-25 Buňková, Zuzana [LZ endokrinologie] [E063 kompenz. imunogenní hypothyreoza, uzlová přestavba, TSH 0.818].pdf",
"corrected": "476027162 2026-02-25 Buňková, Zuzana [LZ endokrinologie] [E063 kompenz. imunogenní hypothyreoza, uzlová přestavba, TSH 0.818, na substituci].pdf"
},
{
"original": "385312025 2026-03-30 Aubrechtová, Iva [medikace] [Furon, Eliquis, Cordarone, Digoxin, Tezeo, Dilatrend, Betaserc, Xalacom].pdf",
"corrected": "385312025 2026-03-30 Aubrechtová, Iva [přehled užívané medikace] [od pacientky].pdf"
},
{
"original": "480529193 2026-01-22 Klikorka, Václav [LZ kardiologie] [I482, EF LK 60%, konc. hypertrofie LK, diastol. dysfunkce I, Mi regurg. 2+].pdf",
"corrected": "480529193 2026-01-22 Klikorka, Václav [LZ kardiologie] [I482, EF LK 60%, konc. hypertrofie LK, diastol. dysfunkce I, Mi regurg. 2+, kontrola +6m].pdf"
},
{
"original": "480529193 2025-09-04 Klikorka, Václav [LZ oční] [Z961 pseudofakie, ERM ok. dx., kontrola OCTA za 4M].pdf",
"corrected": "480529193 2025-09-04 Klikorka, Václav [LZ oční] [Z961 pseudofakie, ERM ok. dx., kontrola OCTA za 4m].pdf"
},
{
"original": "6258130637 2026-02-23 Hofmannová, Oldřiška [LZ interní] [Z039 atypická bolest na hrudi, epigastralgie, vertigo, BNH].pdf",
"corrected": "6258130637 2026-02-23 Hofmannová, Oldřiška [LZ interní] [Z039 atypická bolest na hrudi, přivezla RZS, epigastralgie, vertigo, bez známek ICHS].pdf"
},
{
"original": "436212054 2026-04-01 Těšitelová, Jana [LZ rehabilitační] [M159 st.p. TEP gen l.dx., TEP coxae l.sin., amputace PDK, inkontinence II.st.].pdf",
"corrected": "436212054 2026-04-01 Těšitelová, Jana [PZ Lázně Velichovky] [11MAR-01APR2026, indikace VII_8, M159 st.p. TEP gen l.dx., TEP coxae l.sin., amputace PDK, inkontinence II.st., všechno v lázních OK].pdf"
},
{
"original": "6104260668 2026-04-09 Neuwirth, Richard [LZ neurologie] [R42 vertigo, etanol 1.19 g/l, CT mozku bez ak. změn, kongenit. nystagmus].pdf",
"corrected": "6104260668 2026-04-09 Neuwirth, Richard [LZ neurologie] [RZS, R42 vertigo, etanol 1.19 gl, CT mozku bez ak. změn, kongenit. nystagmus].pdf"
},
{
"original": "5954110184 2015-02-10 Holečková, Hana [LZ radiační onkologie] [C50 l.dx., st.p. ablaci 2004, kompletní remise, MMG norm.].pdf",
"corrected": "5954110184 2015-02-10 Holečková, Hana [LZ radiační onkologie] [vyšetření pro posudkovou komisi, C50 l.dx., st.p. ablaci 2004, kompletní remise, MMG norm.].pdf"
},
{
"original": "5954110184 2011-11-03 Holečková, Hana [LZ chirurgie] [K800 cholecystolithiasis, cholecystektomie laparoskopicky 31.10.2011].pdf",
"corrected": "5954110184 2011-11-03 Holečková, Hana [PZ chirurgie] [30OCT-03NOV2025, K800 cholecystolithiasis, cholecystektomie laparoskopicky 31.10.2011].pdf"
},
{
"original": "5954110184 2023-09-12 Holečková, Hana [LZ endokrinologie] [eutyreoza, malá štítnice, stacion. uzel v PL benigní, BMI 26.7].pdf",
"corrected": "5954110184 2023-09-12 Holečková, Hana [LZ endokrinologie] [eutyreoza, malá štítnice, stacion. uzel v PL benigní, BMI 26.7, kontrola +1r].pdf"
},
{
"original": "5954110184 2023-08-28 Holečková, Hana [LZ rehabilitační] [M7737 ostruha patní kosti, pes planus, ultrazvuk 10x].pdf",
"corrected": "5954110184 2023-08-28 Holečková, Hana [LZ rehabilitace] [M7737 ostruha patní kosti, pes planus, ultrazvuk 10x].pdf"
},
{
"original": "285703963 2026-04-08 Bartáková, Hilde [Laboratoř] [biochemie, KO, Fe: mírná anémie, kreatinin↑, CKD G3b, B12↑].pdf",
"corrected": "285703963 2026-04-08 Bartáková, Hilde [Laboratoř] [biochemie, KO, Fe mírná anémie, kreatinin↑, CKD G3b, B12↑].pdf"
},
{
"original": "495831175 2026-04-07 Kazdová, Daniela [Laboratoř] [biochemie, hepatitidy: ALT↑, GGT↑, ALP↑, anti HAV total pozitivní].pdf",
"corrected": "495831175 2026-04-07 Kazdová, Daniela [Laboratoř] [biochemie, hepatitidy ALT↑, GGT↑, ALP↑, anti HAV total pozitivní, antiHAV IgM negativní, anamnestické protilátky].pdf"
},
{
"original": "5954110184 2024-04-23 Holečková, Hana [LZ radiační onkologie] [C50 l.dx., st.p. ablaci 2004, CR 20 let, MMG benigní, předání PL].pdf",
"corrected": "5954110184 2024-04-23 Holečková, Hana [LZ radiační onkologie] [C50 l.dx., st.p. ablaci 2004, CR 20 let, MMG benigní, předání PL, konec jejich dispenzarizace].pdf"
},
{
"original": "6104260668 2026-04-08 Neuwirth, Richard [Laboratoř] [biochemie, moč: cholesterol↑, TG↑, HDL↓, glukóza↑, CKD G1 A1].pdf",
"corrected": "6104260668 2026-04-08 Neuwirth, Richard [Laboratoř] [biochemie, moč cholesterol↑, TG↑, HDL↓, glukóza↑, CKD G1 A1].pdf"
},
{
"original": "475915002 2026-04-13 Protivová, Lidmila [Laboratoř] [biochemie, moč, KO cholesterol↑, TG↑, glukóza↑, CKD G2, leukocyty↓].pdf",
"corrected": "475915002 2026-04-13 Protivová, Lidmila [Laboratoř] [biochemie, moč, KO smíšená hyperlipidémie, cholesterol↑, TG↑, glukóza↑ (prediabetes), CKD G2, leukocyty↓].pdf"
},
{
"original": "5954110184 2024-03-25 Holečková, Hana [EKG vyšetření] [sinusový rytmus 76/min, intermed poloha, fyziologický záznam].pdf",
"corrected": "5954110184 2024-03-25 Holečková, Hana [EKG] [sinusový rytmus 76min, intermed poloha, fyziologický záznam].pdf"
},
{
"original": "5954110184 2020-03-10 Holečková, Hana [EKG] [sinusový rytmus 64/min, intermed poloha, fyziologický záznam].pdf",
"corrected": "5954110184 2020-03-10 Holečková, Hana [EKG] [sinusový rytmus 64min, intermed poloha, fyziologický záznam].pdf"
},
{
"original": "null 2026-04-20 null [Laboratoř] [moč LEU+2 125 WBC/uL, ERY+3 200 RBC/uL, pH 6, SG 1.005].pdf",
"corrected": "475915054 Žabová, Vìra 2026-04-20 [uritex] [moč LEU+2 125 WBCuL, ERY+3 200 RBCuL, pH 6, SG 1.005].pdf"
},
{
"original": "7409240399 2026-04-17 Bukvář, Martin [LZ ortopedie] [M7126 cystis politelais gensu, st.p. achilodyniam, punkce 14ml, Diop+Kort].pdf",
"corrected": "7409240399 2026-04-17 Bukvář, Martin [LZ ortopedie] [M7126 cystis politelais genu, st.p. achilodyniam, punkce 14ml, aplikace kortikoidu].pdf"
},
{
"original": "515705039 2026-04-01 Cahová, Daniela [LZ neurologie] [G20 Parkinson, klidový třes LHK+LDK, wearing off, bolest pravého ramene, m.deltoideus].pdf",
"corrected": "515705039 2026-04-01 Cahová, Daniela [LZ neurologie] [G20 Parkinson, klidový třes LHK+LDK, wearing off, bolest pravého ramene, m.deltoideus, ad MRI].pdf"
},
{
"original": "7862150351 2018-10-30 Braunspergerová, Eva [RTG LS páteře] [dextrokonvexní skolióza, lordóza, osteochondróza L5-S1, spina bifida oculta S1].pdf",
"corrected": "7862150351 2018-10-30 Braunspergerová, Eva [RTG LS páteře] [dextrokonvexní skolióza, lordóza, osteochondróza L5-S1, spina bifida oculta S1, pooperaèní svorky].pdf"
},
{
"original": "7862150351 2008-09-23 Braunspergerová, Eva [PZ infekční] [hepatitida A, ikterus, BLR↑, HAV IgM poz., anti HCV neg., zlepšení].pdf",
"corrected": "7862150351 2008-09-23 Braunspergerová, Eva [PZ infekce] [19-23SEP2008, hepatitida A, ikterus, BLR↑, HAV IgM poz., anti HCV neg., zlepšení].pdf"
},
{
"original": "5855280013 2023-06-12 Holubová, Daniela [LZ endokrinologie] [adenom l.nadledviny 12x17x12mm, DM2 PAD+inzulin, dyslipidémie].pdf",
"corrected": "5855280013 2023-06-12 Holubová, Daniela [LZ endokrinologie] [adenom l.nadledviny 12x17x12mm, DM2 PAD+inzulin, dyslipidémie, konzultace s výsledky].pdf"
},
{
"original": "5855280013 2026-03-03 Holubová, Daniela [CT břicha] [kalykolitiáza l.ledviny, stacionární adenom l.nadledviny 10mm].pdf",
"corrected": "5855280013 2026-02-27 Holubová, Daniela [CT břicha] [kalykolitiáza l.ledviny, stacionární adenom l.nadledviny 10mm, vyšetøeno pro hematurii].pdf"
},
{
"original": "7862150351 2024-06-12 Braunspergerová, Eva [EKG] [sinusový rytmus 60min, hraniční i.v. vedení, bez čerstvých změn].pdf",
"corrected": "7862150351 2024-06-12 Braunspergerová, Eva [EKG] [sinusový rytmus 60min, hraniční i.v. vedení, bez čerstvých změn, stacionární].pdf"
},
{
"original": "7755260271 2026-04-16 Straková, Barbara [žádost o předání zdravotních informací] [převzetí do péče, žádost o zaslání zdravotní dokumentace].pdf",
"corrected": "7755260271 2026-04-16 Straková, Barbara [žádost o předání zdravotních informací] [převzetí do péče, žádost o zaslání zdravotní dokumentace, VeleòMedic s.r.o.].pdf"
},
{
"original": "7602044780 2026-04-18 Suchý, Vladimír [PZ nefrologie] [SLE+APS, renální biopsie, 2.puls Endoxan, VRE/ESBL, defekt PDK].pdf",
"corrected": "7602044780 2026-04-18 Suchý, Vladimír [PZ nefrologie] [14-18APR2026, SLE+APS, renální biopsie, 2.puls Endoxan, VREESBL, defekt PDK].pdf"
},
{
"original": "6709150613 2026-04-15 Rutrle, Petr [LZ ORL] [laryngitis chr., vestibul.sy vpravo, percepční porucha sluchu bil.].pdf",
"corrected": "6709150613 2026-04-15 Rutrle, Petr [LZ ORL] [laryngitis chr., vestibul.sy vpravo, percepční porucha sluchu bil., ad sono karotid, Rp Helicid, zakoupí Tanakan].pdf"
},
{
"original": "460614110 null Galus, Karel [LZ nefrologie] [CHOPN III.st, DM2, ICHS, CKD-EPI 35ml/s/kor, incipientní dia nefropatie].pdf",
"corrected": "460614110 2026-04-09 Galus, Karel [LZ nefrologie] [CHOPN III.st, DM2, ICHS, CKD-EPI 35mlskor, incipientní dia nefropatie].pdf"
}
]
+109 -38
View File
@@ -25,11 +25,15 @@ if sys.platform == "win32":
import anthropic
from pdf2image import convert_from_path
sys.path.insert(0, str(Path(__file__).parent.parent))
from Knihovny.najdi_dropbox import get_dropbox_root
POPPLER_PATH = r"C:/Poppler/Library/bin"
CORRECTIONS_FILE = Path(__file__).parent / "corrections.json"
TO_PROCESS = Path(__file__).parent / "ToProcess"
PROCESSED = Path(__file__).parent / "Processed"
DOKUMENTACE = Path(r"U:\Dropbox\Ordinace\Dokumentace_zpracovaná")
_DROPBOX = Path(get_dropbox_root())
TO_PROCESS = _DROPBOX / r"Ordinace\Dokumentace_ke_zpracování\Ricoh Fi-8040\KeZpracování"
PROCESSED = _DROPBOX / r"Ordinace\Dokumentace_ke_zpracová\Ricoh Fi-8040\Zpracováno"
DOKUMENTACE = _DROPBOX / r"Ordinace\Dokumentace_zpracovaná"
# ─── Konfigurace ──────────────────────────────────────────────────────────────
@@ -224,8 +228,9 @@ def extract_patient_info(pdf_path: str) -> dict:
"- \"jmeno\": celé jméno pacienta (příjmení + jméno + případný titul)\n"
"- \"rodne_cislo\": rodné číslo pacienta BEZ lomítka (pouze číslice)\n"
"- \"datum_zpravy\": datum zprávy ve formátu YYYY-MM-DD\n"
"- \"typ_dokumentu\": typ dokumentu — pokud je to lékařská/ambulantní/propouštěcí zpráva, "
"použij \"LZ {oddělení}\" (např. \"LZ chirurgie\", \"LZ kardiologie\", \"LZ plicní\", \"LZ ORL\"). "
"- \"typ_dokumentu\": typ dokumentu — "
"\"LZ {oddělení}\" = ambulantní/lékařská zpráva (např. \"LZ chirurgie\", \"LZ kardiologie\", \"LZ plicní\", \"LZ ORL\"); "
"\"PZ {oddělení}\" = propouštěcí zpráva z hospitalizace (např. \"PZ interna\", \"PZ neurologie\"). "
"Jiné typy: \"Laboratoř\", \"CT břicha\", \"MRI páteře\", \"kolonoskopie\", "
"\"operační protokol oční\", \"poukaz FT\", \"diagnostická mamografie\" atd.\n"
"- \"poznamka\": krátká klinická poznámka česky, max 80 znaků\n"
@@ -273,6 +278,75 @@ def extract_patient_info(pdf_path: str) -> dict:
def sanitize_filename(name: str) -> str:
return re.sub(r'[<>:"/\\|?*]', '', name)
def _rename_dialog(nazev: str, info_lines: list[str]) -> str | None:
"""
Tkinter dialog pro schválení / opravu názvu souboru.
Vrátí finální název (s .pdf) nebo None = přeskočit.
"""
import tkinter as tk
result = {"value": None}
root = tk.Tk()
root.tk.call("encoding", "system", "utf-8")
root.title("Schválení názvu souboru")
root.resizable(True, False)
root.attributes("-topmost", True)
pad = {"padx": 12, "pady": 6}
# Informační sekce
frame_info = tk.Frame(root, bg="#f0f0f0", bd=1, relief="sunken")
frame_info.pack(fill="x", **pad)
for line in info_lines:
color = "#b00000" if line.startswith("") else "#004080" if line.startswith("") else "#333"
tk.Label(frame_info, text=line, anchor="w", bg="#f0f0f0",
fg=color, font=("Segoe UI", 10)).pack(fill="x", padx=8, pady=1)
# Pole pro název (bez .pdf)
tk.Label(root, text="Název souboru (bez .pdf):", anchor="w",
font=("Segoe UI", 9, "bold")).pack(fill="x", padx=12, pady=(10, 2))
nazev_bez = nazev[:-4] if nazev and nazev.endswith(".pdf") else (nazev or "")
var = tk.StringVar(value=nazev_bez)
entry = tk.Entry(root, textvariable=var, font=("Segoe UI", 10), width=90)
entry.pack(fill="x", padx=12, pady=(0, 10))
entry.icursor(tk.END)
entry.focus_set()
# Tlačítka
frame_btn = tk.Frame(root)
frame_btn.pack(pady=(0, 12))
def schvalit(event=None):
result["value"] = var.get().strip()
root.destroy()
def preskocit(event=None):
result["value"] = None
root.destroy()
tk.Button(frame_btn, text="✓ Schválit (Enter)", command=schvalit,
bg="#2a7a2a", fg="white", font=("Segoe UI", 10, "bold"),
padx=16, pady=6).pack(side="left", padx=8)
tk.Button(frame_btn, text="✗ Přeskočit (Esc)", command=preskocit,
bg="#7a2a2a", fg="white", font=("Segoe UI", 10),
padx=16, pady=6).pack(side="left", padx=8)
root.bind("<Return>", schvalit)
root.bind("<Escape>", preskocit)
# Vystředit okno na obrazovce
root.update_idletasks()
w, h = root.winfo_width(), root.winfo_height()
sw, sh = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry(f"+{(sw - w) // 2}+{(sh - h) // 2}")
root.mainloop()
return result["value"]
def print_verification(verif: dict, rc_from_scan: str):
"""Vypíše výsledek ověření proti Medicus."""
status = verif["status"]
@@ -292,67 +366,64 @@ def print_verification(verif: dict, rc_from_scan: str):
elif status == "offline":
print(f" — Medicus: nedostupný (offline), ověření přeskočeno")
def interactive_rename(pdf_path: Path, info: dict, verif: dict) -> bool:
"""
Zobrazí výsledek ověření a navržený název, umožní schválení nebo opravu.
Otevře tkinter dialog pro schválení / opravu názvu.
Schválený soubor přesune do Processed/ a smaže z ToProcess/.
"""
# Kontrola duplicit v Dokumentace_zpracovaná
rc = re.sub(r"\D", "", verif["patient"]["rodcis"] if verif.get("patient") else info.get("rodne_cislo") or "")
datum = info.get("datum_zpravy") or ""
duplicity = check_duplicates(rc, datum)
if duplicity:
print()
print(f" ⚠ DUPLICITA — v Dokumentace_zpracovaná již existuje stejný pacient + datum:")
for d in duplicity:
print(f" · {d}")
# Pokud fuzzy match opravil RČ, aktualizuj navržený název souboru
# Oprava RČ při fuzzy matchi
nazev = info.get("nazev_souboru")
if verif["status"] == "fuzzy" and verif.get("rc_corrected") and nazev:
rc_scan = re.sub(r"\D", "", info.get("rodne_cislo") or "")
nazev = nazev.replace(rc_scan, verif["rc_corrected"], 1)
print(f" → Název aktualizován s opraveným RČ")
# Sestavení info řádků pro dialog
rc_from_scan = re.sub(r"\D", "", info.get("rodne_cislo") or "")
status = verif["status"]
patient = verif.get("patient")
info_lines = []
if status == "ok":
info_lines.append(f"✓ Medicus: {patient['prijmeni']} {patient['jmeno']} | RČ {patient['rodcis']}")
elif status == "fuzzy":
info_lines.append(f"⚠ RČ ze skenu '{rc_from_scan}' → opraveno na {verif['rc_corrected']}")
info_lines.append(f" Pacient: {patient['prijmeni']} {patient['jmeno']} | RČ {patient['rodcis']}")
elif status == "not_found":
info_lines.append(f"✗ RČ '{rc_from_scan}' nenalezeno v Medicus")
else:
info_lines.append("— Medicus nedostupný (offline)")
if duplicity:
info_lines.append(f"⚠ DUPLICITA: {', '.join(duplicity)}")
print()
print("" * 70)
if nazev:
print(f" Navržený název: {nazev}")
else:
print(" Nepodařilo se vygenerovat název souboru.")
print(" Otevírám dialog...")
print()
print(" [Enter] = schválit → uložit do Processed a smazat z ToProcess")
print(" [n] = přeskočit")
print(" [text] = zadat správný název (bez .pdf)")
print()
odpoved = _rename_dialog(nazev or "", info_lines)
try:
odpoved = input(" > ").strip()
except (EOFError, KeyboardInterrupt):
print("\nPřerušeno.")
return False
if odpoved.lower() == "n":
if odpoved is None:
print(" Přeskočeno.")
return False
if odpoved == "":
final_name = nazev
else:
if not odpoved.endswith(".pdf"):
odpoved += ".pdf"
final_name = odpoved
if nazev and nazev != final_name:
save_correction(nazev, final_name)
if not odpoved.endswith(".pdf"):
odpoved += ".pdf"
final_name = sanitize_filename(odpoved)
if not final_name:
if nazev and nazev != final_name:
save_correction(nazev, final_name)
if not final_name or final_name == ".pdf":
print(" Název je prázdný, přeskakuji.")
return False
final_name = sanitize_filename(final_name)
dest = PROCESSED / final_name
if dest.exists():
print(f" VAROVÁNÍ: '{final_name}' již existuje v Processed, přeskakuji.")
return False
View File
+62
View File
@@ -0,0 +1,62 @@
import winreg
import json
import os
def get_dropbox_root() -> str:
"""
Vrátí kořenovou cestu složky Dropbox na tomto počítači.
Dropbox může být nainstalován na různých discích (C:, U:, Z: …),
ale struktura složek uvnitř zůstává vždy stejná. Tato funkce zjistí
aktuální umístění, takže ostatní skripty nemusí cestu napevno zadávat.
Postup hledání (v tomto pořadí):
1. Registr HKCU\\Software\\Dropbox\\ks — hlavní klíč, hodnota "Personal"
je uložena jako byte array v kódování UTF-16 LE.
2. Registr HKCU\\Software\\Dropbox\\ks1 — alternativní klíč používaný
novějšími verzemi klienta Dropbox.
3. Soubor info.json v %APPDATA%\\Dropbox\\ nebo %LOCALAPPDATA%\\Dropbox\\
— záložní metoda, pokud registr cestu neobsahuje.
Vrací:
str: Absolutní cesta ke kořenové složce Dropboxu, např. "U:\\Dropbox".
Vyvolá:
RuntimeError: Pokud se cestu nepodaří zjistit žádnou z metod.
Příklad použití:
from Knihovny.najdi_dropbox import get_dropbox_root
import os
ROOT = get_dropbox_root()
PACIENTI = os.path.join(ROOT, "Ordinace", "Pacienti")
"""
# Metoda 1 a 2: registr HKCU\Software\Dropbox\ks a ks1
for subkey in (r"Software\Dropbox\ks", r"Software\Dropbox\ks1"):
try:
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, subkey) as key:
value, _ = winreg.QueryValueEx(key, "Personal")
path = bytes(value).decode("utf-16-le").rstrip("\x00")
if path:
return path
except (OSError, UnicodeDecodeError):
continue
# Metoda 3: záložní — info.json v AppData
for base in (os.getenv("APPDATA", ""), os.getenv("LOCALAPPDATA", "")):
info_path = os.path.join(base, "Dropbox", "info.json")
if os.path.isfile(info_path):
with open(info_path, encoding="utf-8") as f:
info = json.load(f)
path = (info.get("personal") or info.get("business") or {}).get("path", "")
if path:
return path
raise RuntimeError("Nepodařilo se zjistit cestu k Dropboxu.")
if __name__ == "__main__":
root = get_dropbox_root()
print(f"Dropbox root: {root}")