A build-to-order Frappe app that turns an ERPNext Sales Invoice into the correct Türkiye document — e-Fatura for GİB-registered buyers, e-Arşiv for everyone else — with tax mapping, rejection and correction handling, and a compliant archive. ECOSIRE builds, installs and supports it for your v15 or v16 site. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA build-to-order Frappe app that turns an ERPNext Sales Invoice into the correct Türkiye document
— e-Fatura for GİB-registered buyers, e-Arşiv for everyone else — with tax mapping, rejection and correction handling, and a compliant archive.
ECOSIRE builds, installs and supports it for your v15 or v16 site.
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 ERPNext.
You go live in about 2–4 weeks, with a post-launch support window.
Finance teams invoicing in Türkiye carry a split obligation that ERPNext core does not model. A buyer registered on the GİB e-Fatura user list must receive an e-Fatura routed through the registered-user channel; every other buyer — domestic retail, unregistered companies, and typically export scenarios — must receive an e-Arşiv, reported on a different cadence and retained under different rules. ERPNext gives you a Sales Invoice, an Item Tax Template and a print format. It does not know which of the two document types a given customer requires, does not carry the exemption and scenario codes the profile expects, cannot receive a buyer's rejection, and has nowhere structured to keep the machine-readable original that an audit will actually ask for. The result is the pattern we see repeatedly: invoices posted in ERPNext, then re-keyed into a portal or an integrator's own screen, with the two systems drifting apart by month-end.
We build a proper Frappe app — its own repository, its own module, installed with bench get-app and bench --site <site> install-app — that makes ERPNext both the system of record and the point of issue. A Turkey e-Invoice Settings single DocType holds company-level configuration: tax office, VKN/TCKN identifiers, integrator or gateway endpoint and credentials (stored as Password fieldtype, never plain text), a test-versus-production environment toggle, and the numbering series reserved for each document type. A Turkey e-Invoice Document DocType is created per outgoing invoice and is the durable record: resolved document type, scenario, serialized payload, returned identifier and timestamps, current lifecycle state, and every response received. Customer-side data lives on custom fields against Customer and Address — identifier type and value, registered-user status, and the alias or postbox where one applies — so the routing decision is made from master data rather than from a spreadsheet a controller maintains on the side.
The flow hangs off hooks.py doc events rather than a button someone must remember to press. Sales Invoice validate runs the completeness checks — identifier present and well formed, the address fields the profile requires, every line resolving to a tax rate and, where zero-rated, to an exemption reason — and blocks submission with a specific message instead of letting a malformed document reach the gateway. on_submit resolves the correct document type from the customer's registered status, builds the payload from ERPNext master data (Item Tax Template, Sales Taxes and Charges, UOM, currency and exchange rate), and enqueues transmission through frappe.enqueue so a slow or unavailable gateway never blocks a user's submit. on_cancel refuses to cancel a document already accepted downstream and directs the user to the correction path instead. A scheduler event declared in hooks.py polls for state changes — acceptance, rejection and application-response messages — and writes them back onto the Turkey e-Invoice Document, so a buyer's rejection surfaces in ERPNext as a task with an owner rather than as an email nobody opened. Rejection then opens a controlled correction workflow: the original stays intact and archived, a linked corrective document is raised against it, and the chain from original to correction is queryable from either end.
One posting produces both faces of the invoice. The machine-readable payload goes to the gateway and is stored verbatim on the document record; the human-readable rendering is a Jinja print format carrying the mandated visual elements, generated from the same data so the two can never disagree. Both are attached as File records against the Turkey e-Invoice Document with a checksum, giving you an archive that can be produced on demand and verified as unaltered. Access follows Frappe's permission model: a Turkey e-Invoice User role profile for the finance team who issue and correct, and a read-only auditor role that can retrieve archived originals without touching live invoicing. Whitelisted methods (@frappe.whitelist()) expose retry, status refresh and archive retrieval to the desk and, where you need it, over the Frappe REST API so a portal or middleware can query invoice status without a database login. A client script on Sales Invoice shows the resolved document type and live status inline, so the person issuing sees the outcome on the form they already work in.
This is build-to-order, not a marketplace download. We start with a scoping call — your GİB registration position, which integrator or gateway you use or intend to use, your Frappe/ERPNext version (v15 or v16), the scenarios you actually issue, and how corrections are handled today. We then build against your site, install on your staging bench first, and run UAT with your own customers and invoice patterns in the gateway's test environment before anything touches production. Typical delivery is 2–4 weeks from confirmed scope. You receive the full source repository — your code, on your git remote, with no obfuscation and no runtime licence phone-home — plus installation and configuration documentation, a user guide, a live training session for the finance team, and a post-go-live support window for defects and regulatory adjustments.
Responsible for every invoice leaving the business being the right document type, correctly taxed and accepted. Wants issuing to happen once, inside ERPNext, with rejections visible as work items instead of being discovered at month-end reconciliation.
Owns the audit position. Needs the machine-readable original and its human-readable counterpart retained together, verifiably unaltered and retrievable per invoice — plus a clear, traceable link from any corrective document back to the original it replaces.
Maintains the bench and every app on it. Wants a standard Frappe app with no core patches, doc events instead of monkey-patching, real DocTypes instead of JSON blobs, and the source in their own repository so they can read, extend and upgrade it from v15 to v16.
Runs several companies on one ERPNext site and needs the Türkiye entity locally compliant without forking the group's chart of accounts, tax templates or reporting — company-scoped settings and identifiers, group-wide consistency.
| Criterion | ECOSIRE | Custom Build | Competitor | ERPNext Native |
|---|---|---|---|---|
| Document-type routing (e-Fatura vs e-Arşiv) | Resolved automatically on submit from the customer's registered-user status held in master data | Achievable, but the routing rules and their edge cases are yours to specify, build and re-test | Usually supported, though often as a manual field on the invoice rather than master-data driven | No concept of either document type; ERPNext produces one generic Sales Invoice |
| Fit to your invoice scenarios | Scoped against your actual scenarios and gateway before a line is written, then tested on your data | Exactly your fit, at the cost of a full internal discovery, build and QA cycle | Fits the vendor's assumed common case; anything outside it needs a fork or a feature request | Generic invoicing only |
| Rejection and correction handling | Scheduler polls responses, surfaces rejections in ERPNext, and raises a linked corrective document with a traceable chain | Frequently deprioritised in phase one and bolted on after the first live rejection | Varies widely; status is often visible but the correction chain is not modelled | No inbound status channel at all |
| Archiving and audit evidence | Machine and human representations from one posting, attached with checksums and retrievable per invoice | Depends entirely on how thoroughly retention was specified up front | Payload usually stored; verifiable retention and auditor-scoped access are less common | Print format only, regenerated on demand rather than retained as issued |
| Source code and lock-in | Full unobfuscated source handed to your git remote, no runtime licence check | Yours outright, and yours to maintain alone | Often licence-keyed or partially obfuscated, with upgrades tied to the vendor | Open source, but nothing here to own |
| Frappe engineering quality | Real DocTypes, `hooks.py` doc events, scheduler jobs, whitelisted methods, role profiles, zero core patches | As good as the team building it; in-house first Frappe apps commonly patch core | Generally sound, but internals are not always visible for review | Core-quality by definition, minus the required functionality |
| Version support and upgrade path | Built and tested for v15 and v16, with upgrades covered under a maintenance arrangement | Every Frappe major version becomes an internal migration project | The vendor's release cadence dictates when you can upgrade your bench | Upgrades with ERPNext, but the compliance gap upgrades with it |
| Time to a working system | 2–4 weeks from confirmed scope, including staging UAT and a rollback plan | Typically several months once discovery, build, gateway testing and QA are counted | Fast to install; slow once the gaps against your scenarios emerge | Immediate, and immediately non-compliant for Türkiye |
This is build-to-order: there is no instant download. Typical delivery is 2–4 weeks from confirmed scope, measured from the point where we have agreed the document scenarios, your gateway or integrator, your Frappe/ERPNext version and your correction process. We install on staging and run UAT with you before anything reaches production. Scope touching unusual scenarios or a gateway we have not integrated before is quoted with its own timeline rather than squeezed into that window.
The engagement includes a post-go-live support window for defects and for adjustments arising from regulatory or gateway changes during that period. You hold the full source in your own git repository, so your team can read and extend it at any time. Beyond the included window we offer an ongoing support and maintenance arrangement covering GİB or integrator format changes, Frappe/ERPNext version upgrades and enhancements — quoted separately once we know your invoice volume and the environments involved.
No. The transmission layer is built against whichever GİB-accredited integrator or private integrator you already use or plan to use, and the endpoint and credentials are configuration rather than code. If you have not chosen one yet, we scope against the candidate you shortlist. Test and production environments are separate settings, so you can point at the gateway's test environment throughout UAT and switch by configuration at go-live.
It is a standard Frappe app installed with `bench get-app` and `bench --site install-app`, targeting Frappe/ERPNext v15 and v16, and it modifies no core files. Self-hosted benches and Frappe Cloud private benches both work. On Frappe Cloud, custom apps require a private bench — we confirm your hosting arrangement during the scoping call so there are no surprises at install time.
The scheduler job polls for application responses and writes the rejection onto the linked `Turkey e-Invoice Document`, so it appears in ERPNext as a state change with an owner rather than as an email in someone's inbox. The original invoice is not cancelled or altered — it stays archived exactly as issued. Instead, the correction workflow raises a linked corrective document against it, and the chain from original to correction is queryable from either direction for audit.
Yes. You receive the complete, unobfuscated source in a repository on your own remote, with no runtime licence check and no phone-home. The app is built the way a Frappe app should be — real DocTypes, `hooks.py` doc events, scheduler events, whitelisted methods and client scripts — precisely so a Frappe developer can read it, extend it and carry it through version upgrades without depending on us.
It reads your existing configuration rather than duplicating it. Rates and exemptions come from your `Item Tax Template` and `Sales Taxes and Charges` rows, with additional fields only where the Türkiye profile requires something ERPNext has no place for — such as an exemption reason code on a zero-rated line. During scoping we review your current tax templates and tell you exactly which need enrichment before go-live.

