Introduction

There is an expensive failure mode in expense-entry work: fabrication. Misreading the total, guessing the merchant name, back-calculating tax from a subtotal—each one is a reconciliation nightmare, and in an audit it is a credibility problem. expense-capture turns receipts into ledger-formatted rows through mechanical transcription discipline, making every field traceable to the source image, flagging ambiguous fields, and finally reconciling the batch.

Plugin Positioning

This is a workflow plugin designed to convert receipts and invoices into ledger-formatted rows. It is maintained by ChenneyZhuang and licensed under the MIT License.

Core Features

The plugin primarily addresses the problem of guessing data from nothing. Its capabilities include:

  1. Field transcription: Transcribes receipt information into ledger rows.
  2. Data provenance: Every field (date, merchant, amount, currency, tax) can be traced back to the source image.
  3. Flagging rather than guessing: Ambiguous fields are flagged; data is never fabricated.
  4. Batch reconciliation: Checks that the row count matches the receipt count and that the total row amount equals the total amount read from the receipts.
  5. Pre-submission recheck: Before submission, flagged fields are checked against the image again; unresolvable flags are retained.

Field Discipline

The plugin follows strict field transcription rules:

  • Date: Use the printed content; differing formats must be parsed explicitly.
  • Merchant: Exactly as displayed; abbreviations are preserved, and expanded names are marked as guesses.
  • Amount: Use the printed charged amount, with the currency symbol accompanying the amount.
  • Currency: Explicitly declared; mixed-currency batches support conversion.
  • Tax: Read only when separately itemized on the receipt; assumed tax is marked as a guess.
  • Category: Taken from the ledger’s own category list; ask the user when unclear, and never improvise.

Usage Flow

Using the plugin follows a “batch closed loop”:

  1. Transcribe and flag: Transcribe each receipt into one row and add inline flags for ambiguous fields (such as unclear: merchant).
  2. Reconcile the batch: Verify that the row count equals the number of receipts and that the total row amount equals the total amount read from the receipts.
  3. Recheck before submission: Check flagged fields against the image again before submission; retain flags that cannot be resolved.
  4. Write to the ledger: After approval, write the rows to the ledger. Failed rows are reported and are not blindly retried (blind retries can create duplicates).

Applicable Scenarios and Notes

  • Image recognition bottleneck: Illegible receipts remain flagged, requiring manual intervention.
  • Data source limitation: The plugin only reads printed content and never calculates what the data “should be”.
  • Tax handling: Tax rules vary by jurisdiction; tax advice should be handled by accounting.
  • Execution permissions: The plugin runs with the current DSH process permissions.

Installation and Enablement

Run the following command to install:

npx skills add ChenneyZhuang/expense-capture

Conclusion

expense-capture reduces the risk of fabrication in expense-entry work through mechanical transcription discipline and reconciliation mechanisms. Full documentation and source code are available in the plugin directory or the GitHub repository.