Zum Hauptinhalt springen

Der Import-Prozess: Vom Kalender zur Tabelle

Informationen zum Artikel

Der Kern von DolmiDesk™ ist die Verwandlung Deines Google Kalenders in eine präzise Buchhaltungs-Tabelle.

Dieser Artikel erklärt den kompletten Fluss: Wie Du Termine eintragen musst, wie das System sie versteht (Logik) und wie sie im Tab Aufträge landen.

Bevor es losgeht

Damit ein Termin überhaupt vom System "gesehen" wird, gelten folgende Regeln:

  • Der Kalender: Du musst in der Config definiert einen bestimmten Kalender auswählen (z.B. "DolmiDesk Aufträge"). Nur Termine aus diesem Kalender werden importiert.
  • Die Farbe: Der Termin muss die Farbe haben, die in der Config definiert ist (Standard: MAUVE). Andere Farben (z.B. private Termine) werden ignoriert.
  • Der Zeitraum: Das Skript schaut standardmäßig 7 Tage in die Vergangenheit (wird in der Config definiert). Alte Termine werden nicht erneut importiert, wenn sie schon in der Tabelle stehen oder 7 Tage überschritten sind.

Wie und wann wird importiert?

Der Import wird manuell angestoßen, indem Du in der Tabelle Aufträge auf die Schaltfläche 📅 Neue Aufträge importieren klickst.

Screenshot von der Schaltfläche '📅 Neue Aufträge importieren' in der Tabelle 'Aufträge'.
Die Schaltfläche '📅 Neue Aufträge importieren' in der Tabelle 'Aufträge'.

Sobald Du mit dem System vertraut bist, kannst Du den Import auch automatisieren, indem Du einen zeitgesteuerten Trigger in Google Apps Script einrichtest (z.B. täglich um Mitternacht).

Der Kalender als Eingabemaske

Du nutzt den Google Kalender nicht nur für Zeitplanung, sondern um dem System Daten zu füttern. Das ist eine logische Stelle für Dich, weil Du dort sowieso Deine Termine verwaltest - Du hast schon alle Infos parat, wir brauchen sie nur noch in der Tabelle.

Das System liest diese Felder automatisch aus:

Screenshot eines Google Kalender Eintrags mit den wichtigsten Feldern Titel, Ort, Datum/Zeit und Beschreibung.
Kalender-Eintrag mit den wichtigsten Feldern

Hier die Übersicht:

Kalender-FeldZiel in Tabelle AufträgeFunktion
1. TitelAnlassBeschreibt, was gemacht wurde. Präfixe (s.u.) werden entfernt.
2. OrtEinsatzadresseZiel für die Google Maps Berechnung.
3. Datum/ZeitDatum, Beginn, EndeBasis für Honorar und Reiseketten.
4. Notizen & Anhänge(Export)Anhänge später bei der Rechnungserstellung automatisch kopiert und in die E-Mail eingefügt und in Notizen können die zusätzlichen Felder definiert werden (siehe Die Beschreibung: Deine Kommandozentrale)

Die Typ-Erkennung (Steuercodes)

Du kannst dem System über den Titel mitteilen, wie der Auftrag abgerechnet werden soll. Das Schlüsselwort muss ganz am Anfang stehen.

Präfix im TitelTypAuswirkung auf Abrechnung
Online ...OnlineKeine Fahrtkosten. • Adressen werden geleert. • Ggf. Online-Pauschale.
[Ausfall] ...AusfallVolle Fahrtkosten (Du warst vor Ort). • Honorar nach "Ausfallpauschalen" (Zeit).
[Absage] ...AbsageKeine Fahrtkosten (Du bist daheim geblieben). • Honorar nach "Ausfallpauschalen".
(Kein Präfix)Vorort• Standard: Honorar nach Zeit + Fahrtkosten.

Beispiel:

  • Kalender: [Ausfall] Gerichtstermin Müller
  • Tabelle: Spalte Anlass = "Gerichtstermin Müller", Spalte Typ = "Ausfall", Abrechnung nach Ausfallpauschalen + volle Fahrtkosten.

Der Steuercode wird entfernt und landet nicht in der Tabelle.

Die Beschreibung: Deine Kommandozentrale

Im Notizfeld des Termins kannst Du Daten übergeben, die Google Kalender nicht kennt. Syntax: Schlüssel: Wert

Kunde: Max Mustermann
Aktenzeichen: 123-456

Das System ist flexibel: Jeder Schlüssel, den Du hier schreibst, wird in die gleichnamige Spalte in der Tabelle Aufträge geschrieben. Du kannst also auch eigene Spalten anlegen (z.B. Abteilung, Projekt, etc.) und sie hier füllen.

Die Logik-Engine

