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.
Typ, Aktionen, Tags#
| Frage | Werte | Wie viele | |
|---|---|---|---|
| Typ | Was ist es? | invoice, medical-invoice, receipt, letter, … | genau einer |
| Aktionen | Was ist damit zu tun? | Bezahlen, Buchen, Einreichen, … — je zu tun, erledigt am oder nicht nötig | so viele, wie das Dokument betreffen |
| Tags | Wozu 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:
| Herkunft | Bedeutung |
|---|---|
user | von Hand gesetzt — gewinnt immer |
inbox | beim Anwenden im Eingang gerechnet — etwa origin an einem Dokument aus einer Mail |
chat | vom Modell vorgeschlagen, in der Vorschlagskarte abgenommen |
zugferd | aus dem XML einer E-Rechnung |
regex | per Muster gefunden und gegen die Prüfsumme geprüft (IBAN, OCR-Nummer) |
claude:haiku | vom Modell ausgelesen, ohne Abnahme je Wert |
vorbelegung:… | ein Tag aus einer Vorbelegung im Vokabular |
button:Ansicht/Knopf | ein 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+Sspeichert, wenn die Tastatur im Blatt steht — auch ein Feld, in dem du gerade tippst. Alles zusammen ist ein Schritt: einStrg+Znimmt 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+Ein 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;
Returnnimmt den ersten Treffer oder einen neuen Namen. - „+ Aktion" bleibt offen, bis du
Escdrü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,
Returnoder die Leertaste klappt sie auf; offen führtTabhinein. 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,Returnwählt,Escschliesst. 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 Listetype. Namen bestehen aus Kleinbuchstaben, Ziffern,_und-. Ein Typ, der unter# Typeseine Zeile hat, muss hier nicht noch einmal stehen. # Fields:- name: typmitmoney,dateodertext.# 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$(etwapaid_onaus früherer Zeit) ist keine Aktion, sondern ein Datum.# States: die Zuständeopen(zu tun),done(erledigt am),skipped(nicht nötig) undreminder(Erinnerung). Ihre Bedeutung ist vorgegeben. zu tun und erledigt am gibt es immer; werskippedoderreminderweglä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. Ebensoarea: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".
