53 lines
3.1 KiB
Markdown
53 lines
3.1 KiB
Markdown
# Modul 5 — Ingest dokumentow -> koperta KB
|
|
|
|
> Adapter obu zrodel (Paperless API + Nextcloud WebDAV) -> koperta KB. Domyka filar #2
|
|
> w warstwie 2 (preprocess+index). Zalezy od: 2 (Paperless), 4 (Nextcloud).
|
|
|
|
## Cel
|
|
Wciagnac dokumenty z Paperless i Nextcloud do spine KB (envelope w kb-postgres@PIHA),
|
|
z OCR-textem + metadanymi, budujac pierwszy cross-source link (correspondent->maile).
|
|
|
|
## Wymogi
|
|
- `jobs/documents-ingest/` — job CLI (wzorzec jak jobs/gmail-bulk-import/), pip install -e.
|
|
- Dwa adaptery:
|
|
- **Paperless API**: pobierz dokumenty (doc-id, correspondent, tags, created, OCR-content).
|
|
`raw_ref` = REFERENCJA (doc-id) — Paperless=zrodlo prawdy. NIE kopiuj bajtow.
|
|
- **Nextcloud WebDAV**: listuj pliki, pobierz. `raw_ref` = KOPIA do archiwum KB
|
|
(snapshot, bo pliki znikaja). Wykrywaj zmiany (etag/mtime) -> nowa koperta (append).
|
|
- Mapping -> koperta (`packages/kb-mail` wzorzec, moze `packages/kb-documents`):
|
|
- `source` = `paperless` | `nextcloud`
|
|
- `id` = stabilny (paperless doc-id | nextcloud fileid+etag)
|
|
- `ts` = data dokumentu (Paperless: created/z tresci; Nextcloud: mtime)
|
|
- `geo` = null (dokumenty zwykle bez geo; opcjonalnie z tresci pozniej)
|
|
- `raw_ref` = referencja (paperless) | sciezka-archiwum (nextcloud)
|
|
- `entities[]` = OCR-text (do embed), correspondent, tags, filename, content_type
|
|
- **Selektywny index** (jak maile): archiwizuj/referuj wszystko, embeduj sensowne
|
|
(OCR-text -> bge-m3 na SOLARIA -> pgvector). Pomijaj smiecie (puste skany? duplikaty?).
|
|
|
|
## Graf encji (warstwa 3 — cienki start, PIERWSZY cross-source)
|
|
- **correspondent** (Paperless: kto wystawil) = encja. Zmapuj do encji z maili
|
|
(ten sam nadawca faktury i maila = ta sama osoba/firma). To DOWOD zasady kb-00 #7
|
|
(cienka warstwa 4 po drugim zrodle udowadnia cross-source linking).
|
|
- Zapisz link w grafie encji (schema z warstwy 3 — jesli nie istnieje, cienki start tutaj).
|
|
|
|
## Domkniecie dlugu z maili (faza-2-zalacznikow)
|
|
- 70k zalacznikow z importu Gmaila (manifest w entities[] kopert mailowych).
|
|
- Faktury/umowy/PDFy -> wyslij do Paperless (jego OCR + correspondent-detection),
|
|
potem wciagnij z powrotem przez adapter Paperless. NIE osobny pipeline OCR.
|
|
- Sizing: batch, partie (modul 3 OCR-worker na SOLARIA miele).
|
|
|
|
## Do zweryfikowania przez CC
|
|
- Paperless API: endpointy (documents, correspondents, tags), auth (token), paginacja.
|
|
- Nextcloud WebDAV: listowanie rekurencyjne, etag, pobieranie, auth.
|
|
- Czy `packages/kb-mail` da sie reuzyc czy potrzeba `packages/kb-documents` (koperta wspolna!).
|
|
- Jak wykrywac zmiany w Nextcloud (polling etag? webhooks?) dla re-ingestu.
|
|
- Deduplikacja: dokument w Paperless I jako zalacznik maila — ten sam? (sha256 match).
|
|
|
|
## Kryteria ukonczenia
|
|
- Dokumenty z Paperless + Nextcloud w tabeli envelope (kb-postgres@PIHA).
|
|
- OCR-text zembedowany (pgvector), correspondent jako encja.
|
|
- Min. jeden cross-source link correspondent<->mail zademonstrowany.
|
|
- Idempotentny (re-run nie duplikuje — wzorzec z gmail-bulk-import ON CONFLICT).
|
|
- Testy jednostkowe (wzorzec jobs/gmail-bulk-import/).
|
|
- Faza-2-zalacznikow: przetestowana na probce (kilka faktur z maili -> Paperless -> ingest).
|