Wenn Du auf "DolmiDesk → Aufträge importieren" in der Tabelle klickst, entscheidet das Skript, welche Daten Vorrang haben und wie die Reise berechnet wird.

Das System entscheidet nach folgender Rangfolge, was in einer Zelle landet:

Die "Aus"-Taste

Schreibst Du Einsatzadresse: false, bleibt das Feld leer und die Reise wird nicht berechnet (0 km). Das überschreibt alles.

Diese Regel gilt für jede Spalte. Möchtest Du z.B. einen Empfänger nicht automatisch zuweisen, schreibe Empfänger: false.

Hier ist ein Beispiel-Szenario:

  • Szenario: Du bist zu einem Termin gefahren, möchtest aber keine Fahrtkosten abrechnen (z.B. Kulanz).
  • Lösung: Schreibe in die Beschreibung:
    Einsatzadresse: false
  • Ergebnis: Das Skript ignoriert die Adresse aus dem Feld "Ort". Die Spalten Fahrdistanz und Fahrzeit bleiben leer (0 km).

Manueller Eintrag

Schreibst Du Empfänger: Polizei, wird dieser genommen – egal was in den Stammdaten steht. Dies gilt ebenfalls für alle Felder, auch für die Standard-Felder des Kalenders: zum Beispiel wenn Du Einsatzadresse: Musterstraße 1, Berlin schreibst, wird diese Adresse genutzt. Oder wenn Du einen besonderen Eintrag für Anlass brauchst, kannst Du diesen ebenfalls manuell setzen.

Hier ein Beispiel-Szenario:

  • Szenario: Der Kunde "Max Mustermann" hat normalerweise das "Amtsgericht" als Empfänger. Diesmal zahlt aber ausnahmsweise die "Polizei".
  • Lösung:
    Kunde: Max Mustermann
    Empfänger: Polizei Frankfurt
  • Ergebnis: Das Skript ignoriert den Standard-Empfänger aus den Stammdaten und nimmt Deinen manuellen Eintrag. (Voraussetzung: "Polizei Frankfurt" existiert in Deinen Empfänger-Stammdaten).

Automatische Stammdaten-Logik

Hast Du nichts angegeben, sucht das System: "Welcher Standard-Empfänger gehört zu diesem Kunden?"

Standard Kalender-Daten

Das System nutzt die Daten aus dem Kalender (Titel, Ort, Datum/Zeit), wenn keine der vorherigen Regeln greift.

Das System nutzt nun eine Fuzzy-Suche, um Tippfehler in den Kunden- und Empfängernamen zu korrigieren. Diese Funktion wird nur dann aktiviert, wenn der eingegebene Name nicht mit den vorhandenen Daten in den Stammdaten übereinstimmt.

Wie funktioniert die Fuzzy-Suche?

Wenn Du einen Namen (z.B. Kunde oder Empfänger) im Kalender einträgst, der nicht exakt mit einem Namen in den Stammdaten übereinstimmt, wird das Skript die Levenshtein-Distanz [1] verwenden, um den Namen zu korrigieren. Das bedeutet, dass ähnliche Namen (z. B. Tippfehler oder Abweichungen) automatisch korrigiert werden.

Das Skript prüft auf mögliche Übereinstimmungen und schlägt die am besten passende Korrektur vor. Der korrigierte Name wird dann automatisch in die Tabelle „Aufträge“ übernommen.

Beispiel für eine fehlerhafte Eingabe:

  • Eingabe: Kunde: Max Mustrmann
  • Korrektur: Das System erkennt den Fehler und korrigiert es auf „Max Mustermann“.

Hinweis: Die Fuzzy-Suche wird nur aktiviert, wenn der Kunde oder Empfänger nicht in den Stammdaten gefunden wird. Die Empfindlichkeit der Fuzzy-Suche kann in der Config-Tabelle angepasst werden.

Die Ketten-Logik (Fahrtkosten)

Das System erkennt, ob Du mehrere Termine an einem Tag hast. Die Regel: Liegen zwischen Ende von Termin A und Start von Termin B weniger als 2 Stunden (konfigurierbar), bilden sie eine Kette.

Szenarien für Fahrtkosten im Detail

