2d65ad2988
Move ~/.claude/projects/U--janssen/memory into repo (claude-memory/) linked back via a directory junction so memory persists across machines. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
Projekt: Import EDC reportů do MongoDB
Stav: rozpracováno (2026-05-20)
Co je hotovo
Skript U:/janssen/medidata/edc_import.py
- Import CSV reportů z Medidata Rave EDC do MongoDB
- Spuštění:
python edc_import.py downloads/*.csv - Default MongoDB:
mongodb://192.168.1.76:27017(bez autentikace) - Default databáze:
edc - Parametry:
--host,--db
Dva typy CSV souborů — skript je detekuje automaticky
1. Data Listing reporty (mají příponu _DataListing.csv)
- Sloupce: pevná metadata + Field1Value/Field1Label … Field300Value/Field300Label
- Kolekce: odvozena z názvu souboru mezi
EDC_a_DataListing- např.
MDD3003_DateofVisit,MDD3003_InterimInvestigatorSignature
- např.
- Upsert klíč:
form.recordId - Struktura dokumentu:
study,site{},subject{},form{},fields{},lastModified,importedAt,sourceFile,_meta{} - Importováno a otestováno:
MDD3003_DateofVisit(381 záznamů)
2. QueryDetails reporty (mají sloupec QueryID(ReQry))
- Kolekce: vždy
queries(všechny studie dohromady) - Upsert klíč:
queryId - Struktura dokumentu:
study,site{},subject{},visit,page,field,queryGroup,queryId,queryStatus,openedBy/Date,answeredBy/Date,closedBy/Date,daysNotYetClosed,daysToAnswer,daysToClose,queryText,answerText,importedAt,sourceFile,_meta{} - Importováno: 2091 queries (MDD3003, stav 2026-05-20)
Daily snapshots pro queries
- Kolekce:
queries_snapshots - Každý import QueryDetails zapíše i snapshot s
snapshotDate(datum ze jména souboru) - Upsert klíč:
(queryId, snapshotDate)— žádné duplikáty, bezpečný reimport - Účel: sledování vývoje statusů v čase (Open → Answered → Closed → requeried)
- Objem: ~3000 queries × 365 dní × 2 roky ≈ 2M dokumentů — MongoDB zvládá
Logika pro QueryDetails se dvěma soubory
Každý den se stahují dva soubory:
- Menší: pouze Open + Answered queries
- Větší: všechny queries včetně Closed
Oba se importují — upsert na queryId zajistí, že každá query je v queries jednou.
Menší soubor je podmnožina většího → výsledek je vždy kompletní sada.
Indexy
queries:
queryId(unique)subject.label,site.number,queryStatus,openedDate
queries_snapshots:
(queryId, snapshotDate)(unique)snapshotDate,queryStatus,site.number,subject.label
Data Listing kolekce:
form.recordId(unique, sparse)subject.id,site.id,study,lastModified
Co zbývá udělat
- Importovat zbývající soubory ze složky
downloads - Nastavit zálohování MongoDB (obdoba
mysqldump→mongodump) - Případně naplánovat automatické denní stahování + import
Příklady dotazů
// Aktuální open queries
db.queries.find({ queryStatus: "Open" })
// Trend open queries v čase
db.queries_snapshots.aggregate([
{ $match: { queryStatus: "Open" } },
{ $group: { _id: "$snapshotDate", count: { $sum: 1 } } },
{ $sort: { _id: 1 } }
])
// Historie statusů jedné query
db.queries_snapshots.find(
{ queryId: "20915933" },
{ snapshotDate: 1, queryStatus: 1 }
).sort({ snapshotDate: 1 })
// Queries pacienta
db.queries.find({ "subject.label": "CZ100040001" })
// Všechny záznamy ze site
db.MDD3003_DateofVisit.find({ "site.number": "S10-CZ10004" })
Soubory
- Skript:
U:/janssen/medidata/edc_import.py - Log:
U:/janssen/medidata/edc_import.log - Stažené CSV:
U:/janssen/medidata/downloads/