#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
sipiq_thankyou_v1.0.py
======================
Verze: 1.0
Datum: 2026-06-18
Autor: Claude Code (pro MUDr. Vladimíra Buzalku)
Popis
-----
Vygeneruje .eml draft PODĚKOVÁNÍ za vyplnění SIPIQ (studie 77242113UCO3002 / DAWN)
pro jedno centrum. Struktura (domluva 18JUN2026, BEZ Shrnutí):
1) úvod (poděkování + „dotazník už nelze editovat; při chybějících/nejasných/nekonzistentních
položkách si vyžádáme upřesnění e-mailem"; odkaz na plné odpovědi pod podpisem),
2) podpis,
3) ÚPLNĚ POD PODPISEM = kompletní výpis vyplněného SIPIQ (sekce → otázka → odpověď,
seřazené dle struktury dotazníku; vynechána sekce Confidentiality; jen neprázdné).
Cc = koordinátorky (AKocourk + EBartoso). To = e-maily lékaře z investigators (email + email2),
fallback pi_email z odpovědi. from = vbuzalka@its.jnj.com. Výstup do …\\UploadToJNJ.
Draft ≠ odesláno — STATUS „poděkováno" psát až po ověření odeslání.
Použití:
python sipiq_thankyou_v1.0.py --last Bruncak # dry-run (náhled)
python sipiq_thankyou_v1.0.py --last Bruncak --apply # zapíše .eml
Mongo 192.168.1.76:27017, bez auth, pymongo.
"""
import argparse
import os
from datetime import datetime
from email.message import EmailMessage
from pymongo import MongoClient
OUT_DIR = r"u:\Dropbox\!!!Days\Downloads Z230\UploadToJNJ"
CC = "AKocourk@ITS.JNJ.com, EBartoso@its.jnj.com"
FROM = "vbuzalka@its.jnj.com"
SKIP_SECTIONS = {"Confidentiality Statement"}
SUBJECT = "77242113UCO3002 (DAWN) — poděkování za vyplnění feasibility dotazníku SIPIQ"
SIG = ("MUDr. Vladimír BUZALKA
"
"ICON plc / Performing Local Trial Management Services for Janssen – Cilag s.r.o. "
"/ Global Clinical Operations
"
"Mobile: +420 775 735 276 / Fax: +420 227 012 284
"
"E‑mail: vbuzalka@its.jnj.com, vladimir.buzalka@iconplc.com")
def esc(s):
return str(s).replace("&", "&").replace("<", "<").replace(">", ">")
def build_sipiq_html(db, resp):
ans = resp.get("answers") or {}
qs = list(db.sipiq_questions.find().sort("order", 1))
out, cur = [], None
for q in qs:
sec = q.get("section") or "Other"
if sec in SKIP_SECTIONS:
continue
items = q.get("items") or []
pairs = []
if not items:
v = ans.get(q["_id"])
if v not in (None, ""):
pairs.append((None, v))
else:
for it in items:
v = ans.get(it["key"])
if v not in (None, ""):
pairs.append((it.get("label") or "(odpověď)", v))
if not pairs:
continue
if sec != cur:
cur = sec
out.append(f'
[{q["_id"]}] {stem}
') if len(pairs) == 1 and pairs[0][0] is None: out.append(f'{esc(pairs[0][1])}
') else: out.append('Vážený pane doktore,
' 'děkujeme za zaslání vyplněného dotazníku SIPIQ studie ' '77242113UCO3002 (DAWN). Vaše odpovědi uvádíme pro úplnost v plném znění ' 'níže, pod podpisem. Odeslaný dotazník již není možné editovat, takže kdybychom ' 'při dalším zpracování našli položky chybějící, nejasné nebo nekonzistentní, ' 'ještě bychom si vyžádali upřesnění e-mailem.
' ) sig = f'S pozdravem,
{SIG}
Vyplněné SIPIQ (kopie Vašich odpovědí):
' + sipiq) print(f"Centrum: {resp.get('pi_first_name')} {resp.get('pi_last_name')} | {resp.get('site_name')}") print(f"To: {to}\nCc: {CC}\nSubject: {SUBJECT}") print(f"SIPIQ – sekcí: {sipiq.count('