Files
medicus/MedicusWithClaudeFaktury/find_edavky2.py
administrator 4f586f4b57 Přidán list ED_PODANI + ED_PODANI_DATA do faktury_report.py; doplněny poznámky o eDávkách
- faktury_report.py: nový list ED_PODANI (ED_BOOKOFSUBMISSIONS) s přehledem podání pojišťovnám
- faktury_report.py: nový list ED_PODANI_DATA s dekódovaným obsahem dávek (KDAVKA, REQUEST XML, odpovědi pojišťoven)
- Opraveno kódování: KDAVKA=cp1250, REQUEST detekce BOM (utf-16/utf-8), SERVERRESPONSE/PROTOCOL=iso-8859-2
- Hyperlinky ED_PODANI ↔ ED_PODANI_DATA a Faktura → FAK
- FakturaceADavky.md: dokumentace ED_* tabulek, portálů pojišťoven, formátů REQUEST XML
- Průzkumné skripty: find_edavky_table, explore_hpn, explore_ed_bookofsubmissions, parse_trace_edavky aj.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 07:42:46 +02:00

147 lines
4.7 KiB
Python

# -*- coding: utf-8 -*-
import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
import fdb
conn = fdb.connect(
dsn=r'localhost:c:\medicus 3\data\medicus.fdb',
user='SYSDBA', password='masterkey', charset='win1250'
)
cur = conn.cursor()
# Ze screenshotu vime:
# - sloupce: Vytvoreno, Odeslano, ZP, Stav, Zpravy, Podaci c., Faktura
# - ZP: 111, 201, 205, 207, 209, 211
# - Podaci c.: 58933293, 174804160, 26082877, D01F260218...
# - datum: 01.03.2026, 05.03.2026, 12.03.2026, 23.03.2026, 24.03.2026
# - typ: "Reg. listy" (bez faktury), vykonove davky (s fakturou)
print("=" * 60)
print("1. EOCK_DAVKA - sloupce a ukazka")
print("=" * 60)
cur.execute("""
SELECT rf.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS rf
WHERE rf.RDB$RELATION_NAME = 'EOCK_DAVKA'
ORDER BY rf.RDB$FIELD_POSITION
""")
eock_cols = [r[0].strip() for r in cur.fetchall()]
print(f" Sloupce: {eock_cols}")
cur.execute("SELECT COUNT(*) FROM EOCK_DAVKA")
print(f" Pocet: {cur.fetchone()[0]}")
safe = [c for c in eock_cols if c not in ('DATA', 'DAVKA', 'ODPOVED')]
if safe:
cur.execute(f"SELECT FIRST 3 {', '.join(safe)} FROM EOCK_DAVKA ORDER BY ID DESC")
for r in cur.fetchall():
print(f" {dict(zip(safe, r))}")
print()
print("=" * 60)
print("2. FAK - zaznamy z brezna 2026")
print("=" * 60)
cur.execute("""
SELECT ID, CISFAK, POJ, DATVYS, DATODE, OBDOB, CENA, DRUH, STAV
FROM FAK
WHERE DATVYS >= '2026-03-01' OR DATODE >= '2026-03-01'
ORDER BY ID DESC
""")
rows = cur.fetchall()
print(f" Celkem: {len(rows)}")
for r in rows:
print(f" ID={r[0]} CISFAK={r[1]} POJ={r[2]} DATVYS={r[3]} DATODE={r[4]} OBDOB={r[5]} CENA={r[6]} DRUH={r[7]} STAV={r[8]}")
print()
print("=" * 60)
print("3. Hledej tabulky ktere maji sloupec VYTVORENO nebo PODACI")
print("=" * 60)
cur.execute("""
SELECT DISTINCT rf.RDB$RELATION_NAME, rf.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS rf
JOIN RDB$RELATIONS r ON r.RDB$RELATION_NAME = rf.RDB$RELATION_NAME
WHERE r.RDB$SYSTEM_FLAG = 0
AND (TRIM(rf.RDB$FIELD_NAME) LIKE '%VYTVOR%'
OR TRIM(rf.RDB$FIELD_NAME) LIKE '%PODACI%')
ORDER BY rf.RDB$RELATION_NAME
""")
for r in cur.fetchall():
print(f" {r[0].strip():<40} {r[1].strip()}")
print()
print("=" * 60)
print("4. Hledej tabulky ktere maji POJ sloupec a zaznamy z brezna 2026")
print("=" * 60)
# Vsechny tabulky s POJ sloupcem
cur.execute("""
SELECT DISTINCT rf.RDB$RELATION_NAME
FROM RDB$RELATION_FIELDS rf
JOIN RDB$RELATIONS r ON r.RDB$RELATION_NAME = rf.RDB$RELATION_NAME
WHERE r.RDB$SYSTEM_FLAG = 0
AND TRIM(rf.RDB$FIELD_NAME) = 'POJ'
ORDER BY rf.RDB$RELATION_NAME
""")
poj_tables = [r[0].strip() for r in cur.fetchall()]
for table in poj_tables:
# Najdi vsechny datumove sloupce
cur.execute(f"""
SELECT rf.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS rf
WHERE rf.RDB$RELATION_NAME = '{table}'
AND TRIM(rf.RDB$FIELD_NAME) LIKE '%DAT%'
""")
date_cols = [r[0].strip() for r in cur.fetchall()]
for dc in date_cols:
try:
cur.execute(f"SELECT COUNT(*) FROM {table} WHERE {dc} >= '2026-03-01'")
cnt = cur.fetchone()[0]
if cnt > 0:
print(f" {table:<40} {dc}: {cnt} od 2026-03-01")
except Exception:
pass
print()
print("=" * 60)
print("5. Prohledej vsechny tabulky - ktere maji ~15 zaznamu od 2026-03-01")
print(" (v eDavky screenshotu je ~15 radku z brezna)")
print("=" * 60)
cur.execute("""
SELECT RDB$RELATION_NAME FROM RDB$RELATIONS
WHERE RDB$SYSTEM_FLAG = 0
ORDER BY RDB$RELATION_NAME
""")
all_tables = [r[0].strip() for r in cur.fetchall()]
# Hledej tabulky s datumovym sloupcem a 10-50 zaznamy od 2026-03
hits = []
for table in all_tables:
cur.execute(f"""
SELECT rf.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS rf
WHERE rf.RDB$RELATION_NAME = '{table}'
AND (TRIM(rf.RDB$FIELD_NAME) IN ('ODESLANO', 'VYTVORENO', 'DATODE', 'DATVYS', 'DATUM_ODESLANI'))
""")
date_cols = [r[0].strip() for r in cur.fetchall()]
for dc in date_cols:
try:
cur.execute(f"SELECT COUNT(*) FROM {table} WHERE {dc} >= '2026-03-01'")
cnt = cur.fetchone()[0]
if 5 <= cnt <= 100:
hits.append((table, dc, cnt))
except Exception:
pass
hits.sort(key=lambda x: x[2])
for table, dc, cnt in hits:
# Vypis sloupce teto tabulky
cur.execute(f"""
SELECT rf.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS rf
WHERE rf.RDB$RELATION_NAME = '{table}'
ORDER BY rf.RDB$FIELD_POSITION
""")
cols = [r[0].strip() for r in cur.fetchall()]
print(f" {table:<40} {dc}: {cnt} | sloupce: {cols[:10]}")
conn.close()
print("\nHotovo.")