přidána sdílená MySQL knihovna, paměť Claude a oprava připojení Medicus.fdb
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
# Memory Index
|
||||
|
||||
- [Uživatel](user_role.md) — role a kontext práce
|
||||
- [Projekt OrdinaceProjekt](project_ordinace.md) — struktura, cíl, klíčové soubory
|
||||
- [MySQL připojení](project_mysql.md) — logika výběru hostitele, sdílená knihovna
|
||||
- [Firebird / Medicus.fdb](project_firebird.md) — připojení k databázi Medicus
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
name: Firebird – Medicus.fdb
|
||||
description: Připojení k databázi Medicus přes Firebird
|
||||
type: project
|
||||
originSessionId: 90bfd8c5-50c6-4238-ae30-d78aa7b114e9
|
||||
---
|
||||
Sdílená knihovna: `Knihovny/medicus_db.py`, třída `MedicusDB`
|
||||
|
||||
Parametry připojení:
|
||||
- Server: `192.168.1.10`
|
||||
- Cesta k DB: `M:\Medicus\Data\Medicus.fdb`
|
||||
- User: `SYSDBA`, Password: `masterkey`, Charset: `WIN1250`
|
||||
|
||||
**Why:** Medicus ukládá data pacientů do Firebird databáze na síťovém serveru.
|
||||
**How to apply:** Vždy použít `MedicusDB(HOST, DB_PATH)` z knihovny, ne přímé `fdb.connect`.
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
name: MySQL připojení – sdílená logika
|
||||
description: Jak se připojovat k MySQL, fallback logika, lokální stanice
|
||||
type: project
|
||||
originSessionId: 90bfd8c5-50c6-4238-ae30-d78aa7b114e9
|
||||
---
|
||||
Sdílená knihovna: `Knihovny/mysql_db.py`, funkce `connect_mysql()`
|
||||
|
||||
Logika výběru hostitele:
|
||||
- Hostname `lekar`, `sestra` nebo `lenovo` → použije rovnou `127.0.0.1`
|
||||
- Jiný počítač → zkusí `192.168.1.76`, fallback `127.0.0.1`
|
||||
|
||||
Credentials: user=`root`, db=`medevio`, port=3306
|
||||
|
||||
**Why:** MySQL server běží lokálně na těchto stanicích, vzdálená adresa je zbytečná a způsobuje zpoždění.
|
||||
**How to apply:** Každý nový skript s MySQL musí importovat `from Knihovny.mysql_db import connect_mysql` místo přímého `pymysql.connect`.
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
name: Uživatel – role a kontext
|
||||
description: Kdo uživatel je a jak s ním spolupracovat
|
||||
type: user
|
||||
originSessionId: 90bfd8c5-50c6-4238-ae30-d78aa7b114e9
|
||||
---
|
||||
Pracuje na projektu pro lékařskou ordinaci (Python skripty kolem systému Medicus).
|
||||
Komunikuje česky. Technicky zdatná, rozumí kódu, nepotřebuje vysvětlovat základy.
|
||||
Preferuje stručné odpovědi a konkrétní akce.
|
||||
@@ -0,0 +1,3 @@
|
||||
# OrdinaceProjekt
|
||||
|
||||
Paměť projektu je v `.claude/memory/` — přečti ji na začátku každé konverzace.
|
||||
@@ -15,6 +15,7 @@ import time
|
||||
import logging
|
||||
from Knihovny.medicus_db import MedicusDB
|
||||
from Knihovny.vzpb2b_client import VZPB2BClient
|
||||
from Knihovny.mysql_db import connect_mysql
|
||||
import pymysql
|
||||
from datetime import date
|
||||
|
||||
@@ -45,15 +46,7 @@ def log_error(msg):
|
||||
# ==========================================
|
||||
# MYSQL CONNECTION
|
||||
# ==========================================
|
||||
mysql = pymysql.connect(
|
||||
host="192.168.1.76",
|
||||
port=3306,
|
||||
user="root",
|
||||
password="Vlado9674+",
|
||||
database="medevio",
|
||||
charset="utf8mb4",
|
||||
autocommit=True
|
||||
)
|
||||
mysql = connect_mysql()
|
||||
|
||||
# ==========================================
|
||||
# SAVE RESULT
|
||||
@@ -94,8 +87,8 @@ def save_insurance_status(mysql_conn, rc, prijmeni, jmeno, k_datu, result, xml_t
|
||||
# con = fdb.connect(
|
||||
# host='192.168.1.10', database=r'm:\MEDICUS\data\medicus.FDB',
|
||||
# user='sysdba', password='masterkey',charset='WIN1250')
|
||||
HOST = "192.168.1.4"
|
||||
DB_PATH = r"c:\Medicus 3\data\MEDICUS.FDB"
|
||||
HOST = "192.168.1.10"
|
||||
DB_PATH = r"M:\Medicus\Data\Medicus.fdb"
|
||||
|
||||
PFX_PATH = Path(__file__).resolve().parent / "Certificates" / "picka.pfx"
|
||||
# PFX_PATH = PROJECT_ROOT / "certificates" / "MBcert.pfx"
|
||||
@@ -132,19 +125,15 @@ today = date.today()
|
||||
# ==========================================
|
||||
# FILTER: ONLY PATIENTS NOT CHECKED TODAY
|
||||
# ==========================================
|
||||
patients_to_check = []
|
||||
with mysql.cursor() as cur:
|
||||
cur.execute("SELECT DISTINCT rc FROM vzp_stav_pojisteni WHERE k_datu = %s", (today,))
|
||||
already_checked = {row[0] for row in cur.fetchall()}
|
||||
|
||||
with mysql.cursor(pymysql.cursors.DictCursor) as cur:
|
||||
for rc, prijmeni, jmeno, poj in patients:
|
||||
cur.execute(
|
||||
"SELECT MAX(k_datu) AS last_check FROM vzp_stav_pojisteni WHERE rc = %s",
|
||||
(rc,)
|
||||
)
|
||||
row = cur.fetchone()
|
||||
last_check = row["last_check"]
|
||||
|
||||
if last_check is None or last_check < today:
|
||||
patients_to_check.append((rc, prijmeni, jmeno))
|
||||
patients_to_check = [
|
||||
(rc, prijmeni, jmeno)
|
||||
for rc, prijmeni, jmeno, poj in patients
|
||||
if rc not in already_checked
|
||||
]
|
||||
|
||||
log_info(f"Incremental run: {len(patients_to_check)} patients to check today\n")
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import socket
|
||||
import pymysql
|
||||
|
||||
_LOCAL_HOSTS = {"lekar", "sestra", "lenovo"}
|
||||
|
||||
|
||||
def connect_mysql(user="root", password="Vlado9674+", database="medevio",
|
||||
port=3306, charset="utf8mb4", autocommit=True):
|
||||
"""
|
||||
Připojí se k MySQL. Na lokálních stanicích (lekar/sestra/lenovo) použije
|
||||
127.0.0.1 přímo, jinak zkusí 192.168.1.76 a pak 127.0.0.1 jako fallback.
|
||||
Vrátí aktivní pymysql spojení nebo vyhodí RuntimeError.
|
||||
"""
|
||||
hostname = socket.gethostname().lower()
|
||||
candidates = ("127.0.0.1",) if hostname in _LOCAL_HOSTS else ("192.168.1.76", "127.0.0.1")
|
||||
|
||||
params = dict(port=port, user=user, password=password,
|
||||
database=database, charset=charset, autocommit=autocommit)
|
||||
|
||||
last_error = None
|
||||
for host in candidates:
|
||||
try:
|
||||
conn = pymysql.connect(host=host, **params)
|
||||
print(f"[mysql_db] Připojeno přes {host} (hostname: {hostname})")
|
||||
return conn
|
||||
except Exception as e:
|
||||
print(f"[mysql_db] {host} selhal: {e}")
|
||||
last_error = e
|
||||
|
||||
raise RuntimeError(f"MySQL nedostupné na žádné adrese. Poslední chyba: {last_error}")
|
||||
Reference in New Issue
Block a user