Work/Financial Operations Dispatch/Case study · 2025 to 2026

Workflow automation · Translation operations

Financial Operations Dispatch

From an unstructured email request to assigned, reviewed, and auditable work.

I embedded with an operations team, mapped a manual request and billing workflow, defined success with the people doing the work, and shipped an AI supported system with 14 stages system around the email and cloud tools they already used.

Reported project outcomeProduction deployment · not independently benchmarked again for this portfolio
80%less manual work
My role
Workflow discovery, system design, implementation, deployment
Period
November 2025 to January 2026
Stack
Python, TypeScript, Azure Functions, Cosmos DB, Microsoft Graph, GPT-4o
Boundary
AI classifies and drafts; operators approve consequential outgoing work

The original workflow

The work ran through email, attachments, spreadsheets, and manual follow up.

Before

A request arrived as client correspondence rather than a clean record. An operator had to identify the work, extract project details, choose and contact a worker, monitor the reply, track the deadline, relay completion, handle QA, and keep the billing trail coherent across the whole exchange.

System response

The system converts each request into a stateful Cosmos DB document, uses Azure Functions to advance it, reads and writes the existing mailbox through Microsoft Graph, and applies language models only where the input is genuinely ambiguous: classification, extraction, and drafting.

Operator interface

Dashboard and assignment views

These views use the dashboard markup, styling, and interaction model from the private production repository. The records are sanitized and representative; no client, worker, mailbox, or deployment data is shown.

Translation operations dashboard with request metrics, workload charts, status filters, and a request queue populated with sanitized representative records
Operations overviewLive workload, unassigned requests, missing purchase orders, worker load, workflow status, and project deadlines.
Request detail interface showing word counts derived from spreadsheets, worker priority selection, and processing status using sanitized representative records
Human assignment checkpointVolume data derived from spreadsheets, ordered worker selection, and the persisted workflow state before dispatch.

Private source reviewed locally · interface captured from the working project · representative data substituted before capture

Implemented state machine

The workflow has 14 explicit stages

01 to 04

Intake and assignment

  1. 01
    New request notificationCosmos trigger

    Turn an incoming request record into an operator alert and a worker selection task.

  2. 02
    Worker offerCosmos trigger

    Contact workers in the priority order chosen by the operator.

  3. 03
    Reply and escalation poller2 min timer

    Classify accept or decline replies, follow up, expire the offer, and advance the queue.

  4. 04
    Client assignment noticeCosmos trigger

    Prepare the assignment confirmation after a worker accepts.

05 to 07

Delivery tracking

  1. 05
    Deadline reminder5 min timer

    Send a reminder before the recorded deadline.

  2. 06
    Completion poller3 min timer

    Detect the worker’s completion message in the correct thread.

  3. 07
    Client completion draftCosmos trigger

    Draft the client update and send it to the operator for review.

08 to 12

QA loop

  1. 08
    QA window setupCosmos trigger

    Open the client feedback window and persist its deadline.

  2. 09
    QA feedback poller2 min timer

    Identify a QA report and attach it to the right project.

  3. 10
    QA forwardCosmos trigger

    Forward the report and its attachments to the assigned worker.

  4. 11
    Revision poller2 min timer

    Require completion language in the past tense before marking revisions done.

  5. 12
    Revision complete draftCosmos trigger

    Route the final client message through review before forwarding.

13 to 14

Closure and recovery

  1. 13
    Finalization without QA30 min timer

    Close work after the QA window of ten days expires without a report.

  2. 14
    Stuck job alertDaily timer

    Surface projects that have remained in one state longer than expected.

Actual test material

The validation matrix contains 31 cases

Validation snapshot31

cases across six operational scenarios

QA report classifier6
Request classifier6
Worker completion6
Worker request6
QA report reply4
Project status3

Evidence boundary: these counts come from the project’s actual CSV validation matrix. The available snapshot has blank outcome columns, so this page does not claim a model accuracy percentage. Raw rows are not published because they include real operational correspondence.

What changed after deployment

Why the operator review step was added

Observed

The AI sometimes produced an answer that looked certain but was wrong.

Logs showed what the system did, but conversations with the team explained why they hesitated to use it.

Redesigned

Consequential client communication stopped at a review checkpoint.

The system still classifies, routes, drafts, and tracks. The operator owns the final outgoing message.

Result

The automation kept the repetitive steps and left the final decision with the operator.

The system handles routine work, while the operator decides what is sent to the client.

Production engineering

Safeguards around email and state changes

01

One send, even under retry

Every trigger that can send email first acquires a write lock in Cosmos DB. Updates based on ETags prevent two concurrent invocations from sending the same message.

02

The right reply for the right job

Conversation IDs, sender validation, timestamps, and a global set of used messages keep one inbox message from advancing multiple projects.

03

Test without contacting clients

Recipient overrides redirect messages addressed to clients and workers during local and integration testing.

04

A person owns the final send

Completion and QA revision messages are delivered to the operator with an explicit banner that requires review before forwarding.

Source policy

What this case study leaves private

The implementation repository, deployment configuration, and individual validation messages are intentionally private. This case study exposes the system boundary, workflow logic, and verified aggregate evidence without publishing client or worker correspondence.