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:
- Field transcription: Transcribes receipt information into ledger rows.
- Data provenance: Every field (date, merchant, amount, currency, tax) can be traced back to the source image.
- Flagging rather than guessing: Ambiguous fields are flagged; data is never fabricated.
- 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.
- 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”:
- Transcribe and flag: Transcribe each receipt into one row and add inline flags for ambiguous fields (such as
unclear: merchant). - 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.
- Recheck before submission: Check flagged fields against the image again before submission; retain flags that cannot be resolved.
- 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.