Hier die fünf wichtigsten Szenarien:

  1. Einzel-Termin:

    • Du fährst: Zuhause → Termin → Zuhause.
    • Abrechnung: Volle Anreise + Volle Abreise.
  2. Die Kette (Termin A und B liegen nah beieinander):

    • Du fährst: Zuhause → Termin A → Termin B → Zuhause.
    • Termin A: Zahlt volle Anreise (von Zuhause). Die Abreise wird fiktiv halbiert, da Du ja nicht nach Hause fährst. Die eine Hälfte der Abreise wird dem nächsten Termin zugerechnet.
    • Termin B: Zahlt nur die halbe Anreise (den Weg von A nach B). Zahlt volle Abreise (nach Hause).
  3. Kette unterbrochen (Pause > 2h):

    • Du fährst: Zuhause → Termin A → Zuhause (2h Pause) Zuhause → Termin B → Zuhause.
    • Das System nimmt an, Du bist zwischendurch nach Hause gefahren.
    • Beide Termine werden als Einzel-Termine berechnet (Zuhause → A → Zuhause und Zuhause → B → Zuhause).
  4. Online in der Kette:

    • Bei einem Online Termin werden keine Fahrtkosten berechnet, aber es wird davon ausgegangen, dass Du dafür nach Hause fährst.
    • Wenn Du Termin A (Vorort) → Termin B (Online) → Termin C (Vorort) hast, wird berechnet, als würdest Du von A nach Hause fahren und für C wieder losfahren (da B keine physische Anwesenheit erfordert).
  5. Absage:

    • Bei Absage Terminen werden keine Fahrtkosten berechnet und sie werden von der Ketten-Logik ausgeschlossen. Es wird angenommen, dass Du nicht hingefahren bist.

Transportmittel steuern

Standardmäßig nutzt das System den Modus aus der Config (Bahn oder Auto). Es ist aktuell nicht möglich, das Transportmittel pro Termin zu steuern. Du kannst jedoch in der Beschreibung des Termins den Schlüssel Transportmittel: false setzen, um die Fahrtkosten-Berechnung komplett zu deaktivieren.

Vollständigkeitsprüfung

Wenn alle Daten eingelesen sind, prüft das System, ob alle notwendigen Felder gefüllt sind, um den Auftrag korrekt abzurechnen. Fehlen wichtige Daten (z.B. Kunde, Einsatzadresse), wird der Eintrag in der Tabelle Aufträge mit dem Status Überprüfen markiert.

Falls ein Eintrag den Status Überprüfen erhält, solltest Du in der Tabelle Aufträge die fehlenden Daten manuell ergänzen, damit der Auftrag korrekt verarbeitet werden kann.

Wenn alle Daten vorhanden sind, wird der Eintrag mit dem Status Bereit markiert und kann für die Rechnungserstellung genutzt werden.

Für die Vollständigkeitsprüfung gelten folgende Regeln:

FeldNotwendig für Abrechnung?
KundeJa
EmpfängerJa
EinsatzdatumJa
AnlassJa
Dolmetschzeit BeginnJa
Dolmetschzeit EndeJa
EinsatzadresseNur bei vor Ort Terminen oder Ausfällen
Anreise StartNur bei vor Ort Terminen oder Ausfällen
Anreise EndeNur bei vor Ort Terminen oder Ausfällen
AnreisedistanzNur bei vor Ort Terminen oder Ausfällen
Abreise StartNur bei vor Ort Terminen oder Ausfällen
Abreise EndeNur bei vor Ort Terminen oder Ausfällen
AbreisedistanzNur bei vor Ort Terminen oder Ausfällen

Das Ergebnis (Tabelle "Aufträge")

Die importierten Daten landen im Tab Aufträge.

Screenshot der Tabelle 'Aufträge' mit importierten Terminen aus dem Google Kalender.
Importierte Aufträge im Google Sheet

Das Skript arbeitet nach dem Prinzip "Append Only" (Nur Hinzufügen), um Deine manuellen Änderungen nicht zu überschreiben.

Ein perfekter Kalender-Eintrag

So sieht ein vollständig genutzter Eintrag aus:

Titel: Gerichtstermin Herr Müller Zeit: 09:00 - 11:00 Ort: Gerichtsstraße 2, Frankfurt Beschreibung:

Kunde: Max Müller
Notiz: Bitte am Eingang warten

Das Skript wird:

  1. Den Kunden "Max Müller" erkennen und dessen Standard-Empfänger (z.B. "Landgericht") laden.
  2. Den Anlass "Gerichtstermin Herr Müller" eintragen.
  3. Die Fahrtzeit mit dem Auto berechnen (weil Standard in der Config).
  4. Die Fahrtkosten berechnen (Anreise + Abreise).
  5. Den Standard-Empfänger aus den Stammdaten eintragen.
  6. Die Notiz ignorieren (da es keine Spalte "Notiz" gibt, außer Du hast sie selbst angelegt).

  1. Wikipedia, „Levenshtein-Distanz“. [Online]. Verfügbar unter: https://de.wikipedia.org/wiki/Levenshtein-Distanz

Über den Autor

Porträtfoto von Dmitry Dugarev

Beste Grüße

Dmitry Dugarev

Entwickler von DolmiDesk™ & IT-Compliance-Experte. Ursprünglich habe ich dieses System entwickelt, um meiner Frau (DGS-Dolmetscherin) die Wochenenden zu retten. Heute sorge ich dafür, dass Deine Abrechnung sicher und vollautomatisch läuft.