# scan_files_v1.0

**Verze:** 1.0
**Datum:** 2026-06-03
**Skript:** `scan_files_v1.0.py`

## Účel
Rekurzivní sken dvou Dropbox složek studií (`!!42847922MDD3003`, `!77242113UCO3001`) a zápis metadat všech souborů do MongoDB.

## Konfigurace
- **MongoDB:** `mongodb://192.168.1.76:27017` (bez autentizace)
- **DB:** `soubory`
- **Kolekce:** `42847922MDD3003`, `77242113UCO3001` (jedna kolekce na studii)
- **Cesta k Dropboxu:** zjištěna pomocí `Knihovny/najdi_dropbox.py` (přenositelné mezi PC)

## Struktura dokumentu v MongoDB
| pole | popis |
|---|---|
| `path` | absolutní cesta (unikátní klíč) |
| `study` | kód studie (= název kolekce) |
| `rel_path` | relativní cesta od kořene studie |
| `dir`, `rel_dir` | nadřazený adresář (absolutní/relativní) |
| `parent_folders` | pole názvů složek (pro filtrování) |
| `name`, `stem`, `ext` | jméno, jméno bez přípony, přípona (lower-case) |
| `size_bytes` | velikost |
| `mtime`, `ctime`, `atime` | časové údaje (UTC) |
| `sha256` | hash obsahu |
| `mime` | mimetype dle přípony |
| `tokens` | jméno rozparsované na slova/čísla (lower-case) |
| `dates_in_name` | datumy nalezené v názvu, formát `YYYY-MM-DD` |
| `first_seen_at` | první sken, kdy byl soubor viděn |
| `last_seen_at` | poslední sken, kdy byl viděn |
| `deleted_at` | nastaveno, pokud soubor v posledním skenu už nebyl nalezen |

## Datumy v názvu
Skript hledá tři varianty:
- `12JAN2026`, `12Jan2026` (den + 3-písm. zkratka měsíce + rok)
- `2026-01-12`, `2026_01_12`, `2026.01.12`
- `12-01-2026`, `12_01_2026`, `12.01.2026`

Všechny se normalizují do ISO `YYYY-MM-DD` v poli `dates_in_name`.

## Inkrementální chování
- `size_bytes` + `mtime` souhlasí se záznamem v DB → SHA256 se nepřepočítává, jen se aktualizuje `last_seen_at`
- nový soubor → vloží se s `first_seen_at`
- chybějící v aktuálním běhu → `deleted_at` se nastaví na čas běhu

## Co se ignoruje
- `.dropbox*`, `Thumbs.db`, `desktop.ini`, `~$*.*` (Office locky), `.DS_Store`
- adresář `.dropbox.cache`

## Spuštění
```
python U:\PythonProject\Janssen\Soubory\scan_files_v1.0.py
```

## Index pole pro rychlé dotazy
`path` (unique), `ext`, `dates_in_name`, `tokens`, `sha256`

## Plán pokračování
1. Spustit první sken → zjistit profil dat (přípony, hloubku stromů)
2. Doplnit dle potřeby (např. počet stran PDF, autor DOCX, listy XLSX)
3. Postavit `MCP_SOUBORY` server nad touto kolekcí
