import uuid
from datetime import datetime, timezone, timedelta
from pathlib import Path
from requests import Session
from requests_pkcs12 import Pkcs12Adapter
# --- Konfigurace ---
PFX_FILE = Path(__file__).parent.parent.parent / "AMBSUKL214235369G_31DEC2024.pfx"
PFX_PASSWORD = "Vlado7309208104++"
API_USER = "e08c89c6-2b1a-4eba-8ed9-4e3e63618379"
API_PASS = "Buzalka@Vladimir2025"
UZIVATEL = "E08C89C6-2B1A-4EBA-8ED9-4E3E63618379"
PRACOVISTE = "00214235367"
ENDPOINT = "https://cuer-soap.erecept.sukl.cz/"
# --- Filtr ---
CP_PACIENTA = "7309208104" # rodné číslo pacienta (bez lomítka)
DATUM_OD = (datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d")
DATUM_DO = datetime.now().strftime("%Y-%m-%d")
LIMIT = 100
def seznam_predpisu():
sess = Session()
sess.mount("https://", Pkcs12Adapter(
pkcs12_filename=PFX_FILE,
pkcs12_password=PFX_PASSWORD
))
sess.auth = (API_USER, API_PASS)
id_zpravy = str(uuid.uuid4())
odeslano = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S+00:00")
filtr_pacient = ""
if CP_PACIENTA:
filtr_pacient = f"{CP_PACIENTA}"
soap_body = (
''
''
''
''
''
f'{UZIVATEL}{PRACOVISTE}'
f''
f'{DATUM_OD}'
f'{DATUM_DO}'
f'{LIMIT}'
f'{filtr_pacient}'
f''
''
f''
f'{id_zpravy}'
f'202501A'
f'{odeslano}'
f'MEDICUS_____'
f''
''
''
''
)
headers = {
"Content-Type": 'text/xml; charset="UTF-8"',
"SOAPAction": '"SeznamPredpisu"',
"User-Agent": "Medicus"
}
print(f"=== SOAP REQUEST ===\n{soap_body}\n===================\n")
print(f"Datum od: {DATUM_OD}, do: {DATUM_DO}, limit: {LIMIT}")
if CP_PACIENTA:
print(f"Filtr pacienta (RC): {CP_PACIENTA}")
print(f"ID zprávy: {id_zpravy}")
print(f"Endpoint: {ENDPOINT}\n")
resp = sess.post(ENDPOINT, data=soap_body.encode("utf-8"), headers=headers, timeout=30)
print(f"HTTP status: {resp.status_code}")
output_file = f"seznam_predpisu_{id_zpravy}.xml"
with open(output_file, "wb") as f:
f.write(resp.content)
print(f"Odpověď uložena do: {output_file}")
text = resp.text
if "Fault" in text or "fault" in text:
print("\n!!! SOAP Fault v odpovědi !!!")
print(text[:2000])
else:
print("Dotaz proběhl úspěšně.")
print(f"Velikost odpovědi: {len(resp.content):,} bytů")
print("\n--- Odpověď (prvních 3000 znaků) ---")
print(text[:3000])
if __name__ == "__main__":
seznam_predpisu()