A complaints register that stands up to an exam.
Log, investigate, remediate and report written complaints, with every step attributed and every rule enforced at the record.
Built for broker-dealers and advisers handling written customer complaints and quarterly statistical reporting, and easy to adapt to banking or insurance complaint programs.
The starting spec
This is what the App Configurator generates when you start from this example. Every row is editable before you publish, and every mechanism stays available inside the running app, so the app can keep changing after launch.
| Kind | Name | Definition | Notes | |
|---|---|---|---|---|
| 1 | Hub | complaint | customer · account · received_at · channel · category | Primary record |
| 2 | Child | communication | complaint 1 → n · direction · sent_at · body | Shown inline on the complaint form |
| 3 | Child | remediation | complaint 1 → n · action · amount · approved_by | Requires approval to save |
| 4 | Index | complaint_unique | (customer, account, received_at) unique | Blocks duplicate intake |
| 5 | States | complaint.lifecycle | Received → Triaged → Investigating → Resolved → Closed | See transition rules |
| 6 | SoD | close_rule | closed_by ≠ investigated_by | Separation of duties |
| 7 | Report | aging | Open complaints by state × age bucket | Dashboard and kanban |
| 8 | Report | quarterly | Counts by category and product, per quarter | Regulatory statistical filing |
Early accessOpen this spec in the App Configurator, change what doesn't fit, and download the application file.
The lifecycle
Every transition carries its own role requirement and evidence. A transition that isn't defined can't happen, from any entry point.
| Transition | Who may make it | What must be true | Result |
|---|---|---|---|
| Received → Triaged | Intake analyst | Classification code assigned | Allowed · attested |
| Triaged → Investigating | Supervisor | Named investigator assigned | Allowed · attested |
| Investigating → Resolved | Investigator. An agent may draft findings; a human signs. | Findings and evidence attached | Allowed · attested |
| Resolved → Closed | Principal, never the investigator | Customer response sent | Allowed · separation of duties checked |
| Investigating → Closed | No one | Transition not defined | Refused · refusal recorded |
What you get that the usual tools don't give you
The trail is the evidence
Who received, triaged, investigated and closed each complaint is on a hash-chained record, not reconstructed from email.
Quarterly filing from the record
Statistical reports come straight from attested records, so the numbers and the evidence always agree.
Drafting without deciding
Agents can classify complaints and draft findings. People make the decisions the rules reserve for them.
Start from this spec.
Open it in the App Configurator, rename it in your terms, change what doesn't fit, and review the result before anything runs. Your license includes full access to its source. Or bring it to the development advisory and we'll shape it with you.