Files
janssen/claude-memory/project_edc_mongo.md
T
administrator 2d65ad2988 Add Claude memory store synced via Gitea
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>
2026-06-02 22:57:44 +02:00

3.5 KiB
Raw Blame History

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
  • 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 mysqldumpmongodump)
  • 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/