A build-to-order ERPNext app that connects your Sales Invoice and POS flows directly to Egypt's ETA platform for certified e-invoice and e-receipt submission with live status tracking. ECOSIRE scopes, builds, installs, and supports it for your instance. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $499.00 USD; request a quote for a scoped proposal.

A build-to-order ERPNext app that connects your Sales Invoice and POS flows directly to Egypt's ETA platform for certified e-invoice and e-receipt submission with live status tracking. ECOSIRE scopes, builds, installs, and supports it for your instance.
لا حاجة للدفع الآن. يؤدي هذا إلى إرسال طلب عرض سعر إلى فريقنا — وسنتواصل معك عبر البريد الإلكتروني بالأسعار والخطوات التالية.
Since the Egyptian Tax Authority (ETA) mandate rolled out across VAT-registered businesses, any company crossing the EGP 250,000 registration threshold has to issue structured, cryptographically signed electronic documents — not PDFs — and get each one accepted by ETA in near real time. Miss a submission window, send a malformed taxItem block, or use the wrong TaxType/TaxSubtype code and you face rejections, reconciliation headaches, and penalties. ERPNext gives you clean Sales Invoices, Item masters, and Tax Templates out of the box, but it has no concept of ETA's document envelope, its UUID/hash chain, the certified e-signature step, or the submit-and-poll status lifecycle. That is exactly where core ERPNext runs out of road.
New `ETA Settings` single DocType for credentials, client ID/secret, issuer branch data, and preprod/production environment toggle, with signing material stored via Frappe's encrypted fields
One-to-one `ETA Submission` log DocType linked to each `Sales Invoice` and `POS Invoice`, capturing the request payload, ETA long UUID, submission UUID, and returned status
`hooks.py` doc-event handler on `on_submit` that serializes the invoice into ETA's exact JSON document schema against your real tax templates
Certified electronic signature step applied to the canonical document payload before submission, matching ETA's CAdES/signing requirements
`TaxType` and `TaxSubtype` validation that maps every ERPNext tax line to a valid ETA code pair and blocks submission on mismatch
Automatic value/quantity/rounding reconciliation so ERPNext totals and ETA `totalAmount`/`netAmount` fields never diverge and trigger rejection
ECOSIRE builds a proper Frappe app — installed on your bench alongside ERPNext — that closes that gap end to end. The app ships new DocTypes (an ETA Settings single for credentials, environment, and issuer data; an ETA Submission log linked one-to-one with each Sales Invoice and POS Invoice; and mapping DocTypes for ETA code lists). A hooks.py doc-event handler fires on invoice submit to serialize the document into ETA's exact JSON schema, resolve every line to a validated TaxType/TaxSubtype pair, apply the certified electronic signature, and either submit immediately or queue it for interval-based batch submission via a Frappe scheduler event. Whitelisted server methods expose the submit, cancel, and status-refresh actions to the desk and to the Frappe REST API, so your own systems can trigger them too.
Once a document is accepted, ETA returns a long UUID, a submission UUID, and a status that changes asynchronously (Submitted → Valid, or Invalid/Rejected with reasons). A scheduled background job polls ETA and writes the current state, the public-share QR/URL, and any rejection reason back onto the linked invoice, so your finance team sees the truth inside ERPNext without logging into the ETA portal. For retail and B2C, the same engine handles the E-Receipt flow: POS transactions are packaged, signed, and submitted on the receipt cadence ETA expects, with the receipt reference stored back on the POS Invoice. Client scripts add status badges and a "Resubmit to ETA" button on the invoice form, and a dedicated role profile keeps signing credentials and submission controls limited to authorized finance users.
Because this is build-to-order, nothing is a black box. We start with a scoping call to confirm your ERPNext version (v15 or v16), your tax setup, which document types are in scope (B2B e-invoice, B2C e-receipt, or both), and your ETA credentials and environment (preprod vs production). We then build against your actual chart of accounts and tax templates, test the full submit/poll/cancel lifecycle on a staging bench, run UAT with your team, and cut over to production with a rollback plan. Typical delivery is 2–4 weeks from confirmed scope. You receive the full source code and git repository so you are never locked to us — though most clients keep us on for the post-go-live support window and ETA schema updates.
Just crossed the EGP 250,000 registration threshold and is now on the hook for ETA e-invoicing. Needs certified submission working inside ERPNext before penalties start, without hiring an in-house Frappe developer.
Issues hundreds of B2B invoices a month and cannot afford portal re-keying or silent rejections. Wants interval-based submission, automatic status write-back, and a clear resubmit path for invalid documents.
Runs shops or an ERPNext POS and must issue compliant e-receipts. Needs the POS/B2C receipt flow signed and submitted on ETA's cadence with references stored back on each POS Invoice.
Owns the company's ERPNext bench and wants a clean, documented Frappe app with proper DocTypes, hooks, and role profiles — plus the git repo — rather than fragile custom scripts they can't maintain.
قم بشراء الترخيص من موقع ecosire.com وقم بتنزيل تطبيق Egypt ETA E-Invoicing & E-Receipt Integration for ERPNext ZIP من لوحة تحكم حسابك.
قم باستخراج ملف ZIP إلى مجلد تطبيقات مقعدك، أو قم بتشغيل "bench get-app" مع المسار إلى التطبيق المستخرج.
قم بتشغيل `bench --site SITE_NAME install-app APP_NAME` متبوعًا بـ`bench migrate` لتثبيت Egypt ETA E-Invoicing & E-Receipt Integration for ERPNext وتطبيق مخططه.
افتح إعدادات ترخيص ECOSIRE على موقعك وقم بتنشيط مفتاح الترخيص الخاص بك. يتطلب تطبيقي ecosire_connect وecosire_license_client المجانيين.
| المعيار | ECOSIRE | بناء مخصص | منافس | أودو الأصلي |
|---|---|---|---|---|
| ETA submission lifecycle | Full submit, poll, cancel with async status write-back | Depends entirely on your developer's depth | Often submit-only, limited status handling | |
| Tax code validation | `TaxType`/`TaxSubtype` validated per line, blocks bad codes | Only if you build the mapping yourself | Generic mapping, may not fit your tax setup | |
| E-receipt / POS B2C flow | Signed POS Invoice submission on ETA receipt cadence | Extra scope, extra cost, extra risk | Frequently e-invoice only | |
| Fit to your ERPNext instance | Built against your real accounts and tax templates | Fully custom but you carry all the risk | One-size template you adapt yourself | |
| Source code & git repo | Full source and git repo handed over | You own it but built from scratch | Usually closed-source or license-gated | |
| Delivery time | 2–4 weeks build-to-order from confirmed scope | Months, depending on hiring and ramp-up | Instant install but generic | |
| Support & ETA updates | Post-go-live window + schema/code-list updates | You maintain it or rehire | Tied to vendor's update cycle and fees | |
| Security & permissions | Encrypted credentials + dedicated role profile + audit log | Whatever you implement | Varies by vendor |
This is a build-to-order product, not an instant download. Typical delivery is 2–4 weeks from confirmed scope. After the scoping call we lock the document types, your ERPNext version, and tax mapping, then build, test on a staging bench, run UAT, and cut over to production. There is no fabricated 'ready today' claim — you get code built and verified for your actual instance.
We build and test against ERPNext/Frappe v15 and v16. We confirm your exact bench version on the scoping call and target that. The app is a standard Frappe app installed on your bench, so it upgrades cleanly with your normal `bench update` process, and we adjust for version-specific API changes as part of the build.
On invoice submit, a `hooks.py` doc event serializes the document to ETA's JSON schema, validates every line's `TaxType`/`TaxSubtype`, applies the certified electronic signature, and either submits immediately or queues it for interval-based batch submission via a Frappe scheduler event. A background job then polls ETA and writes the returned Valid/Invalid status, UUIDs, and QR/URL back onto the invoice. POS/B2C receipts follow the same signed-submit flow on ETA's receipt cadence.
The rejection reason returned by ETA is written to the linked ETA Submission log and surfaced as a status badge on the invoice. You fix the underlying data — usually a tax code, tax number, or totals mismatch — and use the `Resubmit to ETA` action. Validation on submit catches the most common issues (invalid `TaxSubtype`, totals divergence) before they ever reach ETA.
Yes. Every engagement includes a post-go-live support window for defect fixes and for adjusting to ETA schema or code-list changes. Because you receive the full git repository, you can also maintain it yourself or bring in another partner — you are never locked in. Ongoing support beyond the included window is available on request.
No. This is not an off-the-shelf marketplace download. ECOSIRE builds it to order against your real chart of accounts, tax templates, and ETA credentials, so the field mapping and validation fit your data rather than a generic template. You also get the source and git repo, documentation, training, and UAT — not just a zip file.
Credentials and signing material live in the `ETA Settings` DocType using Frappe's encrypted field storage, and access is gated behind a dedicated role profile so only authorized finance users can view settings or trigger submissions. Every submission is recorded in an audit-logged ETA Submission record, giving you a full trail of who submitted what and when.
A build-to-order ERPNext app that connects your Sales Invoice and POS flows directly to Egypt's ETA platform for certified e-invoice and e-receipt submission with live status tracking. ECOSIRE scopes, builds, installs, and supports it for your instance.