HMIS-NL, reporting you can check
Ask a housing-outcome question in plain English and inspect how it was read. Compare populations or change the interpretation, then carry the result into a report-backed dashboard. I built HMIS-NL after five years running a homeless-services agency's reporting platform.
Hosted demo on public HUD test data, with web and terminal clients. The recording uses no real client records.
- Hosted app
- Public sample data
- Private source
- Problem
- A board or funder needs more than a total. Staff need the counting rule and source export, plus a way to repeat the report next quarter.
- Engineering decision
- Keep interpretation separate from calculation. The model selects a typed request. The server computes each result and identifies whether its population was checked independently.
- Result
- Reporting answers with an inspectable meaning and source
- My role
- Sole engineer, independent analytics application
- Source access
- Private repository. Live demo uses public HUD sample data.
In this case study Features and engineering details
Walkthrough 2:42
Recorded October 5, 2026 against the hosted app at revision 1f9f602c. Public HUD test data only. This walkthrough shows the current interpretation controls and reporting workflow. Worklists and cited HUD sources are included. Synthetic narration with English captions.
Read the transcript
0:00 A question with inspectable evidence
This is HMIS-NL, using public HUD test data. Each answer names its population and rule. Verified means independent population selections matched. The arithmetic code is shared.
0:18 Choose and change the reading
Housed can mean different things. The app asks which measure staff need. The selected reading stays beside the answer, with its calculation limits. Staff can change it and rerun the question. The new answer uses that measure. Other readings stay separate from board packets.
0:45 Compare named cohorts
Compare veterans with non-veterans in the same period. Both populations are named. Each side has its own checked request. Shared scope restrictions stay on both.
1:04 Name the exit cohort and return window
Return questions now state the exit cohort and the follow-up window. These 2022 exits are followed for twelve months. The evidence names that rule.
1:22 Add a report-backed dashboard tile
A chat answer can become a report-backed dashboard tile. The source must reproduce the same request and data before the tile is added. Refresh all reruns those reports when staff choose.
1:42 Staff counts and exported reports
Signed-in staff see counts within their permitted scope. The saved report keeps those counts visible in the app. Printing requests a server-rendered export copy. It applies the agency export policy.
2:04 Review fixed checks in worklists
Worklists show fixed checks on enrollment records. They do not predict an outcome. Authorized staff can open records behind a missing-destination count. Filters separate open work from handled items.
2:22 Open the cited HUD source
Questions about HUD standards use cited source documents. The citation opens the original PDF with its passage highlighted. Staff can inspect that source.
What it does
- Interpretations staff can change
- See which meaning the question used. Pick a different meaning and rerun the answer, with the same checks.
- Reports behind dashboard tiles
- Save a chat question as a report source. A tile is added only when the report reproduces its checked scope and source export.
- Cohort and period comparisons
- Compare named populations with their own qualifiers. Return rates state the exit cohort and follow-up window.
- Separate staff and export views
- Signed-in staff see counts within their permitted scope. Files and board packets apply the agency's export masking policy.
From question to checked answer
Explicit interpretation
A typed request states the population and period. Ambiguous terms can ask for a choice.
Recorded calculation checks
Supported rules compare independently selected populations. Both paths share final arithmetic code, and the badge states the limit.
Validator gate
Ordered checks re-resolve the rule from the registry. A failure replans or refuses.
Answer from evidence
The sentence staff read is built from the evidence panel. The model never writes it.
Make the interpretation visible
Housed can mean a move-in, an exit to permanent housing or the placement measure appropriate to each program type. The current app asks staff to choose a meaning, then shows that reading beside the answer. Changing a reading reruns the question. It never relabels the existing number.
Staff can remember supported choices for their own account. Those choices apply to comparison and trend requests too. An optional Other readings panel computes alternatives as context. They stay out of board packets.
The question was clarified, then rerun with Exited to permanent housing selected. Hosted app, October 5, 2026. Public HUD test data.
View full imageState exactly what was checked
The model chooses a typed request. It does not calculate the value or write the answer sentence. Server code computes the result, and the sentence is built from its evidence. A failed validation check blocks the answer or triggers a bounded repair.
For supported rules, separate implementations select the population and compare the resulting calculation. The final arithmetic code is shared. Verified means those independently selected populations produced matching results. A shared population builder or an unsupported second path gets a single-engine label. Agreement alone does not prove that a request means what staff intended.
The evidence names the rule and reporting period. Verification checks population selection while sharing final arithmetic. Public HUD test data, October 5, 2026.
View full imageKeep the cohort and follow-up window explicit
A comparison carries a request for each side. Shared program restrictions apply to both populations, while each side keeps its own group qualifier. Calendar and fiscal periods retain their stated basis.
Return questions also distinguish a report-relative HUD measure from an exit cohort. The recorded question asks about people who exited to permanent housing in 2022 and returned within 12 months. The answer names those exits and the 365-day follow-up window. It does not silently substitute a 24-month measure.
The current answer binds the exit cohort to 2022 and states a 12-month window. Recorded October 5, 2026 on public HUD test data.
View full imagePut a report behind every dashboard tile
Add to dashboard saves the original question as a report source and runs it. The tile is added only if the report returns the same intent hash and source-export fingerprint as the chat answer. An ambiguous question or a changed scope must be resolved first.
Refresh all reruns the source reports when staff choose. The dashboard shows source dates and links each tile back to its report. Reports can be reviewed before sign-off and exported to Word. A previous sign-off is tied to its own run.
Both tiles were created through Add to dashboard on the hosted app. Public HUD test data, October 5, 2026.
View full imageShow staff counts and govern exports separately
Signed-in staff see every count within their permitted scope. Small-count masking applies to the export audience, including downloaded files and board packets. Print requests a server-rendered export copy before opening the browser dialog. The page does not hide cells with a separate frontend calculation.
The agency sets the export threshold and can disable export masking through an audited setting. Export disclosure checks prevent supported combinations from revealing a hidden count. Role and CoC restrictions remain separate controls.
Proof receipts retain the question and rule version with the source-export fingerprint. They are hashed and signed so a reported figure can be checked against the same inputs later.
The recording compares the signed-in report with its server-rendered print copy. The native print dialog is omitted. Public HUD test data, October 5, 2026.
View full imageBring data issues into a review workflow
Worklists expose fixed checks from enrollment data. Staff can open the affected records where their role and scope permit it, then filter the list by assignment or status. A missing destination is a record to review, not a predicted housing outcome.
Submission pre-flight puts existing checks beside the HUD tables they affect. It shows the finding and its source, including unavailable inputs. It does not issue a submission-readiness verdict.
Recurring reporting uses the same engine. Saved reports can run on a schedule, and the deadline agent prepares packets for funder reports overdue or due within 45 days. It records missing results and leaves sign-off to staff.
Current hosted worklists expose record-level checks within the operator role. Public HUD test data, October 5, 2026.
View full imageKeep geographic coverage inspectable
The supply view uses project and bed-inventory facts. It groups supply by permitted geography and keeps unplaced records visible. A reconciliation shows how the displayed areas relate to the total, so an incomplete placement does not become a claim of complete coverage.
The demo labels its synthetic geography. This view does not show client locations.
Keep source documents and demo limits visible
HUD standards and an agency's own policies use separate assistants. Answers require citations, and a citation opens the source PDF at the relevant passage. Codes use exact lookup; definitions can use keyword and embedding retrieval.
The hosted demo runs on public HUD test data. The fresh recording establishes the displayed workflows and their calculation checks. It does not establish agency adoption or measured staff time savings. A verified calculation also does not establish source-data completeness or HUD acceptance of a report.
The citation opens the original HUD PDF page and highlights the source passage. Recorded October 5, 2026.
View full image