Rückerstattung von Konferenzkosten
Erstelle zwei Tabellenkalkulationen aus denselben Zeilen, mit denselben Summen, und speichere jeden darin zitierten Beleg in <Konferenzordner>/החזרים/קבלות/:
- SENT-Datei
<Konferenzordner>/החזרים/<Vollständiger Name> הוצאות.xlsx– die einzige Datei, die zur Finanzabteilung geht. Spalte Bסעיף= Budgetposten-Kategorie; Belegblatt; Bankblock; Wechselkurse. Kein Soll-Ist-Vergleich. - INTERNE Datei
<Konferenzordner>/החזרים/<Vollständiger Name> הוצאות - פנימי.xlsx– die lokale Kopie des Benutzers, niemals angehängt oder versendet. Spalte Bהשירות= was der Posten war (z. B. "קפה", "רכבת שדה–עיר"), eineסעיף-Kategoriespalte nachהערותund die Budgetvergleichstabelle.
Beide sind hebräisch und rechts-nach-links; sprich mit dem Benutzer auf Englisch. Das Layout stammt aus der gebündelten assets/claim-template.xlsx (nur Beschriftungen); der Benutzer liefert nie eine Tabelle.
Profil (vollständiger Name und Bankdaten). Lies ~/.config/conference-reimbursement/profile.json ({"full_name": "...", "bank": {"בנק": "...", "סניף": "...", "מספר חשבון": "..."}}). Wenn es fehlt oder unvollständig ist, frage mit dem AskUserQuestion-Tool nach den fehlenden Feldern (der Benutzer gibt die Werte als eigene Antwort ein) und speichere die Datei dann mit Berechtigungen 600. Behalte sie nur dort – außerhalb jedes Repositorys und Projektordners. Committe sie niemals, gib die Bankdaten niemals im Chat oder im Bericht aus (sage "Bankdaten: aus Profil") und kopiere sie nur in den bank-Schlüssel des Scratchpad-Spezifikationsobjekts.
Stelle jede Frage an den Benutzer über das AskUserQuestion-Tool – niemals in Prosa – eine Entscheidung pro Frage, zuerst die empfohlene Option.
Wähle den Modus
- Modus A – vollständige Abrechnung. Das genehmigte Budgetformular-PDF, die Bankdaten (Profil), der Belegordner und der Postfachzugriff sind alle verfügbar. Führe Schritte 1–7 aus.
- Modus B – unvollständige Eingaben. Eines oder mehrere davon fehlen. Führe dieselben Schritte aus und lasse den fehlenden Teil weg, erfinde ihn niemals:
- Benutzer lehnt Angabe von Bankdaten ab →
bankweglassen; das Skript schreibt leere beschriftete Zellen und warnt "Bankdaten fehlen – von Hand ausfüllen"; melde es; - kein Postfachzugriff → verwende nur die Dateien, die der Benutzer in
קבלות/ablegt; melde, dass E-Mails nicht durchsucht wurden; gib in Schritt 7 den E-Mail-Text anstelle des Entwurfs aus; - kein Budgetformular →
budgetweglassen; die INTERNE Datei wird ohne die Budgettabelle und ohne Vergleich mit genehmigten Beträgen erstellt.
- Benutzer lehnt Angabe von Bankdaten ab →
Liste jede Modus-B-Lücke im Bericht unter "von Hand zu erledigen" auf.
1. Eingaben sammeln (schreibgeschützt)
- Genehmigtes Budget. Öffne das PDF des Reisekostenformulars im Konferenzordner (
*טופס נסיעות*). Lies es selbst; Formulare unterscheiden sich je nach Einrichtung. Notiere jede genehmigte Zeile in USD (Tagegeld אש״ל, Flug טיסה, Hotel, Versicherung, Anmeldung, Sonstiges) und die Reisedaten. - Profil. Lade den vollständigen Namen und die Bankdaten wie oben beschrieben (frage nur beim ersten Mal).
- Physische Belege. Liste
קבלות/auf und lies jedes Bild (konvertiere HEIC zuerst, Schritt 3). Notiere Datum, Anbieter, Betrag, Währung, letzte Kartenziffern und Anzahl der Teilnehmer. - E-Mail-Belege. Durchsuche das Postfach im Zeitraum Buchungsdatum → Rückreisedatum plus etwa zwei Wochen sowie das Reiselabel oder den Ordner des Benutzers. Führe die Abfragen pro Kategorie gemeinsam in einem Durchgang aus – lies zuerst
references/email-sources.md. Schaue über die vom Benutzer aufgelisteten hinaus: Unentdeckte Ausgaben zu finden ist Teil der Aufgabe; schlage jeden gefundenen vor. - Andere Reisen ausschließen. Öffne jede Finanzüberweisung und jede Flugbuchung im Zeitfenster und gleiche Konferenz, Route und Daten ab. Notiere jeden Ausschluss für den Bericht.
2. Frage die Richtlinienentscheidungen
Frage nur die zutreffenden, eine Entscheidung pro Frage, zuerst die empfohlene Option. Diese Standardeinstellungen stammen von einem früheren Antrag; sie sind Vorschläge, keine institutionellen Regeln.
- Gemeinsame Hotelbuchung → nur eigenes Zimmer (Empfohlen) / gesamte Buchung.
- Gemeinsame Mahlzeiten → gesamte Rechnung / nur eigener Anteil. Markiere die gewählte Option für den Sachbearbeiter.
- Wechselkurs → Repräsentativer Wechselkurs der Bank von Israel am Rückreisetag, ein Kurs pro Währung (Empfohlen) / der Kurs jedes Belegdatums.
- Gemeinsame Posten (eine Poster-Rechnung, die zwei Personen abdeckt) → den Anteil des Benutzers geltend machen, mit einem Hinweis.
- Mit dem Flug gekaufte Zusatzleistungen (Sitzplatz, Gepäck, Versicherung) → innerhalb der Flugzeile (Empfohlen).
3. Belege als PDFs speichern
- E-Mail-Anhänge. Wenn der E-Mail-Connector Nachrichtentext, aber keine Anhänge zurückgibt, prüfe zuerst erneut, ob er sie jetzt abrufen kann; wenn nicht, lade sie über Browser-Automatisierung herunter (öffne die Nachricht, klicke das Download-Symbol des Anhangs, verschiebe die Datei dann aus
~/Downloads). Ohne Browser-Automatisierung bitte den Benutzer, sie herunterzuladen oder inקבלות/abzulegen. - E-Mails ohne Anhang (Auftragsbestätigungen) → als PDF drucken.
- Benenne jede Datei
<was> <Anbieter> <Belegnummer>.pdf, auf Hebräisch. - HEIC-Fotos → füge neben dem Original eine PDF-Kopie hinzu, verändere niemals das Original. macOS:
sips -s format pdf IN.heic --out IN.pdf. Sonst verwende Pillow mit pillow-heif, falls installiert, andernfalls bitte den Benutzer, das Foto als PDF oder JPEG zu exportieren. Für das Belegblatt der Tabelle konvertiere auch jedes Foto und jeden Screenshot in ein JPEG, benannt nach dem Basisnamen des Belegs, im Scratchpad (niemals über dem Original):sips -s format jpeg -s formatOptions 70 -Z 1400 IN --out "<Beleg-Basisname>.jpg". - Lies jedes gespeicherte PDF. Nimm den Betrag aus dem Dokument, nicht aus dem E-Mail-Text. Wenn sie abweichen, verwende das Dokument und markiere die Abweichung.
4. Erstelle die Tabelle
-
Rufe die repräsentativen Wechselkurse der Bank von Israel (boi.org.il) für das gewählte Datum für jede verwendete Fremdwährung ab. Setze das Datum in
rates.label:שער יציג בנק ישראל, <dd.mm.yyyy>. Verwende niemals einen Kurs aus dem Gedächtnis oder von einem früheren Antrag. -
Schreibe das Spezifikations-JSON in das Scratchpad. Schema, Layout und Modus-B-Verhalten:
references/spec-format.md; synthetisches Arbeitsbeispiel:references/example-spec.json. Setzebankaus dem Profil. Lassetemplateweg: Die gebündelte Vorlage ist die Standardvorlage. -
Zeilenregeln:
- eine Zeile pro Beleg, sortiert nach Datum;
- der Betrag in genau einem Schlüssel: seiner Ursprungswährung (
usd,euroder einem zusätzlichen Code, der auch inratesist) oderils; receipt= Dateibasisname(n) inקבלות/, mehrere mit+verbunden;noteerklärt alles, was ein Sachbearbeiter in Frage stellen könnte (gemeinsame Rechnung, halbe Rechnung, aus einer Hotelrechnung herausgelöster Posten);line= ein Budgetposten-Name, genau wie inbudgetgeschrieben; Spalte B der SENT-Datei zeigt ihn (nur Kategorie, niemals "Kaffee" oder "Abendessen" – Sachbearbeiter sehen Genehmigungskategorien), und dieסעיף-Spalte und die Budgettabelle der INTERNEN Datei verwenden ihn;service= eine kurze hebräische Beschreibung des Postens ("קפה", "ארוחת ערב", "רכבת שדה–עיר"); wird nur in Spalte B der INTERNEN Datei angezeigt (weggelassen → die Kategorie wird angezeigt);- Mahlzeiten, einschließlich des Konferenzdinners → die Tagegeld-Zeile;
- Restaurantgebühren auf einer Hotelrechnung → ihre eigene Mahlzeitenzeile, Hotelzeile reduziert.
receipt_images= die JPEGs aus Schritt 3 (nur Fotos und Screenshots dieser Reise). Sie kommen auf das Blattקבלות, 5 pro Zeile, jeweils mit einer Beschriftungszelle, die den Basisnamen der Datei enthält. E-Mail-PDFs werden nicht eingebettet; sie kommen in den ZIP-Ordner in Schritt 7.
-
Führe aus:
python3 -I "${CLAUDE_PLUGIN_ROOT}/skills/conference-reimbursement/scripts/build_claim.py" spec.jsonEin Durchlauf schreibt beide Dateien. Es gibt JSON mit
output(SENT),output_internal,total_ILS,total_USDundwarningsaus. Behebe jede Warnung zu Budgetposten; übernimm die Modus-B-Warnungen in den Bericht.output_internalwird standardmäßig auf den SENT-Pfad mit- פנימיvor.xlsxgesetzt; setze es in der Spezifikation nur, um die lokale Kopie woandershin zu legen. -
Das Skript weigert sich, eine der Ausgabedateien zu überschreiben, es sei denn,
"overwrite": trueist gesetzt. Setze es niemals auf eine Datei, die der Benutzer von Hand bearbeitet hat; schreibe einen neuen Namen oder frage.
5. Überprüfen
Erledigt bedeutet ausgeführt und geprüft. Lies zuerst references/pitfalls.md.
-
Führe die Prüfungen aus:
python3 -I "${CLAUDE_PLUGIN_ROOT}/skills/conference-reimbursement/scripts/check_claim.py" spec.jsontotal/total_internal: Die Python-Summe des Skripts entspricht derסה״כ בש״ח-Zelle jeder Datei nach LibreOffice-Neuberechnung (auf 0,01 ₪), sodass beide Dateien dieselbe Summe tragen;sent_no_budget: Die SENT-Datei enthält keine Budgetvergleichstabelle;receipts: Jede zitierte Datei existiert inקבלות/;budget: Jede Zeile hat einen Budgetposten und der tatsächliche Gesamtbetrag der Budgettabelle der INTERNEN Datei entsprichttotal_ILS / USD-Kurs.
Melde eine
not_run-Prüfung als nicht ausgeführt, niemals als bestanden. -
Unabhängige Prüfung: Starte einen Unteragenten nur mit der SENT-Tabelle und dem Belegordner – nicht mit deinen Schlussfolgerungen. Bitte ihn, jede Zeile auf Betrag, Währung, Datum und Datei anhand des Belegs zu prüfen und aufzulisten, was ein Finanzsachbearbeiter in Frage stellen könnte. Behebe echte Fehler; melde den Rest.
6. Bericht
In dieser Reihenfolge:
- Beide Pfade (SENT, zum Anhängen; INTERN, nur lokal), Zeilenanzahl, Gesamtbetrag ₪ und ≈ USD im Vergleich zum genehmigten Gesamtbetrag.
- Hinzugefügte Belege (und welche durch Suche über die Liste des Benutzers hinaus gefunden wurden).
- Verwendete Wechselkurse mit Quelle und Datum.
- Über dem Budget liegende Posten, als Tabelle: Posten, genehmigt, tatsächlich, Differenz.
- Abweichungen zwischen Quellen (E-Mail vs. Dokument).
- Ausschlüsse (Posten, die zu anderen Reisen gehören).
- Hinweise für den Sachbearbeiter (aus
references/pitfalls.md). - Von Hand zu erledigen (Modus-B-Lücken, Skriptwarnungen).
- Getroffene Entscheidungen ohne Nachfrage.
7. E-Mail an den Finanzkontakt entwerfen
Lies zuerst references/email-draft.md; folge ihr der Reihe nach. Verwende und hänge nur die SENT-Datei an (output, <Vollständiger Name> הוצאות.xlsx); hänge niemals die INTERNE - פנימי-Datei an, lade sie hoch oder zitiere sie – email_summary.py lehnt sie ab. Kurz:
- Lies den vorherigen Antragsthread des Benutzers mit dem Finanzkontakt (Gesendete E-Mails, etwa zwei Jahre zurück, einschließlich Antworten) und kopiere dessen Stil und Betreffmuster.
- Frage: Bankdaten enthalten oder nicht; Budget- oder Kurszeilen (Standard: keine); BCC an einen Mitreisenden (Standard: nein; erfinde niemals eine Adresse).
scripts/zip_ereceipts.py spec.json→קבלות אלקטרוניות.zipder E-Beleg-PDFs (UTF-8-Namen; niemals denzip-Befehl von macOS). Fotos und Screenshots sind stattdessen im Blattקבלות.scripts/email_summary.py spec.json …→ den RTL-HTML-Text ("היי ," / "מה שלומך? :)" … "תודה רבה!"), die Zusammenfassungstabelle mit einerקבלה-Spalte, die angibt, wo sich jeder Beleg befindet, und die aus der Tabelle gelesenen Bankdaten.- Überprüfe, ob dessen
total_ILSdem der Erstellung entspricht; erwähne jederounding_diff. - Gmail
create_draftmithtmlBodyzuerst. Hänge dann die SENT-Tabelle und den ZIP-Ordner über Claude in Chrome an (file_uploadauf dem Datei-Eingabefeld des Entwurfs) und bestätige beide Chips – der Connector akzeptiert Anhänge nur als base64 im Aufruf, undupdate_draftverwirft sie. Sende niemals ab. Gib dem Benutzer den Entwurfslink.
Formeln
- Zeile:
ILS_i = Betrag_i × Kurs[cur_i]oder der ₪-Betrag selbst. - Summe:
T = Σ ILS_i; in DollarT / Kurs[USD]. - Pro Budgetposten ℓ (INTERNE Datei):
ist_ℓ = Σ_{line_i = ℓ} ILS_i / Kurs[USD];diff_ℓ = genehmigt_ℓ − ist_ℓ, negativ bedeutet über Budget.Σ_ℓ ist_ℓ = T / Kurs[USD], wenn jede Zeile einen Budgetposten hat.
Beispiel: Kurse USD 4,00, EUR 4,50; Anmeldung $500, Hotel €600, Taxi ₪200 → 2000 + 2700 + 200 = 4900 ₪ = $1225.
Ermessensentscheidungen
- Die eigene Rechnung des Hotels schlägt die Buchungsseitenbestätigung (sie ist das Steuerdokument).
- Bankdaten stammen aus dem lokalen Profil in den
bank-Schlüssel der Spezifikation; das Skript schreibt sie nach Beschriftung. Frage nur über AskUserQuestion, niemals in Prosa, und gib sie niemals wieder. - Eine frühere Teilrückerstattung, die zu dieser Reise gehört → markiere diese Zeilen als bereits beansprucht.
- Die Regeln der Einrichtung des Benutzers entscheiden über Richtlinienfragen; frage, anstatt eine Regel zu behaupten.
Referenzen
references/email-sources.md– Postfachabfragen pro Kategorie und worauf zu achten ist (Schritt 1.4).references/spec-format.md– Spezifikationsschlüssel, Layouts beider Dateien, Skriptausgabe, Modus-B-Verhalten (Schritt 4).references/example-spec.json– synthetische vollständige Spezifikation (Schritt 4).references/pitfalls.md– bereits gesehene Fehler und die Checkliste für Sachbearbeiter (Schritte 5–6).references/email-draft.md– der E-Mail-Entwurf: vorheriger Thread, Wortlaut, Anhänge (Schritt 7).