Files
medicus/MedicusWithClaudeFaktury/explore_hpn.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

103 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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()
print("=" * 60)
print("1. Sloupce HPN")
print("=" * 60)
cur.execute("""
SELECT rf.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS rf
WHERE rf.RDB$RELATION_NAME = 'HPN'
ORDER BY rf.RDB$FIELD_POSITION
""")
col_names = [r[0].strip() for r in cur.fetchall()]
print(f" Sloupce: {col_names}")
print()
print("=" * 60)
print("2. Počet záznamů a max datum")
print("=" * 60)
cur.execute("SELECT COUNT(*) FROM HPN")
print(f" Celkem: {cur.fetchone()[0]} záznamů")
# Najdi datumove sloupce
date_candidates = [c for c in col_names if any(x in c for x in ['DAT', 'ODE', 'VYT', 'CAS'])]
print(f" Datumové sloupce: {date_candidates}")
for dc in date_candidates[:3]:
try:
cur.execute(f"SELECT MIN({dc}), MAX({dc}) FROM HPN")
mn, mx = cur.fetchone()
print(f" {dc}: {mn} .. {mx}")
except Exception as e:
print(f" {dc}: {e}")
print()
print("=" * 60)
print("3. Posledních 20 záznamů (bez BLOBů)")
print("=" * 60)
# Zjisti BLOB sloupce
cur.execute("""
SELECT rf.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS rf
JOIN RDB$FIELDS f ON f.RDB$FIELD_NAME = rf.RDB$FIELD_SOURCE
WHERE rf.RDB$RELATION_NAME = 'HPN'
AND f.RDB$FIELD_TYPE = 261
""")
blob_cols = {r[0].strip() for r in cur.fetchall()}
print(f" BLOB sloupce: {blob_cols}")
safe_cols = [c for c in col_names if c not in blob_cols]
# Zjisti razeni - zkus VYTVORENO nebo ODESLANO nebo ID
order_col = next((c for c in ['VYTVORENO', 'ODESLANO', 'DATUM', 'ID'] if c in col_names), col_names[0])
cur.execute(f"SELECT FIRST 20 {', '.join(safe_cols)} FROM HPN ORDER BY {order_col} DESC")
rows = cur.fetchall()
for row in rows:
d = dict(zip(safe_cols, row))
print(f" {d}")
print()
print("=" * 60)
print("4. Záznamy od 2026-02-01")
print("=" * 60)
for dc in date_candidates[:2]:
try:
cur.execute(f"SELECT COUNT(*) FROM HPN WHERE {dc} >= '2026-02-01'")
cnt = cur.fetchone()[0]
if cnt > 0:
print(f" {dc} >= 2026-02-01: {cnt} záznamů")
cur.execute(f"SELECT FIRST 5 {', '.join(safe_cols)} FROM HPN WHERE {dc} >= '2026-02-01' ORDER BY {dc} DESC")
for row in cur.fetchall():
print(f" {dict(zip(safe_cols, row))}")
break
except Exception as e:
print(f" {dc}: {e}")
print()
print("=" * 60)
print("5. HPN_NOTIFIKACE_DETAIL sloupce a ukazka")
print("=" * 60)
cur.execute("""
SELECT rf.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS rf
WHERE rf.RDB$RELATION_NAME = 'HPN_NOTIFIKACE_DETAIL'
ORDER BY rf.RDB$FIELD_POSITION
""")
hnd_cols = [r[0].strip() for r in cur.fetchall()]
print(f" Sloupce: {hnd_cols}")
cur.execute("SELECT COUNT(*) FROM HPN_NOTIFIKACE_DETAIL")
print(f" Záznamy: {cur.fetchone()[0]}")
conn.close()
print("\nHotovo.")