← All work

Government payments software company

Tax offices collect from every channel and balance each month to the cent

Sheriffs' tax offices ran property tax on an older desktop system. We treated the replacement as an accounting system first: counter, mail, lockbox, mortgage files, swipers and the online portal all post to one tax notice, with each office's rules in its own settings.

Government, Legal & DefenseProperty tax collection platformModernized a live product

Collectors search tax records by roll, name and parcel type and start a multi parcel payment in the current batch.

The challenge

Offices needed one web system for the whole tax year, and every change order, partial payment, reversal or redemption ripples into batches, distribution checks and month close.

What we did

We studied how the old system recorded transactions, then built a multi-tenant back office where every channel posts to one notice and each office's rules live in its own settings.

The outcome

The platform runs the full tax year for several tax offices and has carried them through several tax seasons, with new offices joining on their own settings.

Tax year
Roll import to distribution checks in one system
Payment channels
Counter, mail, lockbox, mortgage files, swiper, online
Roles
Collectors, balancers and admins in each office
Deployment
Separate QA and production per office on AWS

The starting point

Sheriffs' tax offices collect property tax for their area every year and disburse it to receiving entities, including pension and revenue sharing. Collectors take payments at the counter and by mail, balancers close the batches, and each month closes with printed distribution checks.

What had to change

Offices ran the tax year on an older desktop collection system, and one office kept its prior years in an AS400 system. They needed one web system for the whole year: roll import, payments from every channel, change orders, refunds, tax sales, redemptions and disbursement.

What could not break

  • Money reconciles daily and monthly, and audits need tax records reports by date
  • Every payment channel posts to the same tax notice
  • Each office keeps its own roll layout, fees, interest rules, letters and receiving entities
  • A new office brings its prior years of data with it
  • Work runs around the annual tax season and tax sale dates

The calls we made

We treated it as an accounting system first: if a payment, change order or reversal cannot be traced into batches, checks and month close, it is not done.

  1. 01

    Learn the old system's transactions first

    How the desktop system recorded transaction types, log entries and address history showed what the audit trail had to hold, so an SRS, role prototypes and an ERD for accounts, batches and transaction breakdowns came before code.

    Ruled out

    Copying the old screens without the transaction model behind them.

  2. 02

    Configure each office, never fork the product

    Roll layouts, fees, interest on adjudicated parcels, homestead exemptions, letters and receiving entities differ per office, so they live in each office's settings and roll import on one codebase.

    Ruled out

    A separate build for each office.

  3. 03

    Every channel posts to the same notice

    Counter and mail payments, lockbox files, mortgage servicer files, in office swipers and the online card portal all land on the notice the collector sees, so each batch balances and the account keeps one history.

    Ruled out

    A ledger per channel, reconciled by hand.

  4. 04

    Bring offices on one at a time

    Each new office got its own roll import, settings, QA and production environments and converted prior years, so the offices already live kept collecting.

    Ruled out

    Moving every office onto the platform in one cutover.

  5. 05

    Trace every change through the money

    A change order, partial payment, reversal or redemption ripples into batches, distribution checks and month close, so impact analysis on every change became a rule, backed by test case suites and a regression sheet.

    Ruled out

    Judging a change by its own screen alone.

How the system fits together

pay by cardcounter and mailposts to noticeimportsbatchescard and ACHACH reversalsemailtax sale filedisbursementreconciliationTax office staffCollectors,balancers and adminsTaxpayersPay at the counter,by mail or onlineOnline cardportalPublic sitetaxpayers…Assessor and bankfilesRoll, change orders,lockbox, mortgageTax office backofficeDjango REST API,React,…Batches and monthcloseBalancing,distribution, checksNMI paymentgatewayCard and ACH, aprocessor per officeMailgunOutbound emailOutside tax saleserviceReceives tax salefilesDistributionchecksEach dollar to itsreceiving entityReportsTax records, batch,reversal, protest
PeopleClient's existing systemOutside serviceBuilt by DaticsData storeEach office runs the same codebase with its own settings and its own QA and production environments, and card data goes through the payment gateway.

What we built

Accounts with their full history

