Every screen below is the real thing, photographed from a working system — not a mock-up and not a scripted tour. This page explains what each part is for, what it refuses to do, and why.
Utility billing for a town of a few hundred households is not a smaller version of billing for a city. There is no billing department — there is a clerk who also answers the phone, takes payments at the counter, and books the dumpster. The software has to fit that, which mostly means being honest about what it knows and refusing to guess.
A resident's file holds their services, their meters, their invoice history and their balance — plus two things that usually live in somebody's memory: notes about every time they got in touch, and a record of everyone who has touched their account.
A billing run reads meters, applies the town's rates, and produces a draft. Nothing is collectable until somebody approves it. The rules underneath are all of the same kind: when the system does not know something, it stops and says so rather than picking an answer.
Water, sewer and trash rates; the deposit a new account pays; what a dumpster rental costs; what a kept trash tote costs per month. Nothing ships with a price in it, and no form opens with a suggested figure — a number we invented, sitting in a box, is how a made-up price ends up on a resident's bill and then gets defended as "what the system said".
A service with no rate cannot be billed. A dumpster size with no price cannot be booked. A deposit cannot be taken until the town has set one. Charging something other than the standard deposit is allowed — hardship waivers are real — but it has to carry a written reason, and both figures are kept side by side.
If a service somehow ends up with two current rates, billing refuses rather than picking one. Two neighbours on the same service being billed differently is not an error anyone notices until it is a complaint at a council meeting.
Meter reading, work orders, the fleet, dumpsters, trash totes and the staff roster are all here, because in a town this size they are the same handful of people.
Somebody asks, somebody with the authority decides, and the person who asked can see where it got to: waiting, approved, refused or withdrawn, with who decided and when. Refusing asks for a reason, because the person who asked will read it.
Once a request is approved it stands. Somebody has arranged their life around it, so it cannot be quietly reversed later. And nobody can be rostered on a day they were granted off — that is the mistake discovered at six in the morning when nobody turns up, so the system refuses it outright rather than showing a warning.
Every tote and dumpster the town owns already has a number on its side, and the crew reads that number off the bin. So that number is the identity here. Nothing assigns its own ids, because that would mean somebody maintaining a translation table between what is on the bin and what is on the screen — and that table is wrong the first time a bin is replaced.
"Billing clerk" means a different job in a town of 250 than in one of 25,000. So every permission is a switch the town's administrator can turn on or off per role — and the server checks it on every request, not just when a screen loads.
Only the mayor can set or change what an employee is paid. Administering the software is not the same as deciding a wage, so an administrator can see pay — payroll runs from those figures — and has no way to change one. Adding a new employee cannot set a rate at all; they start at zero and the mayor sets it, with a reason recorded.
The person who runs the roster is usually also the clerk or the works foreman. So "scheduler" is granted to a person in addition to whatever they already are, rather than replacing it. They keep reading meters and taking payments; they also approve time off.
Every action is recorded with who did it and when — and the record is sealed so that altering it can be detected rather than merely discouraged.
Each entry is sealed to the one before it with a key the database does not contain, so somebody who can edit the table still cannot re-seal it. Each entry also carries a position, so removing one from the middle leaves a gap. And the running total is written out to the server's own system journal, which the application cannot rewrite — because a chain and a sequence together still cannot notice entries removed from the end.
When the check reports a problem it says which kind: an entry was edited, one was removed from the middle, or entries were removed from the end.
An administrator or auditor reads the whole town's record. Everybody else reads their own, from their own profile — the same record an administrator sees about them, not a separate, friendlier version.
The whole database exports as ordinary CSV files in one archive. No format anybody needs our software to read, and no asking us first.
The town can have a sealed copy of the entire database made on a schedule and keep it somewhere else. The town generates a key pair and keeps the private half; this system only ever holds the public half. It can therefore write a copy every month and cannot open a single one of them — which is the point, because a backup we could open is a backup an intruder could open too.
Billing can be posted into the town's QuickBooks as journal entries — the ledger movement, not every resident's name and address copied into a second system. It is off until somebody deliberately turns it on, and turning it off always works immediately, whatever else is configured.
Not a translated front page with an English system behind it. Every staff screen, every resident page, every letter and text message, and this page. A build check fails if a string exists in one language and not the other, because a half-translated screen is how language access quietly stops being real.
The public pages meet WCAG 2.1 AA, which for a Colorado municipality is a legal requirement rather than a polish item. That is checked automatically on every release and confirmed by hand with a real screen reader.
Sugar City's ordinances live in the same system as everything else, and the town decides which of them the public sees. Writing an ordinance down and publishing it are two separate acts: everything starts unpublished, and going onto the public website is one deliberate press per ordinance. A half-typed draft cannot reach the town's front page by accident.
Decades of existing ordinances come in from a spreadsheet. The importer reads the file and tells the clerk what would happen before it writes anything; if any row is bad it refuses the whole file, because an ordinance book loaded halfway is worse than an empty one — afterwards nobody can tell which rules made it in. Ordinance numbers are kept exactly as adopted, because that number is what appears in the minutes and on the signed copy in the vault.
The person at the counter has one thing: a name half-remembered, a phone number read out over the line, a street, or the account number off the bill. One box searches all of it. Part of a name works, and so does the full name in either order. A phone number matches however either side punctuated it — (719) 555-0148, 555-0148 and 7195550148 are the same number, because only the digits are compared. An address matches whether it is where the water runs or where the bill is posted.
The same box is used everywhere a customer has to be chosen: taking a payment, delivering a cart, booking a container, booking a visit. It is operable entirely from the keyboard, because a clerk on the phone is not reaching for a mouse.
When a button is missing, the usual question is whether the software is broken. It is almost never that — it is a permission somebody set. So every member of staff has a page listing their own permissions in plain words, alongside their own history of what they have done. Nobody has to ask an administrator to find out why a screen looks different from a colleague's.
Cada pantalla que aparece abajo es real, tomada de un sistema en funcionamiento: no es una maqueta ni un recorrido guiado. Esta página explica para qué sirve cada parte, qué se niega a hacer y por qué.
Facturar los servicios de unos cientos de hogares no es una versión reducida de facturar los de una ciudad. Aquí no hay un departamento de facturación: hay un secretario que además contesta el teléfono, cobra en la ventanilla y reserva el contenedor. El software tiene que encajar en eso, y eso significa sobre todo ser honesto sobre lo que sabe y negarse a adivinar.
El expediente de un residente contiene sus servicios, sus medidores, su historial de facturas y su saldo, además de dos cosas que suelen vivir en la memoria de alguien: notas de cada vez que se puso en contacto y el registro de todas las personas que han tocado su cuenta.
Un ciclo de facturación lee los medidores, aplica las tarifas del pueblo y produce un borrador. Nada es cobrable hasta que alguien lo aprueba. Las reglas de debajo son todas del mismo tipo: cuando el sistema no sabe algo, se detiene y lo dice en lugar de elegir una respuesta.
Las tarifas de agua, alcantarillado y basura; el depósito que paga una cuenta nueva; lo que cuesta alquilar un contenedor; lo que cuesta al mes un carro de basura retenido. Nada viene con un precio puesto, y ningún formulario se abre con una cifra sugerida: un número que nosotros inventáramos, puesto en una casilla, es como acaba llegando un precio ficticio a la factura de un residente y defendiéndose después como «lo que dijo el sistema».
Un servicio sin tarifa no se puede facturar. Un tamaño de contenedor sin precio no se puede reservar. No se puede cobrar un depósito hasta que el pueblo haya fijado uno. Cobrar algo distinto del depósito estándar está permitido —las exenciones por dificultad económica existen— pero debe llevar un motivo por escrito, y se guardan las dos cifras juntas.
Si un servicio acaba teniendo dos tarifas vigentes, la facturación se niega en lugar de elegir una. Que dos vecinos con el mismo servicio paguen distinto no es un error que nadie note hasta que es una queja en una sesión del concejo.
La lectura de medidores, las órdenes de trabajo, la flota, los contenedores, los carros de basura y el cuadrante del personal están todos aquí, porque en un pueblo de este tamaño son las mismas pocas personas.
Alguien la pide, alguien con autoridad decide, y quien la pidió puede ver en qué punto está: pendiente, aprobada, denegada o retirada, con quién decidió y cuándo. Denegar exige un motivo, porque la persona que la pidió lo va a leer.
Una vez aprobada, queda firme. Alguien ha organizado su vida en torno a ella, así que no se puede revertir en silencio. Y nadie puede ser asignado a un turno un día que se le concedió libre: ese es el error que se descubre a las seis de la mañana cuando no aparece nadie, así que el sistema lo rechaza en lugar de mostrar un aviso.
Cada carro y cada contenedor del pueblo ya lleva un número en el costado, y la cuadrilla lee ese número del propio recipiente. Así que ese número es la identidad aquí. Nada asigna identificadores propios, porque eso obligaría a alguien a mantener una tabla de equivalencias entre lo que pone en el recipiente y lo que pone en la pantalla, y esa tabla queda mal la primera vez que se sustituye un recipiente.
«Secretario de facturación» es un trabajo distinto en un pueblo de 250 habitantes que en uno de 25.000. Por eso cada permiso es un interruptor que el administrador del pueblo puede activar o desactivar por función, y el servidor lo comprueba en cada petición, no solo al cargar una pantalla.
Solo el alcalde puede fijar o cambiar lo que se paga a un empleado. Administrar el software no es lo mismo que decidir un sueldo, así que un administrador puede ver las tarifas —la nómina se calcula con ellas— y no tiene forma de cambiar ninguna. Añadir un empleado nuevo no permite fijar una tarifa: empieza en cero y la fija el alcalde, con un motivo registrado.
Quien lleva el cuadrante suele ser también el secretario o el capataz. Por eso «programador» se concede a una persona además de lo que ya es, en lugar de reemplazarlo. Sigue leyendo medidores y cobrando; además aprueba los días libres.
Cada acción queda registrada con quién la hizo y cuándo, y el registro va sellado de modo que alterarlo pueda detectarse, no solo desaconsejarse.
Cada entrada va sellada a la anterior con una clave que la base de datos no contiene, así que quien pueda editar la tabla sigue sin poder volver a sellarla. Cada entrada lleva además una posición, de modo que quitar una del medio deja un hueco. Y el total acumulado se escribe en el registro del sistema del servidor, que la aplicación no puede reescribir, porque una cadena y una secuencia juntas todavía no pueden detectar entradas eliminadas del final.
Cuando la comprobación informa de un problema, dice de qué tipo: se editó una entrada, se quitó una del medio o se quitaron entradas del final.
Un administrador o un auditor lee el registro de todo el pueblo. Las demás personas leen el suyo, desde su propio perfil: el mismo registro que un administrador ve sobre ellas, no una versión distinta y más amable.
Toda la base de datos se exporta como archivos CSV corrientes en un solo archivo comprimido. Ningún formato que necesite nuestro software para leerse, y sin pedirnos permiso.
El pueblo puede programar una copia sellada de toda la base de datos y guardarla en otro sitio. El pueblo genera un par de claves y se queda con la privada; este sistema solo tiene la pública. Puede por tanto escribir una copia cada mes y no puede abrir ninguna, que es justamente el objetivo: una copia de seguridad que nosotros pudiéramos abrir también podría abrirla un intruso.
La facturación puede enviarse al QuickBooks del pueblo como asientos contables: el movimiento del libro mayor, no el nombre y la dirección de cada residente copiados en un segundo sistema. Está desactivado hasta que alguien lo activa a propósito, y desactivarlo siempre funciona de inmediato, esté como esté el resto.
No una portada traducida con un sistema en inglés detrás. Todas las pantallas del personal, todas las páginas para residentes, todas las cartas y mensajes de texto, y esta página. Una comprobación automática falla si una cadena existe en un idioma y no en el otro, porque una pantalla a medio traducir es como el acceso lingüístico deja de ser real sin que nadie se dé cuenta.
Las páginas públicas cumplen WCAG 2.1 AA, que para un municipio de Colorado es una exigencia legal y no un detalle estético. Se comprueba automáticamente en cada versión y se confirma a mano con un lector de pantalla real.
Las ordenanzas de Sugar City están en el mismo sistema que todo lo demás, y el pueblo decide cuáles ve el público. Registrar una ordenanza y publicarla son dos actos distintos: todo empieza sin publicar, y llegar al sitio público es una pulsación deliberada por cada ordenanza. Un borrador a medio escribir no puede acabar en la portada del pueblo por accidente.
Décadas de ordenanzas existentes entran desde una hoja de cálculo. El importador lee el archivo y le dice al secretario qué pasaría antes de escribir nada; si alguna fila está mal, rechaza el archivo entero, porque un libro de ordenanzas cargado a medias es peor que uno vacío: después nadie puede saber qué normas entraron. Los números se conservan exactamente como se adoptaron, porque ese número es el que consta en las actas y en la copia firmada.
Quien atiende el mostrador tiene una sola cosa: un nombre a medias, un teléfono dictado por la línea, una calle o el número de cuenta de la factura. Un solo cuadro busca en todo ello. Parte de un nombre funciona, y el nombre completo también, en cualquier orden. Un teléfono coincide con la puntuación que sea — (719) 555-0148, 555-0148 y 7195550148 son el mismo número, porque solo se comparan las cifras. Una dirección coincide tanto si es donde llega el agua como si es donde llega la factura.
Ese mismo cuadro se usa en todos los sitios donde hay que elegir un cliente: cobrar un pago, entregar un carro, reservar un contenedor, agendar una visita. Se maneja por completo con el teclado, porque quien atiende el teléfono no está buscando el ratón.
Cuando falta un botón, la pregunta habitual es si el programa está roto. Casi nunca lo está: es un permiso que alguien configuró. Por eso cada miembro del personal tiene una página con sus propios permisos escritos en lenguaje llano, junto al historial de lo que ha hecho. Nadie tiene que preguntar a un administrador para saber por qué su pantalla no se parece a la de un compañero.