Zum Inhalt springen
undan

Hilfe › Fakten

Fakten

Jedes Dokument hat Fakten: seinen Typ, seine Tags, typisierte Felder (Betrag, Fälligkeit, IBAN, …) und Notizen. Sie entstehen am Eingang, aus E-Rechnungen, aus Prüfmustern, im Chat und von Hand — und sie sind, wonach das Suchfeld filtert und was seine Tabelle in Spalten zeigt.

Das Faktenblatt der Vorschau

Typ, Aktionen, Tags#

FrageWerteWie viele
TypWas ist es?invoice, medical-invoice, receipt, letter, …genau einer
AktionenWas ist damit zu tun?Bezahlen, Buchen, Einreichen, … — je zu tun, erledigt am oder nicht nötigso viele, wie das Dokument betreffen
TagsWozu gehört es?frei: egge-ctf, marlene, …beliebig viele

Ein Tag trägt keinen Zustand mehr. Was zu tun ist, steht als Aktion am Dokument — und nur dort: eine Aufgabe zeigt auf das Dokument und hält keine Kopie davon. Eine bezahlte Rechnung ist Typ Rechnung (invoice) mit Bezahlen: erledigt am 04.10.2026; eine, die abgebucht wird, Bezahlen: nicht nötig. Eine Fälligkeit ist ein Datum am Dokument und ändert sich nicht, wenn man bezahlt.

Nicht nötig oder das Kreuz? nicht nötig ist eine Entscheidung: die Aktion bleibt am Dokument und gilt als erledigt, ohne dass du etwas tust — die Suche findet sie mit $pay:skipped. Das Kreuz am Ende der Zeile nimmt die Aktion vom Dokument, als hätte sie es nie betroffen; danach trifft es eine Suche wie type:invoice missing:$pay wieder. Im Faktenblatt und auf der Seite des Mail-Reiters steht das Kreuz erst, wenn der Zeiger über der Zeile ist oder die Tastatur in ihr (mit Tab erreichst du es); in der Maske des Eingangs steht es immer.

Dazu Felder mit festem Typ (money, date, text) — welche ein Dokument zeigt, bestimmt sein Typ — und Notizen, die angehängt werden: jede eine Zeile mit Zeitstempel, zusammen ein Verlauf.

Woher ein Wert stammt#

Jeder Wert trägt seine Herkunft, und sie ist im Faktenblatt zu sehen:

HerkunftBedeutung
uservon Hand gesetzt — gewinnt immer
inboxbeim Anwenden im Eingang gerechnet — etwa origin an einem Dokument aus einer Mail
chatvom Modell vorgeschlagen, in der Vorschlagskarte abgenommen
zugferdaus dem XML einer E-Rechnung
regexper Muster gefunden und gegen die Prüfsumme geprüft (IBAN, OCR-Nummer)
claude:haikuvom Modell ausgelesen, ohne Abnahme je Wert
vorbelegung:…ein Tag aus einer Vorbelegung im Vokabular
button:Ansicht/Knopfein Knopf in einer Ansicht

Die Rangfolge beim Schreiben: user vor zugferd vor regex vor claude. Ein Modellwert überschreibt nie, was du selbst gesetzt hast; ein geprüfter Wert (IBAN mit gültiger Prüfsumme) gewinnt gegen einen geratenen.

