A build-to-order AL extension that signs and transmits sales invoices, credit memos and debit notes from Dynamics 365 Business Central to KRA eTIMS via your OSCU or VSCU device, then writes the signature, QR data and control unit reference back onto the posted document. ECOSIRE scopes, builds, installs and supports it for your tenant. Built to order by ECOSIRE for Dynamics 365 BC (build-to-order) — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA build-to-order AL extension that signs and transmits sales invoices,
credit memos and debit notes from Dynamics 365 Business Central to KRA eTIMS via your OSCU or VSCU device, then writes the signature, QR data and control unit reference back onto the posted document.
ECOSIRE scopes, builds, installs and supports it for your tenant.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your Dynamics 365 Business Central.
You go live in about 2–4 weeks, with a post-launch support window.
Kenyan VAT-registered businesses must transmit invoice data to the Kenya Revenue Authority through eTIMS, and the tax authority — not your finance team — decides when an invoice is legally issued. Dynamics 365 Business Central posts a clean sales invoice, calculates VAT from your posting groups, and prints a report layout, but it has no concept of a control unit, an invoice signature, a KRA item classification code, or a transmission that can be rejected hours after posting. Teams fill that gap with a spreadsheet, a separate eTIMS client, and someone re-keying invoice lines twice a day — which is where the numbers drift, item descriptions stop matching, and a VAT return has to be reconciled against a system nobody in finance controls.
We build a Business Central extension that closes the loop inside the application. A table extension on Sales Invoice Header (plus the credit memo, customer and item tables) carries the eTIMS fields: control unit invoice number, receipt signature, internal data, signing timestamp, transmission status, and the KRA classification, packaging unit and quantity unit codes. A codeunit subscribing to OnAfterPostSalesDoc enqueues the document rather than blocking the posting session — the user who posts an invoice is never held hostage by a device timeout. A job queue entry drains that queue, builds the eTIMS payload strictly from posted data (never from the unposted document), calls your OSCU or VSCU endpoint, and writes the response back onto the posted record. Where you run a hardware control unit on-premises, the same codeunit reaches it through a configurable local endpoint; where you use the virtual unit, it calls the KRA-facing service directly.
One posting produces both outputs. The human-readable document — the report layout your customers receive — is extended to carry the control unit number, signature block and QR payload, so the PDF a customer holds and the record KRA holds originate from the same posting event rather than two parallel processes. Master-data mapping is configuration, not code: a setup page maps VAT posting setup combinations to eTIMS tax categories, and the item card gains classification, packaging unit and quantity unit fields with validation, so an unclassified item is caught during scoping rather than at 4pm on a filing deadline.
Rejections are treated as a workflow, not an error log. Every attempt writes a record with the request, response code, KRA message and retry count. Rejected documents land on a dedicated correction list page where a finance user reads the reason, fixes the underlying data — a missing classification code, a customer PIN that fails validation, a tax mapping gap — and re-submits, with retries bounded and audited so nobody silently re-sends the same invoice twenty times. Successful transmissions are immutable: the signature, payload hash and timestamp are locked, permission sets separate the clerk who submits from the controller who can force a correction, and the archive is queryable through custom API pages (REST API v2.0 / OData v4) so auditors, a Power BI model, or a Dataverse-connected Power App can read it without a database login.
This is build-to-order. Nothing is downloaded from AppSource. You request a quotation, we run a scoping call against your actual Business Central version, localisation, device type and document flows, and we then build the extension for your tenant. Typical delivery is 2 to 4 weeks from confirmed scope. You receive the AL source, the app deployed to a sandbox for UAT before production, and a written rollback plan. The extension is versioned in a git repository handed over at the end, so you own it whether or not you keep working with us.
Owns the VAT return and the relationship with KRA. Needs every posted invoice transmitted, signed and reconcilable without a parallel spreadsheet, and needs to see immediately which documents were rejected and why before a filing deadline.
Posts invoices and credit memos all day and cannot afford posting to be blocked by a device timeout. Needs the signature and control unit number to appear on the customer PDF automatically, and one clear list of anything that needs fixing.
Maintains the tenant and other extensions. Wants readable AL, event-subscriber integration instead of base-app modification, documented object ranges to avoid collisions, and the source in a git repository they can extend or fork.
Runs Business Central across several territories and needs Kenya handled inside the same ERP as everywhere else, with an auditable archive exposed over API to Power BI or Dataverse rather than living in a standalone eTIMS client.
| Criterion | ECOSIRE | Custom Build | Competitor | Dynamics 365 Business Central Native |
|---|---|---|---|---|
| Fit to your VAT setup and item master | Mapped to your actual posting groups and item data during scoping | Exactly your fit, if the developer knows both eTIMS and Business Central | Generic mapping you configure to; edge cases become support tickets | No eTIMS concepts exist to map to |
| Time to a working invoice transmission | 2-4 weeks from confirmed scope, sandbox first | Months, including discovery time on the eTIMS specification | Fast install, then configuration and gap work | Never — the capability is absent |
| Effect on posting performance | Queued via job queue; posting never waits on the device | Depends entirely on the implementation chosen | Varies; some vendors call the device synchronously at post time | Not applicable |
| Rejection handling | Correction list page, bounded retries, logged reason and user | Whatever was budgeted — often the first thing cut | Usually present, sometimes only as a raw error log | None |
| Source code ownership | Full AL source and git repository handed over | Yours, once it works | Compiled app; you cannot change it | Base application only |
| Upgrade path across release waves | Extension-only, no base modification; maintained under agreement | Your team owns every future compatibility break | Vendor-maintained, on the vendor's roadmap and timing | Upgrades cleanly, but still does nothing for eTIMS |
| Archive access for auditors and BI | Custom API pages over REST API v2.0 / OData v4 | Only if specified and paid for | Often UI-only or a fixed export format | Standard BC APIs, but no eTIMS data to expose |
| Ongoing cost shape | Project fee plus optional support agreement | Developer time now and for every future change | Per-tenant or per-company subscription, indefinitely | Included, but the compliance gap stays open |
This is build-to-order — there is no instant download. Typical delivery is 2 to 4 weeks from confirmed scope. The clock starts once we have agreed the document types in scope, your Business Central version and localisation, your device type (OSCU or VSCU), and access to a sandbox. Complex cases — multiple legal entities, unusual VAT structures, heavy master-data cleanup — are quoted with a longer window rather than squeezed into the same one.
Delivery includes a post-go-live support window for defect fixes on the delivered scope, with a response commitment set out in the quotation. Beyond that window we offer an ongoing support and maintenance agreement covering compatibility with new Business Central release waves and changes to the eTIMS specification. Because you receive the git repository and the AL source, you are never locked in — your own team or another partner can maintain it if you prefer.
Both. For SaaS we deliver a per-tenant extension installed against your environment; for on-premises we deliver an app package you deploy to your service tier. The practical difference is the device endpoint: on-premises OSCU deployments usually reach a local control unit, while SaaS environments typically use VSCU or another reachable service endpoint. We confirm which pattern applies during the scoping call, because it changes the build.
The rejection is captured with its response code and message, and the document appears on a correction list page. A finance user reads the reason in plain terms, fixes the underlying data — a missing item classification, an invalid customer PIN, a tax mapping gap — and re-submits from that page. Retries are bounded and every attempt is logged with the user who made it, giving you a defensible audit trail instead of an unbounded retry loop.
No. It is a proper AL extension: table and page extensions, codeunits, and event subscribers such as `OnAfterPostSalesDoc`. Nothing in the base application is changed, which is why it survives Microsoft's release waves and coexists with your other extensions. We agree an object ID range with you up front to avoid collisions with apps you already have installed.
A Business Central sandbox we can deploy to, your KRA registration and device credentials (OSCU or VSCU), and a decision on which document types are in scope. The item master matters most: eTIMS requires classification, packaging unit and quantity unit codes per item, and where those are not yet populated that data work is usually the longest pole. We flag it on the scoping call so it runs in parallel with the build rather than after it.
Yes. The extension exposes custom API pages over REST API v2.0 / OData v4, so the transmission log and signed-document archive can be consumed by Power BI, a Power Automate flow, a Dataverse-connected app, or an auditor's tooling — with permissions applied, and without handing anyone a database connection.

Configurable, rule-based approval matrices for every Business Central document type, with per-workflow approvers, amount limits, delegation, and email/mobile responses. Built and installed by ECOSIRE as a per-tenant AL extension.

A build-to-order AL extension that brings Adyen's 150+ global payment methods and unified settlement reconciliation into Business Central accounts receivable, complementing the first-party D365 Commerce Adyen connector.

A build-to-order Business Central extension that registers affiliates and referrers, attributes sales to referral codes and links, calculates tiered commission, and posts payouts as vendor invoices — installed per-tenant and supported by ECOSIRE.

A build-to-order AL extension that adds localized, multi-country African payroll to your Business Central tenant — per-country PAYE and statutory deductions, multi-currency multi-entity runs, statutory filing exports, and employee self-service payslips.
A build-to-order AL extension that signs and transmits sales invoices, credit memos and debit notes from Dynamics 365 Business Central to KRA eTIMS via your OSCU or VSCU device, then writes the signature, QR data and control unit reference back onto the posted document. ECOSIRE scopes, builds, installs and supports it for your tenant.