Each notice keeps partial, protested and prior year payments, overpayments, refunds, address history, other owners and notifications, and a corrected notice prints from the same screen.

Each tax notice shows its balance, a corrected notice button and tabs for payments, address history, other owners and notifications.

Batches, month close and disbursement

Collector, balancer and admin roles work in batches, and month close distributes the money collected and prints checks to every receiving entity, including pension and revenue sharing.

The dashboard shows payments collected, parcels paid, closed batches and refund progress.

Receipts, letters and reports

Receipts by print, email and text, letters for each office, and tax records, batch collection, distribution, reversal, protest and change order reports.

Offices pick a batch collections, distribution or redeemed report, choose the date and batch, and preview it before printing.
04

Collection on one notice

Payments by cash, check, card and in office swiper, multi parcel payments and payment scanning, plus lockbox and mortgage servicer files, all post to the notice the collector sees. Change orders arrive by file or on screen.

05

Tax sale and redemption

Tax sale, adjudication, redemption bills and certificates, quit claims, interest and penalties, with a tax sale file exported to an outside tax sale service.

How it works

Import the roll

Each office loads the assessor's tax roll in its own layout, creating accounts, parcels, owners and tax codes for the year.

Take payments

Payments arrive at the counter, by mail, through lockbox and mortgage files, by swiper or online, and post to the same notice.

Apply changes

Change orders, partial and protested payments, overpayments and refunds update the account and its history.

Balance the batch

Balancers close each batch, and the batch totals feed the daily and monthly reconciliation.

Close and disburse

Month close distributes the money to each receiving entity and prints the distribution checks and reports.

A closer look

Taxpayers find their notice by name on the online portal and pay it there.
Taxpayers find their notice by name on the online portal and pay it there.

What changed

Tax offices moved the full tax year onto one web platform, from roll import to distribution checks, and several offices have run on it through several tax seasons. New offices joined with their own settings and converted prior years while the others kept collecting.

Under the hood

Datics role
Modernized a live product
Payments
NMI gateway for card and ACH with a processor per office and a separate convenience fee leg, in office card swipers, and a webhook that handles ACH reversals.
Files in and out
Assessor roll and change order files in each office's layout, lockbox files and payment files from three mortgage servicers in, and tax sale files out.
Data boundary
Taxpayer and bidder records are personal data, SSN fields on bidder pages are masked or hidden, and card data goes through the gateway.
Deployment
Dockerized Django REST backend and React frontends on AWS, with frontends on S3 and CloudFront and separate QA and production environments per office.

Data and retrieval

PostgreSQL

Cloud and infrastructure

DockerAWS

Apps and APIs

ReactPythonDjango REST Framework

Also in the stack

Material UINMI payment gateway

How it shipped

  1. A public card portal first

    An online card payment portal for one office came first, and it became the taxpayer facing payment layer of the platform.

  2. Discovery on the old system

    An SRS, a study of how the desktop system recorded transaction types and log entries, clickable prototypes for the admin, collector and balancing roles, and an ERD.

  3. First sprints, offices live one by one

    Accounts, parcels, tax codes, receiving entities, batches and roll imports, then production for several offices, each with its own roll and settings, behind a test case suite.

  4. Deeper payment and sale flows

    The redemption workflow, quit claims, overpayments, email receipts, a two step check import and posting from the online card portal.

  5. New offices on the same codebase

    Each new office came on with its own roll import, settings, QA and production environments and converted prior years, and demo sites let prospective offices try it first.

Requirements before code

An SRS, a study of the old system's transaction types, role prototypes for collectors, balancers and admins, and an ERD came before the first sprint.

Built from office staff input

Features came from tax office staff recommendations, and much of the edge case knowledge, such as interest on adjudicated parcels, came from them.

Sprints, office by office

We shipped in two week sprints and brought offices on one at a time, so the offices already live kept collecting.

What this unlocked

Next on the list are letter templates with dynamic variables, faster tax roll loading per office, general ledger integration, month end close and prior year data conversion.

Have a product with the same kind of constraints?

Tell us what already exists and what you want it to do. We will tell you what it takes.

Book a 30-minute Product Review