Production · LLM system

Concur Automation

An LLM-assisted classifier for corporate card transactions, built so the model can suggest but never decide.

Every cycle, about 1,900 corporate card transactions had to be reviewed and classified before the close could move. The monthly review took 36 hours, inside a five-day close across two legal entities.

I gathered requirements from accounting, IT, and BI, then built the classifier in C#/.NET on Azure Functions. The OpenAI API proposes a classification for each transaction, and deterministic rules sit around every call.

Then I benchmarked it against the human reviewers, transaction by transaction. Humans still post, and every run writes an audit log.

Concur Automation: guardrail designCorporate card transactions from SAP Concur, about 1,900 per cycle, go to an Azure Function written in C#/.NET. Inside deterministic rule guardrails, the OpenAI API proposes a classification and deterministic rules check every proposal. An accountant then reviews the classified transactions, and a person posts them. The model never posts, and every step writes to the audit log.SourceSAP Concur corporate cardtransactions, about 1,900 per cycleProcessingAzure Function in C#/.NET prepareseach transactionDeterministic rule guardrailsModel outputOpenAI API proposes aclassificationGuardrailDeterministic rules check everyproposalHuman reviewAn accountant reviews the classifiedtransactionsOutputA person posts. The model never posts.Every step writes to the audit log.
Monthly review time
36 h → 10 min
Exact match to human reviewers
95–97%
Misclassifications in the benchmark
0
Transactions per cycle
~1,900

Re-run the human benchmark on a fresh cycle each quarter, so the match rate stays a measured number rather than a launch-day one. Then test the same guardrail pattern, one phase at a time, on the next manual review in the close.

  • C#/.NET
  • Azure Functions
  • OpenAI API
  • SAP Concur
  • Deterministic rules
  • Audit log