Bearbeiten#

  • Das Faktenblatt der Vorschau — im Dokumente-Reiter, im Chat, in den Aufgaben. Über jeder Vorschau steht die Faktenleiste mit dem Wichtigsten — der Typ als Chip, der Empfänger, der Betrag, die Frist, was zu tun ist, die Erinnerung („Erinnerung · Mi 9:00", mit dem Zeichen der Erinnerung; „· ohne Antwort", wenn sie nur ohne Antwort kommt), die Tags; ein Klick auf den Stift rechts (oder in die Zeile, oder Alt+6) klappt das Blatt auf. Darin: der Typ als Auswahl, Was zu tun ist mit der Erinnerung (der Chip Erinnerung · Di 9:00, ohne Erinnerung Erinnern … — ein Klick öffnet dasselbe Feld wie im Reiter Mail), die Felder des Typs, bei Rechnungen die Zahlung mit GiroCode zum Abfotografieren, Tags, Notizen.
  • Neben oder unter dem Dokument — das entscheidest du mit dem Umschalter links vom Stift (nur bei offenem Blatt). Die Wahl gilt für alle Vorschauen; das Blatt springt nicht von selbst um, auch wenn die Vorschau schmal wird.
  • Speichern — das Blatt sammelt deine Änderungen, bis du speicherst: geänderte Werte tragen den Vermerk geändert, die Leiste sagt „n ungespeichert", und über dem Blatt stehen Verwerfen und Speichern. Strg+S speichert, wenn die Tastatur im Blatt steht — auch ein Feld, in dem du gerade tippst. Alles zusammen ist ein Schritt: ein Strg+Z nimmt es zurück. Wechselst du mit ungespeicherten Änderungen die Datei, fragt die Anwendung: Speichern, Verwerfen oder Behalten — dann wartet der Entwurf an der Datei, bis du zurückkommst (bis zum Beenden der Anwendung).
  • Während die Tabelle bearbeitet wird (Strg+E in der Tabelle), ist das Blatt nur zum Lesen — die Änderungen gehören dann in die Tabelle.
  • Tags — die Eingabe schlägt vor, was im Bestand schon vorkommt, häufigste zuerst; Return nimmt den ersten Treffer oder einen neuen Namen.
  • „+ Aktion" bleibt offen, bis du Esc drückst oder daneben klickst — so hängst du mehrere Aktionen nacheinander an. „+ Feld" listet die Felder alphabetisch.
  • Leere Felder — oben stehen die Felder mit Wert; die leeren Felder des Typs stehen darunter zugeklappt hinter „Leere Felder (7)" (die Zahl sagt, wie viele). Ein Klick, Return oder die Leertaste klappt sie auf; offen führt Tab hinein. Die Wahl gilt für jedes Dokument, bis du die Anwendung beendest. Hat ein Dokument noch gar keinen Wert, stehen sie von selbst offen. „+ Feld" bietet auch die zugeklappten an — gewählt steht das Feld oben. Gespeichert wird ein leeres Feld nie; die Maske des Eingangs zeigt weiter alle Felder des Typs.
  • Woher ein Wert stammt steht klein unter dem Feldnamen — nur bei Werten, die nicht von dir sind. Was du selbst einträgst, gewinnt; ein Modell überschreibt es nie.
  • Notizen lassen sich berichtigen: Klick auf die Notiz, Text ändern, Feld verlassen oder Strg+Return (und dann speichern). Die alte Fassung bleibt im Verlauf.
  • Aus dem Blatt — jedes Feld hat einen Knopf aus dem Blatt: Feld anklicken, dann im Dokument einen Bereich aufziehen; der Text landet im Feld, in gespeicherter Schreibweise.
  • Der Kalender — jedes Feld vom Typ date (Fälligkeit, Rechnungsdatum, paid_on, …) hat daneben ein Kalendersymbol. Es öffnet ein Monatsblatt direkt am Feld, das auf dem Wert steht, der im Feld steht — sonst auf heute —; ←→ Tag, ↑↓ Woche, Return wählt, Esc schliesst. Die Wahl schreibt das Datum in dasselbe Feld, deutsch wie es dort ohnehin steht (15.09.2026). Tippen geht weiter: der Kalender ist ein zweiter Weg, kein Ersatz.
  • Viele Dokumente auf einmal — der Bearbeiten-Modus der Tabelle (Strg+E, siehe Dokumente).
  • Der Eingang belegt beim Lesen die Maske vor (Herkunft claude:<modell>); geschrieben wird erst mit Fertig.

Jedes Speichern ist ein Schritt: Ctrl+Z im Dokumente-Reiter nimmt es zurück. Dabei wird nichts gelöscht, sondern eine Gegenzeile geschrieben — die Geschichte bleibt vollständig.

Das Vokabular#

Was ein Dokument ist (Typ), was an ihm steht (Felder) und was mit ihm zu geschehen hat (Aktionen), steht in einer Textdatei:

<Dokumentenordner>/.undan/vocabulary.md
---
type: [invoice, medical-invoice, receipt, letter, other]
---
# Fields
- amount: money
- payee: text
- due: date „bis wann“

# Actions
- $pay
- $bookkeep
- $submit: „Bei der Kasse einreichen“

# States
- open
- done
- skipped
- reminder: „zurückgestellt“

# Types
- invoice:         payee, amount, due · $pay
- medical-invoice: payee, amount, due · $pay, $submit
- receipt:         payee, amount

