Diese Datei beschreibt die stabile Übergabeschnittstelle zwischen
Paperless-KIplus und einem nachgelagerten Consumer wie
SecondBrain.
Der Fokus liegt auf drei Datenquellen:
- Paperless-Dokumente inklusive gesetzter
sb_-Custom-Fields - Paperless-Standardmetadaten wie Tags, Titel und Dokumentdatum
- optionale Steuerexporte aus
tax_exports/<jahr>/tax_export.json
Wichtig:
- Die
sb_-Custom-Fields sind die primäre strukturierte Übergabeschicht. - KI-Notizen sind für Menschen gedacht und nur eine ergänzende Fallback-Quelle.
- Die Steuerexporte sind eine zusätzliche Jahres-Sicht und kein Ersatz für den dokumentbezogenen Zugriff über Paperless.
Paperless-KIplus befüllt vorhandene Paperless-Custom-Fields mit Prefix
sb_, wenn enable_secondbrain_custom_fields: true aktiv ist.
Dabei gilt:
- Feldnamen werden über den Paperless-Feldnamen aufgelöst, nicht über feste IDs.
- Select-Felder werden intern per Options-ID gespeichert.
SecondBrainsollte deshalb Select-Werte immer über die Felddefinitionen aus/api/custom_fields/in Labels zurückauflösen.- Bereits vorhandene Werte werden standardmäßig nicht blind überschrieben.
- Fehlende oder ungültige Werte werden weggelassen, nicht künstlich erfunden.
Empfohlene Abrufreihenfolge:
GET /api/custom_fields/GET /api/documents/mit Pagination- optional
GET /api/documents/<id>/notes/, falls Notizen als Fallback eingelesen werden sollen
- Die Felddefinitionen liefern die stabile Übersetzung von Feldname -> Feld-ID
sowie bei Select-Feldern
Label -> Option-ID. - Dokumente enthalten anschließend die tatsächlichen Werte.
- Erst mit beiden Datenquellen zusammen kann
SecondBraindie gespeicherten Werte robust in sein internes Modell überführen.
Endpoint:
GET /api/custom_fields/
Relevante Felder pro Custom Field:
idnamedata_typeextra_data
Für Select-Felder ist besonders wichtig:
extra_data.select_options[]idlabel
SecondBrain sollte daraus folgende Maps aufbauen:
custom_field_by_name[name] -> definitioncustom_field_by_id[id] -> definitionselect_label_by_option_id[field_name][option_id] -> labelselect_option_id_by_label[field_name][label_lower] -> option_id
Endpoint:
GET /api/documents/
Empfohlene Felder, die SecondBrain berücksichtigen sollte:
idtitlecreateddocument_typecorrespondentstorage_pathtagschecksumcontentcustom_fields
Paperless-ngx kann custom_fields je nach Version oder Endpunkt leicht
unterschiedlich zurückgeben. SecondBrain sollte deshalb bewusst tolerant
implementiert werden.
Beispiel:
{
"custom_fields": {
"sb_document_category": {
"value": 11
},
"sb_amount_total": {
"value": "EUR123.45"
}
}
}Beispiel:
{
"custom_fields": [
{
"name": "sb_document_category",
"value": 11
},
{
"name": "sb_amount_total",
"value_monetary": "EUR123.45"
}
]
}SecondBrain sollte intern auf ein einheitliches Format normalisieren:
{
"sb_document_category": 11,
"sb_amount_total": "EUR123.45"
}sb_document_category(select)sb_life_area(select)
sb_case_reference(string)sb_contract_number(string)sb_customer_number(string)sb_invoice_number(string)sb_policy_number(string)sb_meter_number(string)sb_provider_name(string)sb_person_involved(string)sb_object_reference(string)sb_bank_account_hint(string)
sb_amount_total(monetary)sb_amount_net(monetary)sb_amount_tax(monetary)
sb_due_date(date)sb_document_date(date)sb_period_start(date)sb_period_end(date)sb_effective_from(date)sb_effective_until(date)
sb_requires_action(boolean)sb_action_status(select)sb_action_owner(select)sb_next_action(string)
sb_legal_relevance(select)sb_financial_relevance(select)sb_tax_year(integer)sb_tax_type(select)
sb_energy_type(select)sb_vehicle(select)
sb_confidence(select)sb_source_quality(select)sb_sensitive(boolean)sb_export_to_secondbrain(boolean)sb_ignore_by_secondbrain(boolean)
sb_related_documents(documentlink)sb_external_url(url)
- UTF-8-Text
- leer oder nicht gesetzt bedeutet: kein verlässlicher Wert vorhanden
In Paperless wird der Wert als Options-ID gespeichert.
Beispiel:
{
"sb_document_category": 11
}SecondBrain sollte diesen Wert mit den zuvor geladenen
extra_data.select_options wieder auf das sichtbare Label zurückführen.
Beispiel intern:
{
"field": "sb_document_category",
"raw_value": 11,
"label": "Rechnung"
}Immer als ISO-Datum:
YYYY-MM-DD
Beispiel:
{
"sb_due_date": "2026-05-15"
}Paperless-KIplus schreibt Geldwerte im Paperless-kompatiblen Format:
EUR1234.56
Beispiele:
EUR49.90EUR1234.56
Empfohlene Normalisierung in SecondBrain:
{
"currency": "EUR",
"amount": 1234.56
}Echte Booleans:
truefalse
Ganzzahl, zum Beispiel:
{
"sb_tax_year": 2025
}Absolute URL mit http:// oder https://
Liste von Dokument-IDs.
Beispiel:
{
"sb_related_documents": [123, 456]
}Diese Felder sind für die Consumer-Logik besonders wichtig:
sb_export_to_secondbrainsb_ignore_by_secondbrainsb_confidencesb_source_qualitysb_requires_actionsb_action_status
Empfohlene Interpretation:
sb_export_to_secondbrain = true- Dokument darf aktiv nach
SecondBrainübernommen werden
- Dokument darf aktiv nach
sb_ignore_by_secondbrain = true- Dokument sollte in
SecondBrainstandardmäßig nicht importiert werden
- Dokument sollte in
sb_confidence- Vertrauensindikator für die Strukturqualität
sb_source_quality- Qualität und Herkunft der Quelle
sb_requires_action = true- Dokument erzeugt To-do, Review oder Fristbezug
Das Fehlen eines Feldes bedeutet nicht automatisch false oder nicht relevant.
Gerade bei KI-basierten Zusatzfeldern ist die Abwesenheit häufig ein Signal für:
- zu geringe Sicherheit
- nicht eindeutig im Dokument enthalten
- bewusst nicht überschrieben
SecondBrain sollte deshalb zwischen
explizit falseexplizit leernicht vorhanden
unterscheiden.
Die sichtbaren Labels werden in Paperless-KIplus verwendet, aber in Paperless
als Options-ID gespeichert. SecondBrain sollte sich deshalb nicht auf feste
IDs verlassen.
- Rechnung
- Vertrag
- Bescheid
- Steuer
- Versicherung
- Recht
- Bank
- Gehalt
- Energie
- Fahrzeug
- Gesundheit
- Immobilie
- Garantie
- Kommunikation
- Sonstiges
- Privat
- Arbeit
- Haus
- Auto
- Finanzen
- Steuer
- Recht
- Gesundheit
- Versicherung
- Energie
- Familie
- Technik
- Offen
- In Prüfung
- Wartet auf Rückmeldung
- Erledigt
- Bezahlt
- Widersprochen
- Weitergeleitet
- Archiviert
- Ich
- Steuerberater
- Anwalt
- Arbeitgeber
- Versicherung
- Behörde
- Bank
- Sonstige
- Keine
- Niedrig
- Mittel
- Hoch
- Fristkritisch
- Keine
- Einnahme
- Ausgabe
- Erstattung
- Nachzahlung
- Forderung
- Einkommensteuer
- Gewerbesteuer
- Umsatzsteuer
- Lohnsteuer
- Grundsteuer
- Kapitalertragsteuer
- Kfz-Steuer
- Sonstige Steuer
- Strom
- Gas
- Wasser
- PV
- Einspeisung
- Wallbox
- Sonstige
- Tesla Model 3
- Anderes Fahrzeug
- Nicht fahrzeugbezogen
- Manuell geprüft
- KI sicher
- KI unsicher
- OCR unsicher
- Ungeprüft
- Original-PDF
- Scan gut
- Scan schlecht
- Foto
- Import
Wenn enable_tax_enrichment: true aktiv ist, nutzt Paperless-KIplus
vorhandene Steuerdaten zusätzlich als Quelle für sb_-Felder.
Wichtige Ableitungen:
tax_year -> sb_tax_yeardocument_date -> sb_document_dateservice_period_from -> sb_period_startservice_period_to -> sb_period_endissuer -> sb_provider_nametotal_amount -> sb_amount_total
Das bedeutet für SecondBrain:
sb_-Felder bleiben die primäre Dokument-Schnittstelle- die jährlichen Steuerexporte sind eine ergänzende Aggregationssicht
Optional erzeugt Paperless-KIplus zusätzlich:
tax_exports/<jahr>/tax_export.jsontax_exports/<jahr>/tax_review.csv
Diese Dateien sind nützlich für:
- Jahresübersichten
- Review-Queues
- Steuerfall-spezifische Dashboards
Sie sind aber nicht die primäre Dokumentquelle für SecondBrain.
Enthält mindestens:
taxpayertax_yeardocumentscategory_totalsreview_itemsmissing_evidencenotes_for_wiso
Eine Zeile pro Dokument mit unter anderem:
document_idtitledocument_dateissuertotal_amounttax_yeartax_categorytax_subcategorywiso_target_areaformal_validityclassification_confidenceeligibility_confidenceflagsreasoning_summary
Wenn enable_ai_notes aktiv ist, ergänzt Paperless-KIplus die Notiz mit
einem Abschnitt:
SecondBrain-Felder:
- sb_document_category: ...
- sb_life_area: ...
- sb_case_reference: ...
- sb_amount_total: ...
- sb_due_date: ...
- sb_requires_action: ...
- sb_action_status: ...
- sb_confidence: ...
Das ist hilfreich für Menschen und kann in SecondBrain als Fallback dienen,
wenn strukturierte custom_fields fehlen.
Empfehlung:
- primär
custom_fieldslesen - Notizen nur als Backup oder Debug-Sicht nutzen
Für bestehende Paperless-Datenbanken gibt es einen Backfill-Modus.
Dabei gilt:
- bereits KI-getaggte Dokumente werden erneut analysiert
- Standard-Metadaten dieser Dokumente bleiben unverändert
- neue
sb_-Felder und Steueranreicherungen können trotzdem gesetzt werden
Das ist für SecondBrain wichtig, weil auch Altbestand nachträglich eine
vollständige sb_-Belegung bekommen kann, ohne dass klassische Paperless-
Metadaten neu gemischt werden.
- Lade alle Custom-Field-Definitionen aus Paperless
- Baue Maps für Feldnamen, Feld-IDs und Select-Labels
- Lade Dokumentseiten aus
/api/documents/ - Normalisiere
custom_fieldstolerant auf ein einheitliches internes Format - Wandle Select-IDs in sichtbare Labels um
- Parse
monetarynach{currency, amount} - Nutze
sb_export_to_secondbrainundsb_ignore_by_secondbrainals primäre Importsteuerung - Ziehe optional Steuerexporte als Jahresaggregat hinzu
{
"document_id": 5220,
"title": "2026-04-04_patrick.preuss_Re_...",
"created": "2026-04-04",
"sb": {
"document_category": {
"raw": 11,
"label": "Rechnung"
},
"life_area": {
"raw": 22,
"label": "Finanzen"
},
"amount_total": {
"raw": "EUR123.45",
"currency": "EUR",
"amount": 123.45
},
"due_date": "2026-05-15",
"requires_action": true,
"action_status": {
"raw": 31,
"label": "Offen"
},
"export_to_secondbrain": true,
"ignore_by_secondbrain": false
}
}SecondBrain sollte folgende Fälle bewusst behandeln:
- Feld existiert in Paperless nicht
- Select-Option-ID ist vorhanden, aber nicht mehr auflösbar
- Dokument hat gar keine
custom_fields custom_fieldskommen als Liste statt Dictionarymonetaryhat unerwartetes Format- Werte fehlen, weil die Confidence zu niedrig war
- Altbestand wurde noch nicht durch den Backfill geschickt
Wenn ein erwartetes sb_-Feld nicht in SecondBrain auftaucht, prüfe in
dieser Reihenfolge:
- Existiert das Feld in Paperless wirklich?
- Ist
enable_secondbrain_custom_fields: trueaktiv? - Wurde das Dokument bereits klassifiziert oder durch den Backfill geschickt?
- Hat
Paperless-KIplusden Wert wegen zu geringer Confidence weggelassen? - War bereits ein Wert gesetzt und
overwrite_existing=false? - Lässt sich die Select-Option-ID sauber in ein Label zurückübersetzen?
Diese Schnittstelle garantiert nicht:
- dass jedes Dokument jedes
sb_-Feld erhält - dass KI-Werte fachlich immer korrekt sind
- dass KI-Notizen maschinenstabil bleiben
- dass Select-Option-IDs über Umgebungen hinweg identisch sind
Deshalb sollte SecondBrain immer:
- feldnamenbasiert arbeiten
- Selects dynamisch auflösen
- fehlende Werte tolerant behandeln
- KI-Notizen nur ergänzend nutzen