Marketing claims register¶
Every product claim the public site makes, checked against the code that has to back it, with the date it was checked.
Why this file exists. Over one review, three separate claims on
ndakita_group_site were found to describe behaviour ndakita_build did not
have. None were invented maliciously: each came from a summary of the roadmap
that was rosier than the roadmap's own detail. Confidently-worded wrong copy is
worse than the vague copy it replaces, and it is the kind of error nobody
notices until a customer does.
How to use it. Before publishing a product claim, find it here or add it.
If you cannot point at a file that implements it, do not ship the sentence.
ndakita_build/docs/module-roadmap.md is the source of truth, and its
detail is trustworthy where its prose summary is not.
Verified 2026-08-01¶
| Claim on the site | Backed by | Notes |
|---|---|---|
| Per-project P&L, everything tagged to its project | custom/overrides.py create_project_cost_centre |
Cost centre created on Project after_insert. |
| Each project gets its own stores, cost centre and books | custom/overrides.py create_project_site_warehouses |
Includes a dedicated Cement store. |
| M-Pesa statement upload | doctype/mpesa_import/mpesa_import.py |
PDF, CSV and Excel, with password support. The site previously understated this. |
| M-Pesa lines matched to supplier and project | mpesa_import.py suggest_projects |
It suggests. Unmatched rows sit in Review Required. |
| M-Pesa entries reach the books | mpesa_import.py post_transactions |
Throws unless every row has a confirmed project, then creates draft Journal Entries for Admin Finance to submit. Two human gates. Do not write "posts automatically". |
| Daily quota, achieved, pro-rated pay | doctype/daily_output_log/daily_output_log.py |
70% floor applies. |
| Labour pay as an M-Pesa payment sheet | report/site_labour_performance/ |
A report whose worker_id column is the M-Pesa number. There is no integration pushing to M-Pesa bulk payment. |
| Reorder alerts | custom/reorder_alert.py |
Built 2026-08-01 because the claim predated the code. Daily job, days-of-cover against real consumption plus static reorder level. Depends on the beat scheduler being enabled per tenant. |
| Inter-site transfers with a paper trail | custom/overrides.py validate_site_transfer |
|
| Daily site reports with photos | doctype/daily_site_report/, doctype/site_report_photo/ |
Foreman submits, Site PM validates, progress rolls onto the Project. |
| Purchase approval | scripts/make_workflows.py, PO_APPROVAL_THRESHOLD |
Single approver level. Below the threshold a PO auto-approves. Never write "nothing gets bought without a signature". |
| QR asset register | utils.asset_qr_svg, print_format/asset_tag_label/ |
Per-project Locations mean Asset Movement tracks between sites. A plain phone camera opens the asset. |
| Client document expiry warning | scripts/make_notifications.py, fixtures/notification.json |
The only "Days Before" notification in the app: Client Document only, 30 days, email, to Admin Finance and Site PM. Document types are Title Deed, Council Approval, Contract, Drawing, ID/Registration, KRA, Other. |
| Customer records, contracts, leads pipeline | tests/test_customer.py, test_contract.py, test_leads.py |
Contract is the lightweight base doctype. |
Do not claim¶
| Not shipped | Where it actually is |
|---|---|
| A client-facing progress portal | P9. Client View is a scoped desk role with read permission, not a portal. |
| Offline use, or an in-app QR scanner | P9. The PWA v1 is a Foreman workspace on the installable desk PWA. |
| Multiple purchase approval levels | One level. A second is an open question in the roadmap's §7. |
| Automatic posting of M-Pesa entries | Drafts only, after per-row confirmation. |
| A pipe into M-Pesa bulk payment | A report you export. |
Standing cautions¶
- App store copy is a claim too. "100% private and offline" was on Sub Scout and is falsifiable by one network call; it also has to match the Play Data Safety declaration. Serenity House claimed "works offline" over a feature list containing an AI guide. Both are now scoped.
- Pricing is stated in
Terms of Service§4 and on/build. The two must agree, and the setup fee is deliberately never published as a figure. - The comparison page states that its figures are first-year totals including implementation. Ndakita Build's row is subscription only, because onboarding is quoted per client, and that exception is disclosed on the page and on the row. Changing one without the other makes our own product look cheaper than the rule allows.