Die Regeln:

  • Links steht der Schlüssel, der Name kommt aus der Sprache. Schlüssel sind englisch (payee, medical-invoice, $pay) und stehen so im Journal; was Maske, Faktenblatt und Tabelle zeigen („Empfänger", „Arztrechnung", „Bezahlen"), kommt aus dem Katalog der gewählten Sprache. Ein eigener Name steht in „…" dahinter (- due: date „bis wann“, - $submit: „…“, bei einem Typ vor dem Doppelpunkt: - invoice „Faktura“: …) und geht vor.
  • Kopfteil zwischen ---: die Liste type. Namen bestehen aus Kleinbuchstaben, Ziffern, _ und -. Ein Typ, der unter # Types eine Zeile hat, muss hier nicht noch einmal stehen.
  • # Fields: - name: typ mit money, date oder text.
  • # Actions: - $schluessel, mit eigenem Namen - $schluessel: „Anzeigename“. Der Schlüssel beginnt mit $ — daran erkennt die Anwendung eine Aktion überall, auch wenn die Zeile hier einmal fehlt —, steht im Journal und ändert sich nie; den Namen darfst du jederzeit ändern, ohne dass ein Wert verloren geht. Eine neue Aktion ist eine Zeile hier; Maske, Faktenblatt und Suche kennen sie dann. Sie öffnet nichts rückwirkend: „zu tun" wird bei der Erfassung geschrieben, nie aus dem Typ gerechnet. Streichst du eine Aktion, bleibt sie an den Dokumenten, die sie tragen; der Prüfstreifen sagt, wie viele darunter noch offen stehen. Ein Datumsfeld ohne $ (etwa paid_on aus früherer Zeit) ist keine Aktion, sondern ein Datum.
  • # States: die Zustände open (zu tun), done (erledigt am), skipped (nicht nötig) und reminder (Erinnerung). Ihre Bedeutung ist vorgegeben. zu tun und erledigt am gibt es immer; wer skipped oder reminder weglässt, bekommt sie nicht mehr angeboten — vorhandene Werte bleiben lesbar. Ohne den Abschnitt gelten alle vier.
  • # Types: - typ: feld, feld · $aktion, $aktion — die Vorlage der Erfassung. Vor dem · die Felder, die die Maske zeigt, dahinter die Aktionen, die der Typ mitbringt (mit ihrem Schlüssel). Ein Typ ohne Zeile (oder mit leerer) zeigt keine Felder und bringt nichts mit — + Feld nimmt am einzelnen Dokument eines dazu.
  • Tags stehen hier nicht. Sie sind frei: jeder gültige Name ist ein Tag, und das Suchfeld schlägt vor, was im Bestand vorkommt. (Ein Vokabular, das noch eine Zeile tag: […] führt, bleibt streng wie früher — streichst du die Zeile, sind die Tags frei. Ebenso area: und # Presets: beides gibt es in der Vorgabe nicht mehr, wird aber weiter gelesen.)

Gespeichert heisst gilt. Änderungen an vocabulary.md wirken mit Strg+S sofort — in der Maske des Eingangs, im Faktenblatt, im Suchfeld. (Wer die Datei mit einem anderen Programm ändert, wartet höchstens eine Minute.)

Ein Feld umbenennen oder streichen#

Die Werte stehen im Journal unter dem Schlüssel. Benennst du - due: date in - pay_by: date um oder streichst die Zeile, bleiben sie unter due stehen — verloren geht nichts, aber Maske, Tabelle und Suche kennen den alten Namen nicht mehr. Der Prüfstreifen über dem Text sagt es: zugeklappt steht dort nur „⚠ 12 Hinweise", ein Klick klappt die Liste auf. Jeder Hinweis hat drei Knöpfe:

  • Umbenennen … — ein neuer Name (aus dem Vokabular gewählt oder getippt); der Dialog sagt vorher, wie viele Werte umziehen. Steht unter dem neuen Namen an einem Dokument schon ein anderer Wert, bleibt es unberührt und wird danach genannt. Kennt das Vokabular den neuen Namen noch nicht, kommt seine Zeile mit dazu.
  • Werte entfernen — nach einer Rückfrage; gelöscht wird nichts, das Journal bekommt Gegenzeilen.
  • Ins Vokabular — schreibt die Zeile zurück in den Text, den Typ aus den Werten gerechnet (lauter Daten → date, lauter Beträge → money). Sie gilt nach dem Speichern.

Was du getan hast, steht danach oben in der Liste, mit Rückgängig; auch der Verlauf nimmt es zurück.

Nach dem Speichern fragt Undan nach. Verschwindet ein Name, unter dem Werte stehen, und kommt genau einer desselben Typs dazu, steht oben in der Liste die Frage „Umbenannt? due → pay_by" mit Werte mitnehmen und Nein. Benennst du mehrere Felder auf einmal um, fragt Undan nicht — dann wählst du das Ziel über Umbenennen … selbst. Dasselbe gilt für Aktionen ($…) und eigene Kontaktfelder. Denk daran, den alten Namen auch unter # Types zu ersetzen — der Prüfstreifen zeigt jede Zeile, die ihn noch nennt.

Ein älteres Archiv kennt noch keine Aktionen. Der Eingang bietet dann oben Vokabular ergänzen an (hängt die drei Abschnitte an, alles Eigene bleibt, Strg+Z nimmt es zurück) und danach In Aktionen umwandeln für die Dokumente, die noch open, hochladen oder nachhaken tragen — ein altes Zahldatum in paid_on oder uploaded_on wandert dabei als „erledigt am" in die Aktion.

Wo die Fakten liegen#

Fakten hängen am Inhalt des Dokuments (seiner Prüfsumme), nicht am Pfad. Umbenennen und Verschieben ändern nichts an ihnen — auch nicht in einem anderen Programm, auch nicht auf dem zweiten Rechner. Eine Kopie teilt sich die Fakten mit dem Original.

Notizen haben eine Kennung#

Bei einer Notiz genügt der Inhalt nicht: sie ändert sich bei jedem Speichern. Jede Notiz bekommt deshalb eine Kennung — eine Zeile id: ganz oben in ihren Eigenschaften:

---
id: k7m2q
name: Keller
---

Daran hängen ihre Fakten. Umbenennen, Verschieben, Bearbeiten in Obsidian — die Kennung bleibt, und mit ihr Typ, Aktionen und Tags der Notiz.

Vergeben wird sie beim Schreiben: wenn du eine Notiz anlegst, wenn du sie im Editor speicherst, wenn eine aus dem Eingang ins Archiv zieht. Für Notizen, die schon im Archiv liegen, gibt es in den Einstellungen unter „Vokabular" den Knopf „Notizen mit Kennungen versehen" — er sagt, wie viele es betrifft, und Strg+Z im Dokumente-Reiter nimmt alles wieder zurück. Von selbst fasst die Anwendung dafür keine Datei an.

Löschst du die id:-Zeile im Editor, schreibt das nächste Speichern sie zurück und sagt es in der Statuszeile. Wird sie in einem anderen Programm gelöscht und die Notiz dort auch verändert, bekommt sie beim nächsten Speichern eine neue Kennung — die alten Fakten finden dann nicht mehr zu ihr. Eine Kopie einer Notiz bekommt immer eine eigene Kennung; das Original behält seine.

Gespeichert werden sie als Journal im Dokumentenordner:

<Dokumentenordner>/.undan/facts/2026-09.jsonl

Eine Zeile je Aussage, mit Zeitstempel, Herkunft und Rechnername. Das Journal wächst nur; der aktuelle Zustand ist „die jüngste Zeile je Feld". Deshalb verträgt es Synchronisation: zwei Rechner, die beide schreiben, ergeben eine Vereinigung ohne Konflikt. Läuft der Ordner über Syncthing, sind die Fakten auf beiden Rechnern da.

Der Punktordner .undan/ ist der einzige Ort im Dokumentenordner, den die Anwendung selbst beschreibt. Er gehört zum Inhalt: sichere und synchronisiere ihn mit.

Was nicht dort liegt, sondern im Zustandsordner der Anwendung (~/.undan/instances/<ordner>/): der Suchindex (cache/, jederzeit neu aufbaubar), die Entwürfe des Editors und die Chatverläufe. Papierkorb, Verlauf und Lesezeichen liegen dagegen im Archiv unter .undan/.

Wird eine Datei am selben Ort neu geschrieben (OCR, Bearbeiten-Fenster, ein fremdes Programm), bleiben die Fakten erhalten: die Anwendung merkt sich, dass der neue Inhalt den alten ersetzt. Bei einer fremden Änderung zeigt das Faktenblatt „Datei geändert seit Erfassung".