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>
76 lines
3.1 KiB
Markdown
76 lines
3.1 KiB
Markdown
# jnj_mailbox_sync v1.0.0
|
|
|
|
**Soubor:** `jnj_mailbox_sync_v1.0.py` · **Datum:** 2026-06-09 · **Autor:** vladimir.buzalka
|
|
**Následník:** `inbox_full_sync_v1.1.py` (po validaci přesunout do `Trash/`)
|
|
|
|
## Účel
|
|
|
|
Synchronizace JNJ Outlooku (MAPI) → osobní schránka + bookkeeping v SQLite
|
|
(`C:\Users\vbuzalka\SQLITE\jnjemails.db`). Oproti `inbox_full_sync` navíc **sleduje
|
|
přesuny e-mailů mezi složkami** a příznak **„už není ve schránce" bez opětovného
|
|
přenosu těla**.
|
|
|
|
- **Scope:** primární schránka, **Inbox + Sent Items** včetně všech podsložek.
|
|
- **Online Archive se NESkenuje** — firemní pravidla tam přesouvají nejstarší
|
|
e-maily (ty už máme dávno stažené). Když e-mail ze skenované schránky zmizí,
|
|
ponechá se poslední známá cesta a nastaví se `not_in_mailbox_anymore=1`.
|
|
- **Identita = Internet Message-ID** (stabilní přes přesuny). `EntryID` jen pomocný.
|
|
|
|
## Sloupce cest (SQLite `messages`)
|
|
|
|
| sloupec | význam |
|
|
|---|---|
|
|
| `folder` | cesta při **prvním** zachycení (historie, nepřepisuje se) |
|
|
| `jnj_folder` | **aktuální** živá cesta (přepisuje se při přesunu) |
|
|
| `not_in_mailbox_anymore` | 1 = e-mail už ve skenované schránce není |
|
|
| `left_mailbox_at` | kdy detekováno, že opustil schránku |
|
|
| `updated_at` | bump při insertu i každé změně → watermark pro domácí sync |
|
|
|
|
## Režimy
|
|
|
|
| `--mode` | co dělá | upload .msg | okno `--days` |
|
|
|---|---|---|---|
|
|
| `capture` (default) | jako inbox_full_sync: nové e-maily uloží+nahraje | ano (nové) | ignoruje (vše) |
|
|
| `update-paths` | jen metadata: aktualizuje cesty/přečteno, označí „GONE" | **ne** | ano |
|
|
| `full-update` | `update-paths` + dorovná chybějící těla | ano (chybějící) | ano |
|
|
|
|
Detekce „opustilo schránku" běží **jen** v `update-paths`/`full-update` s platným
|
|
oknem (jinak by neskenováním archivu dělala falešné poplachy).
|
|
|
|
## Argumenty
|
|
|
|
```
|
|
--mode {capture,update-paths,full-update} default capture
|
|
--days N okno ve dnech (default 30); 0 = celý Inbox+Sent
|
|
--dry-run NIC nezapíše/nenahraje, jen vypíše co by udělal + souhrn
|
|
--limit N max N položek (rychlý test; vypne detekci GONE)
|
|
--no-db-upload na konci nenahrávat SQLite na server
|
|
```
|
|
|
|
## Spuštění
|
|
|
|
```powershell
|
|
# 1) Přečíst, co by full-update přinesl (NIC nezmění):
|
|
python jnj_mailbox_sync_v1.0.py --mode full-update --days 30 --dry-run
|
|
|
|
# 2) Naostro:
|
|
python jnj_mailbox_sync_v1.0.py --mode full-update --days 30
|
|
```
|
|
|
|
## Výstup
|
|
|
|
Per-položka: `NEW` (nahráno) / `NEW*` (dry-run by nahrál) / `UPD` (změna cesty/
|
|
přečteno) / `GONE` (opustilo schránku) / skip. Na konci souhrn: nalezeno, nově
|
|
zachyceno, aktualizovaná cesta, změna přečtení, vráceno, opustilo schránku, chyby.
|
|
|
|
## Závislosti
|
|
|
|
`pywin32`, `requests`, `cryptography`, `sqlite3` (stdlib). Python 3.10+, Windows,
|
|
spuštěný a přihlášený Outlook.
|
|
|
|
## Navazuje (zatím NEhotovo — domácí strana)
|
|
|
|
`sync_jnj_state` (python-runner u Monga): zrcadlo SQLite → Mongo `jnj_messages`
|
|
(watermark přes `updated_at`) + doplnění `jnj_folder`/příznaků do kolekce
|
|
`emaily."vbuzalka@its.jnj.com"`. Viz plán implementace.
|