A build-to-order 2Checkout (Verifone) payment integration for ERPNext, giving global digital-goods sellers card acceptance, 45+ local payment methods, multi-currency checkout, and reconciled invoices. ECOSIRE scopes, builds, installs, and supports it on your ERPNext v15/v16 instance.

A build-to-order ERPNext application for anonymous 360-degree reviews — configurable peer, manager, report and self rater groups, weighted competency scoring, and aggregated gap-analysis and heatmap reports. ECOSIRE scopes, builds, installs and supports it on your Frappe/ERPNext v15/v16 instance.

A build-to-order ERPNext app that detects abandoned webshop and POS carts, then runs multi-channel WhatsApp, email, and SMS recovery and win-back sequences with dynamic cart content and coupon injection. ECOSIRE scopes, builds, installs, and supports it for your v15/v16 instance.

A build-to-order ERPNext app for running B2B account-based campaigns: define target-account lists, sequence outreach calls, auto-distribute them to agents, and score account engagement across every contact. ECOSIRE designs, builds, installs and supports it after you confirm scope.
A build-to-order Frappe app that turns an ERPNext Sales Invoice into the correct Türkiye document — e-Fatura for GİB-registered buyers, e-Arşiv for everyone else — with tax mapping, rejection and correction handling, and a compliant archive. ECOSIRE builds, installs and supports it for your v15 or v16 site.