Work I’ve done

Documents · Enterprise mortgage lender, via Amihan Solutions

Document review where rules check the facts first

A system that picked up each property appraisal as it was submitted, checked the facts with fixed rules, and had a pass, conditional or reject verdict waiting for an underwriter to confirm. I was the only engineer on it, from design to production support.

  • Used in production by the lender’s underwriting team
  • Less time on routine fact checks, more on judgement calls

1 · Checking the facts

Facts checked by rules, not guessed by AI

Each fact was pulled from the form and checked by fixed rules. AI drafted the verdict from the checked facts only. A person decided.

1 · Reads the appraisal

Each fact is pulled from its place on the form

Appraisal report

Form fields

Property
14 Marlow Street
Appraiser
Sam Ortega
Signed
12 Mar 2026
Appraised value
$412,000

Checkboxes

  • As is
  • Subject to repairs

Table · Comparable sales

22 Marlow Street
$405,000
9 Alder Avenue
$418,000
31 Pine Road
$409,000

Photos · 5 of 6

2 · Checks the facts

Fixed rules, the same for every appraisal

  • Address and owner match the loan record14 Marlow Street
  • Signed, dated and not too oldSigned 12 Mar 2026
  • Required photos are present1 of 6 is missingFlagged
  • Three comparable sales, dates in range3 found
  • “As is” or “subject to repairs” is markedAs is
  • Value sits within the comparable sales$412,000, between $405,000 and $418,000

3 · Drafts a verdict

AI, working only from the checked facts

  • Pass
  • Conditional
  • Reject

Reason

One required photo is missing. Every other check passed.

Underwriter confirms

One appraisal, from document to decision · Illustration, not a real appraisal
The cost
Underwriters read every property appraisal by hand. Each one mixes forms, tables, checkboxes and photos, and the same facts had to be found and checked in every one.
The first attempt
The first version sent the whole document to AI and asked for a review. It gave wrong answers on messy documents, and even basic facts such as the appraisal date could not be relied on.
What I rebuilt
Appraisals follow a set format. So I rebuilt it to pull each fact from its place on the form, check it with fixed rules, and only then ask AI to draft a verdict from the checked facts.
Result
Underwriters spent less time re-checking routine facts and more on judgement calls such as property condition and safety
Technical detail

Version 1 sent the document text to a language model, with the images transcribed by a second model, and generated the review from that. Version 2 extracted each field into structured JSON with PyMuPDF and Google Document AI, validated the fields in code, and passed only the verified data to the language model for the verdict. Backend services were Python and FastAPI.

2 · Starting by itself

A report waiting before anyone asks

Nobody had to start it. The report was waiting in the underwriter’s queue.

1 · Submitted

Documents are submitted in Encompass

Encompass · Loan file

14 Marlow Street

Loan 20418

  • Appraisal reportSubmitted
  • Purchase contractOn file
  • Title reportOn file

2 · Triggered

The submission starts the tool. Nobody asks

Runs by itself

  • Submission noticed
  • Appraisal picked up
  • Facts read and checked
  • Verdict drafted
  • Report sent to the queue

3 · In the queue

Waiting when the underwriter opens it

Review queue

4 ready

  • 14 Marlow Street1 photo missingConditional
  • 8 Harbor LaneAll checks passedPass
  • 51 Quarry RoadValue outside comparable salesReject
  • 3 Linden CourtAll checks passedPass

Underwriter opens and confirms

One loan, from submission to queue · Illustration, not a real loan file or queue
The cost
Every review began with an underwriter opening the loan and finding the appraisal. Nothing happened until someone got to it.
The trigger
The lender kept its loan documents in Encompass. Submitting them there became the signal to start.
What I built
A workflow that noticed each submission, ran the review, and placed the report in a queue screen I added to the tool.
Result
The report was already waiting when the underwriter opened the queue
Technical detail

A submission in Encompass was the event that started each run. Document ingestion and analysis ran as event-driven jobs on Google Cloud, using Cloud Run, Cloud Run Jobs, Workflows and Cloud Scheduler. The queue was added in version 2 of the tool.

Built with

  • Python
  • FastAPI
  • Google Document AI
  • PyMuPDF
  • Cloud Run
  • Cloud Run Jobs
  • Google Cloud Workflows
  • Cloud Scheduler
  • Docker

What this means for a small team

The same pattern fits any team that reads documents and types the details into another system: invoices, application forms, client intake. Each detail is pulled out and checked by fixed rules first, AI drafts a summary from the checked facts, and a person approves the result.

See what you could automate

Enter your website and get three workflows worth automating, with estimated hours saved.

Next case studySupport tickets sorted, routed and answered faster