notebookvb
This commit is contained in:
@@ -0,0 +1,76 @@
|
|||||||
|
# KdoJeLekarApp – Registrující lékař z VZP B2B
|
||||||
|
|
||||||
|
## Přehled
|
||||||
|
|
||||||
|
Aplikace zobrazí registrujícího lékaře pacienta (praktický lékař, gynekolog, stomatolog a další) dotazem na VZP B2B API. Spouští se z Medicusu nad vybraným pacientem.
|
||||||
|
|
||||||
|
## Soubory
|
||||||
|
|
||||||
|
| Soubor | Popis |
|
||||||
|
|--------|-------|
|
||||||
|
| `KdoJeLekarApp.py` | Hlavní skript (customtkinter GUI) |
|
||||||
|
| `KdoJeLekarApp.spec` | PyInstaller konfigurace |
|
||||||
|
| `KdoJeLekarApp.ico` | Ikona EXE (konvertována z icons8-physician-60.png) |
|
||||||
|
| `dist/KdoJeLekarApp.exe` | Spustitelný EXE |
|
||||||
|
|
||||||
|
## Konfigurace v Medicusu
|
||||||
|
|
||||||
|
V menu **Konfigurace > Externí programy**:
|
||||||
|
|
||||||
|
| Položka | Hodnota |
|
||||||
|
|---------|---------|
|
||||||
|
| **Program** | `U:\OrdinaceProjekt\Medicus\Externi\KdoJeLekar\dist\KdoJeLekarApp.exe` |
|
||||||
|
| **Příkazový řádek** | `"U:\OrdinaceProjekt\Medicus\Externi\KdoJeLekar\dist\KdoJeLekarApp.exe" %JMENO% %PRIJMENI% %RODCIS%` |
|
||||||
|
| **Pacient** | ✓ |
|
||||||
|
| **Menu** | Kdo je lékař |
|
||||||
|
|
||||||
|
## VZP B2B API
|
||||||
|
|
||||||
|
- **Endpoint:** `https://prod.b2b.vzp.cz/B2BProxy/HttpProxy/RegistracePojistencePZSB2B`
|
||||||
|
- **Certifikát:** `U:\OrdinaceProjekt\Insurance\Certificates\picka.pfx` / heslo viz `KdoJeLekarApp.py`
|
||||||
|
- **Knihovna:** `Knihovny/vzpb2b_client.py` → metody `registrace_lekare()` a `parse_registrace_lekare()`
|
||||||
|
- VZP B2B je **centrální endpoint pro všechny pojišťovny** — vrací pojištěnce VZP i ostatních pojišťoven (ČPZP, OZP atd.) na základě mezipojišťovnické dohody
|
||||||
|
|
||||||
|
## Důležité technické detaily
|
||||||
|
|
||||||
|
### Rodné číslo
|
||||||
|
Medicus předává RC **s lomítkem** (např. `730928/104`). Skript lomítko automaticky odstraní před odesláním do API:
|
||||||
|
```python
|
||||||
|
RODCIS = sys.argv[3].replace("/", "")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cesta k certifikátu
|
||||||
|
Cesta k PFX je **absolutní natvrdo** — PyInstaller při spuštění EXE mění `Path(__file__)` na temp adresář, relativní cesta by nefungovala:
|
||||||
|
```python
|
||||||
|
PFX_PATH = Path(r"U:\OrdinaceProjekt\Insurance\Certificates\picka.pfx")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Argumenty z Medicusu
|
||||||
|
```python
|
||||||
|
JMENO = sys.argv[1]
|
||||||
|
PRIJMENI = sys.argv[2]
|
||||||
|
RODCIS = sys.argv[3].replace("/", "")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Zobrazená data
|
||||||
|
|
||||||
|
| Pole VZP | Zobrazeno jako |
|
||||||
|
|----------|---------------|
|
||||||
|
| `nazevSZZ` | Lékař |
|
||||||
|
| `nazevICP` | Pracoviště |
|
||||||
|
| `ICZ` + `ICP` | ICZ / ICP |
|
||||||
|
| `datumRegistrace` | Registrace |
|
||||||
|
| `datumZahajeni` | Platí od |
|
||||||
|
| `datumUkonceni` | Platí do (3000-01-01 = bez omezení) |
|
||||||
|
| `poj_zkratka` | Pojišťovna (zobrazena jednou v kartě pacienta) |
|
||||||
|
|
||||||
|
## Error handling
|
||||||
|
|
||||||
|
Jakákoliv výjimka zobrazí dialog a pošle email na `vladimir.buzalka@buzalka.cz` s traceback a údaji pacienta. Implementováno přes `Knihovny/EmailMessagingGraph.py`.
|
||||||
|
|
||||||
|
## Rebuild EXE
|
||||||
|
|
||||||
|
```
|
||||||
|
cd U:\OrdinaceProjekt\Medicus\Externi\KdoJeLekar
|
||||||
|
pyinstaller KdoJeLekarApp.spec
|
||||||
|
```
|
||||||
+54
-100
@@ -2,87 +2,64 @@
|
|||||||
|
|
||||||
## Přehled
|
## Přehled
|
||||||
|
|
||||||
Aplikace **QRPlatbaApp** generuje QR kódy pro platby pacientů v ordinaci. Údaje o pacientovi jsou předávány z Medicusu, aplikace zobrazí okno s výběrem položky k úhradě a generuje QR kód ve formátu **SPAYD** (Czech Payment Standard).
|
Aplikace generuje QR kódy pro platby pacientů v ordinaci. Údaje o pacientovi jsou předávány z Medicusu, aplikace zobrazí okno s výběrem položky k úhradě a generuje QR kód ve formátu **SPAYD** (Czech Payment Standard).
|
||||||
|
|
||||||
## Soubory
|
## Soubory
|
||||||
|
|
||||||
- `QRPlatbaApp.py` — hlavní Python skript (customtkinter GUI)
|
| Soubor | Popis |
|
||||||
- `dist/QRPlatbaApp.exe` — kompilovaný spustitelný soubor (bez CMD okna)
|
|--------|-------|
|
||||||
|
| `QRPlatbaApp.py` | Hlavní skript (customtkinter GUI) |
|
||||||
|
| `QRPlatbaApp.spec` | PyInstaller konfigurace |
|
||||||
|
| `qrcode.ico` | Ikona EXE |
|
||||||
|
| `dist/QRPlatbaApp.exe` | Spustitelný EXE |
|
||||||
|
| `QRPlatby/` | Uložené QR kódy (PNG) |
|
||||||
|
|
||||||
## Technologie
|
## Konfigurace v Medicusu
|
||||||
|
|
||||||
- **Python 3.x** (nutný pouze pro vývoj, EXE běží bez Pythonu)
|
V menu **Konfigurace > Externí programy**:
|
||||||
- **customtkinter** — moderní GUI
|
|
||||||
- **qrcode** — generování QR kódů
|
|
||||||
- **pillow (PIL)** — manipulace s obrázky
|
|
||||||
- **fdb** — připojení na Firebird DB (Medicus)
|
|
||||||
|
|
||||||
## Jak to funguje
|
| Položka | Hodnota |
|
||||||
|
|---------|---------|
|
||||||
|
| **Program** | `U:\OrdinaceProjekt\Medicus\Externi\QRCode\dist\QRPlatbaApp.exe` |
|
||||||
|
| **Příkazový řádek** | `"U:\OrdinaceProjekt\Medicus\Externi\QRCode\dist\QRPlatbaApp.exe" %JMENO% %PRIJMENI% %RODCIS%` |
|
||||||
|
| **Pacient** | ✓ |
|
||||||
|
| **Menu** | QR Platba |
|
||||||
|
|
||||||
### 1. Spouštění z Medicusu
|
## Důležité technické detaily
|
||||||
|
|
||||||
Medicus předá údaje pacienta přes příkazový řádek do EXE:
|
### Rodné číslo
|
||||||
```
|
Medicus předává RC **s lomítkem** (např. `730928/104`). Skript lomítko automaticky odstraní — variabilní symbol ve SPAYD formátu musí být max 10 číslic:
|
||||||
QRPlatbaApp.exe %JMENO% %PRIJMENI% %RODCIS%
|
```python
|
||||||
|
RODCIS = sys.argv[3].replace("/", "")
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Načtení ceníku
|
### Argumenty z Medicusu
|
||||||
|
```python
|
||||||
|
JMENO = sys.argv[1]
|
||||||
|
PRIJMENI = sys.argv[2]
|
||||||
|
RODCIS = sys.argv[3].replace("/", "")
|
||||||
|
```
|
||||||
|
|
||||||
Skript se připojí na Medicus DB a načte ceník ze stored procedure `VLV_SEL`:
|
## Ceník
|
||||||
|
|
||||||
|
Načítá se ze stored procedure Medicus DB:
|
||||||
```python
|
```python
|
||||||
cur.execute("SELECT V.KOD, V.NAZEV, V.CENA FROM VLV_SEL(NULL, NULL, NULL) V ORDER BY V.KOD")
|
cur.execute("SELECT V.KOD, V.NAZEV, V.CENA FROM VLV_SEL(NULL, NULL, NULL) V ORDER BY V.KOD")
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. GUI okno
|
## SPAYD formát
|
||||||
|
|
||||||
Zobrazí se okno s:
|
|
||||||
- Údaji pacienta (jméno, příjmení, rodné číslo)
|
|
||||||
- Výběrem položky k úhradě (dropdown)
|
|
||||||
- Výběrem bankovního účtu (2 možnosti: Fio 2100046291/2010 nebo 2800046620/2010)
|
|
||||||
- Tlačítko "Uložit QR kód"
|
|
||||||
- QR kód (200x200px, SPAYD formát)
|
|
||||||
|
|
||||||
### 4. SPAYD formát
|
|
||||||
|
|
||||||
QR kód obsahuje:
|
|
||||||
```
|
```
|
||||||
SPD*1.0*ACC:CZ7520100000002800046620*AM:500.00*CC:CZK*X-VS:7309281045*MSG:Buzalka%20Vladimír%20–%20Poplatek
|
SPD*1.0*ACC:CZ7520100000002800046620*AM:500.00*CC:CZK*X-VS:7309281045*MSG:Buzalka%20Vladimír%20–%20Poplatek
|
||||||
```
|
```
|
||||||
|
|
||||||
- `ACC` — IBAN bankovního účtu
|
| Pole | Popis |
|
||||||
- `AM` — částka (Kč)
|
|------|-------|
|
||||||
- `CC` — měna (CZK)
|
| `ACC` | IBAN bankovního účtu |
|
||||||
- `X-VS` — variabilní symbol (rodné číslo pacienta)
|
| `AM` | Částka (Kč) |
|
||||||
- `MSG` — zpráva (jméno + položka)
|
| `CC` | Měna (CZK) |
|
||||||
|
| `X-VS` | Variabilní symbol = RC bez lomítka (max 10 číslic) |
|
||||||
### 5. Uložení QR
|
| `MSG` | Jméno pacienta + položka |
|
||||||
|
|
||||||
Po kliknutí na "Uložit QR kód" se PNG vygeneruje do adresáře:
|
|
||||||
```
|
|
||||||
U:\OrdinaceProjekt\Medicus\QRCode\QRPlatby\Buzalka_Vladimír_20260510_143025.png
|
|
||||||
```
|
|
||||||
|
|
||||||
## Konfigurace v Medicusu
|
|
||||||
|
|
||||||
V menu **Konfigurace > Externí programy** přidej nový záznam:
|
|
||||||
|
|
||||||
| Položka | Hodnota |
|
|
||||||
|---------|---------|
|
|
||||||
| **Kategorie** | Ostatní |
|
|
||||||
| **Typ programu** | Externí program |
|
|
||||||
| **Program** | `U:\OrdinaceProjekt\Medicus\QRCode\dist\QRPlatbaApp.exe` |
|
|
||||||
| **Příkazový řádek** | `"U:\OrdinaceProjekt\Medicus\QRCode\dist\QRPlatbaApp.exe" %JMENO% %PRIJMENI% %RODCIS%` |
|
|
||||||
| **Pacient** | ✓ (vyžaduje vybraného pacienta) |
|
|
||||||
| **Menu** | QR Platba |
|
|
||||||
|
|
||||||
## Firebird DB připojení
|
|
||||||
|
|
||||||
```python
|
|
||||||
DB_DSN = r'localhost:c:\medicus 3\data\medicus.fdb'
|
|
||||||
DB_USER = 'SYSDBA'
|
|
||||||
DB_PASSWORD = 'masterkey'
|
|
||||||
DB_CHARSET = 'win1250'
|
|
||||||
```
|
|
||||||
|
|
||||||
## Bankovní účty
|
## Bankovní účty
|
||||||
|
|
||||||
@@ -93,49 +70,26 @@ ACCOUNTS = {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Oba účty jsou u Fio banky.
|
|
||||||
|
|
||||||
## Spouštění bez CMD okna
|
|
||||||
|
|
||||||
EXE soubor se zkompiloval pomocí PyInstalleru s parametrem `--windowed`, což zajistí spuštění bez zobrazení CMD okna. GUI se zobrazí přímo bez blikání.
|
|
||||||
|
|
||||||
## Příjmání argumentů
|
|
||||||
|
|
||||||
Python skript přijímá argumenty přesně z příkazového řádku:
|
|
||||||
```python
|
|
||||||
if len(sys.argv) >= 4:
|
|
||||||
JMENO = sys.argv[1] # arg 1 z Medicusu (%JMENO%)
|
|
||||||
PRIJMENI = sys.argv[2] # arg 2 z Medicusu (%PRIJMENI%)
|
|
||||||
RODCIS = sys.argv[3] # arg 3 z Medicusu (%RODCIS%)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Ladění a opravy
|
|
||||||
|
|
||||||
Při chybách se informace vypíší v GUI (messagebox).
|
|
||||||
|
|
||||||
Pokud potřebuješ upravit zdrojový kód, edituj `QRPlatbaApp.py` a znovu zkompiluj EXE.
|
|
||||||
|
|
||||||
## Výstup
|
## Výstup
|
||||||
|
|
||||||
Generované QR kódy PNG se ukládají do:
|
QR kódy PNG se ukládají do `U:\OrdinaceProjekt\Medicus\Externi\QRCode\QRPlatby\`.
|
||||||
```
|
|
||||||
U:\OrdinaceProjekt\Medicus\QRCode\QRPlatby\
|
## Error handling
|
||||||
├── Buzalka_Vladimír_20260510_143025.png
|
|
||||||
├── Buzalka_Vladimír_20260510_144030.png
|
Jakákoliv výjimka zobrazí dialog a pošle email na `vladimir.buzalka@buzalka.cz` s traceback a údaji pacienta. Implementováno přes `Knihovny/EmailMessagingGraph.py`.
|
||||||
└── ...
|
|
||||||
|
## Firebird DB připojení
|
||||||
|
|
||||||
|
```python
|
||||||
|
DB_DSN = r'localhost:c:\medicus 3\data\medicus.fdb'
|
||||||
|
DB_USER = 'SYSDBA'
|
||||||
|
DB_PASSWORD = 'masterkey'
|
||||||
|
DB_CHARSET = 'win1250'
|
||||||
```
|
```
|
||||||
|
|
||||||
## PyInstaller kompilace
|
## Rebuild EXE
|
||||||
|
|
||||||
EXE soubor byl zkompilován příkazem:
|
|
||||||
```bash
|
|
||||||
pyinstaller --onefile --windowed --icon=qrcode.ico QRPlatbaApp.py
|
|
||||||
```
|
```
|
||||||
|
cd U:\OrdinaceProjekt\Medicus\Externi\QRCode
|
||||||
Výsledný EXE se nachází v `dist/QRPlatbaApp.exe` a je schopen běžet na počítačích bez Pythonu.
|
pyinstaller QRPlatbaApp.spec
|
||||||
|
|
||||||
Při potřebě znovu kompilovat po změně kódu:
|
|
||||||
```bash
|
|
||||||
cd U:\OrdinaceProjekt\Medicus\QRCode
|
|
||||||
C:\Python312\Scripts\pyinstaller.exe --onefile --windowed --icon=qrcode.ico --clean QRPlatbaApp.py
|
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user