8c01fd6e1a
- EmailsImport: jnj_mailbox_sync_v1.0 (sync JNJ schranky) - Covance: create_lab_results_report_v1.0 + zpracovane CSV (samples/kits/equeries/test-results), browser profily - Feasibility UCO2001: store_cda_*, store_sipiq_links, classify_krok, mark_sipiq_sent, report v1.1 (stary report do TRASH) - IWRS/Drugs: pregenerovane onsite inventory / shipment reporty - TrilliumMCP server + trilium upload/diacritics skripty - .mcp.json Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
80 lines
3.9 KiB
Python
80 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# =============================================================================
|
|
# Nazev: store_sipiq_links_v1.0.py
|
|
# Verze: 1.0
|
|
# Datum: 2026-06-09
|
|
# Popis: Ulozi unikatni SIPIQ odkaz (per-centrum) ke kazdemu investigatorovi
|
|
# do Mongo feasibility.investigators -> pole sipiq.link
|
|
# (+ sipiq.link_stored_at, sipiq.link_source). Zdroj = Trilium note
|
|
# "SIPIQ" (noteId hAMNUnUQdCRn). Mapovani investigator->link je
|
|
# explicitni. 14 lekaru v kroku 5 (CDA podepsano).
|
|
# Pouziti: python store_sipiq_links_v1.0.py (dry-run / nahled)
|
|
# python store_sipiq_links_v1.0.py --apply (zapise do Mongo)
|
|
# =============================================================================
|
|
|
|
import os
|
|
import sys
|
|
from pymongo import MongoClient
|
|
from bson import ObjectId
|
|
|
|
MONGO_URI = os.environ.get("MONGO_URI", "mongodb://192.168.1.76:27017")
|
|
STORED_AT = "2026-06-09"
|
|
SOURCE = "Trilium note SIPIQ (hAMNUnUQdCRn)"
|
|
BASE = "https://janssenfeasibility.iad1.qualtrics.com/jfe/form/SV_9AdeNaNyohp5fNQ?Q_CHL=gl&Q_DL=%s&_g_=g"
|
|
|
|
# investigator_id -> (label, Q_DL token)
|
|
MAPPING = [
|
|
("6a1c4275aa46d8b608065cec", "Lukac Ludovit", "EMD_t2InaXAmvYtCEIT_9AdeNaNyohp5fNQ_CGC_pcjxC6AEA9hxsHl"),
|
|
("6a19832b5fc221351825794f", "Hlavaty Tibor", "EMD_xmPsx66DQKz3z7M_9AdeNaNyohp5fNQ_CGC_wR6sCr6EmyO4oKq"),
|
|
("6a19832b5fc2213518257954", "Fedurco Miroslav", "EMD_ZcpPzkNPT9V9pcJ_9AdeNaNyohp5fNQ_CGC_rWQC2OGTV3TaRQx"),
|
|
("6a198b661218c31ab0f5ba43", "Tichy Michal", "EMD_Cwv9ZT1PSVn3hMb_9AdeNaNyohp5fNQ_CGC_BaZnCP2pwlmbMpX"),
|
|
("6a19832b5fc221351825796e", "Falc Matej", "EMD_eUNAj2vPihHOm7g_9AdeNaNyohp5fNQ_CGC_aLo6pEBRHwMmLUg"),
|
|
("6a198b661218c31ab0f5ba41", "Pesta Martin", "EMD_ykhyDJzyGYbwNlV_9AdeNaNyohp5fNQ_CGC_k6q3Vh4womEdc9s"),
|
|
("6a198b661218c31ab0f5ba45", "Jungwirthova Anna", "EMD_f41v8N8wB7T5xUa_9AdeNaNyohp5fNQ_CGC_lW8THoTh7nYXYrn"),
|
|
("6a19832b5fc2213518257950", "Matous Jan", "EMD_N5N7KrQwv4kI6uS_9AdeNaNyohp5fNQ_CGC_MQXKadWMxdLFhxi"),
|
|
("6a19832b5fc2213518257958", "Mihalkanin Lubomir", "EMD_LAfWg2NWL3OpvFT_9AdeNaNyohp5fNQ_CGC_nhe5FXQKw8kOzie"),
|
|
("6a198b661218c31ab0f5ba4e", "Krizova Viera", "EMD_rX6VNRycwqE5Gkw_9AdeNaNyohp5fNQ_CGC_P8peeeBOWsriB9e"),
|
|
("6a19832b5fc221351825795e", "Stepek David", "EMD_tG1kIyZQVo6m5dX_9AdeNaNyohp5fNQ_CGC_Q1fqrVdGo82akWK"),
|
|
("6a19832b5fc2213518257972", "Konecny Stefan", "EMD_AQa8HOUS1lQ61Be_9AdeNaNyohp5fNQ_CGC_v9oCwjfwyGIrAPt"),
|
|
("6a1987481218c31ab0f5ba33", "Svoboda Pavel", "EMD_CjqBu34ODPe7o03_9AdeNaNyohp5fNQ_CGC_4FCgUB19X2tF1zK"),
|
|
("6a198b661218c31ab0f5ba42", "Kojecky Vladimir", "EMD_zTJJhhRYwb9Z8pO_9AdeNaNyohp5fNQ_CGC_5Z8Ml8qISWSXWFT"),
|
|
]
|
|
|
|
|
|
def main():
|
|
apply = "--apply" in sys.argv
|
|
client = MongoClient(MONGO_URI)
|
|
col = client["feasibility"]["investigators"]
|
|
|
|
print("=== NAHLED: SIPIQ link -> Mongo (sipiq.link) ===\n")
|
|
n = 0
|
|
for inv_id, label, token in MAPPING:
|
|
link = BASE % token
|
|
doc = col.find_one({"_id": ObjectId(inv_id)}, {"prijmeni": 1, "jmeno": 1, "sipiq.link": 1})
|
|
if not doc:
|
|
print(f"!!! NENALEZEN {label} ({inv_id})")
|
|
continue
|
|
existing = (doc.get("sipiq") or {}).get("link")
|
|
print(f"{label:22s} token={token[:24]}... existuje={'ANO' if existing else 'ne'}")
|
|
if apply:
|
|
res = col.update_one(
|
|
{"_id": ObjectId(inv_id)},
|
|
{"$set": {
|
|
"sipiq.link": link,
|
|
"sipiq.link_token": token,
|
|
"sipiq.link_stored_at": STORED_AT,
|
|
"sipiq.link_source": SOURCE,
|
|
}},
|
|
)
|
|
n += res.modified_count
|
|
|
|
print()
|
|
if apply:
|
|
print(f">>> ZAPSANO: {n} zaznamu")
|
|
else:
|
|
print(">>> DRY-RUN. Pro zapis spust s --apply")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|