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>
This commit is contained in:
2026-06-02 22:57:44 +02:00
parent f11d407b73
commit 2d65ad2988
8 changed files with 200 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
# 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 `mysqldump``mongodump`)
- [ ] Případně naplánovat automatické denní stahování + import
## Příklady dotazů
```js
// 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/`