A build-to-order Odoo module that turns a posted customer invoice into a compliant Korean electronic tax invoice, transmits it through your Hometax or ASP route, and tracks acceptance, rejection and correction end to end. ECOSIRE builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA build-to-order Odoo module that turns a posted customer invoice into a compliant Korean electronic tax
invoice, transmits it through your Hometax or ASP route, and tracks acceptance, rejection and correction end to end. ECOSIRE builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database.
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 Odoo.
You go live in about 2–4 weeks, with a post-launch support window.
Finance teams operating in South Korea carry an obligation that Odoo core has no concept of: the electronic tax invoice (전자세금계산서). Every taxable B2B supply has to be issued in the prescribed electronic form, transmitted to the National Tax Service through Hometax or an approved ASP, and retained so an auditor can reconstruct it. Out of the box, Odoo gives you account.move, a tax engine and a QWeb PDF — and stops there. There is no business-registration-number validation, no issuance state, no transmission log, no correction (수정세금계산서) workflow, and no link between an accepted NTS approval number and the journal entry it belongs to. The gap is usually filled with a spreadsheet, a second login to a portal, and a monthly reconciliation nobody enjoys.
What we build is a dedicated Odoo module that makes the e-Tax Invoice a first-class object in the accounting flow. A new model — typically ecosire.etax.document — is created when a Korean customer invoice is posted, linked one-to-one to the account.move, and driven by a proper selection state machine (draft → queued → issued → accepted / rejected → corrected). Master data does the heavy lifting: res.partner gains validated business registration number, sub-business (종사업장) code, taxation type and buyer e-mail fields, all checked by @api.constrains so a bad number is refused at data entry rather than at transmission time. account.tax records are mapped to the correct Korean classification (taxable, zero-rated, exempt) through a configurable mapping model, so the amounts on the electronic document are derived from the same tax lines the general ledger already uses — one posting, one truth, never a re-keyed figure.
Transmission is implemented against the route you actually use. We integrate with your certified ASP or direct e-tax provider over its documented HTTP/JSON or SOAP API from a Python service layer, with credentials held in ir.config_parameter rather than source control, per-company settings on res.company, and retries plus idempotency keys so a timeout can never produce a duplicate issuance. Every request and response is persisted for audit. Outbound work runs through an ir.cron queue instead of blocking the user's post action, and a mail.thread chatter entry on the invoice records each state change together with the NTS approval number when it comes back. Rejections are not dead ends: the module surfaces the provider's reason code in readable form, raises an activity for the responsible accountant, and offers a guided correction wizard (a TransientModel) that produces the correct 수정 type — cancellation, amount amendment or re-issue — linked back to the original for traceability. The same posting produces both the machine payload and a human-readable QWeb report in Korean and English, so the customer copy and the transmitted document can never drift apart.
Security and reporting follow Odoo conventions rather than being bolted on. Access is defined in ir.model.access.csv with a dedicated e-tax officer group plus multi-company record rules on company_id; the document model is append-only for accountants, and cancellation is possible only through the correction workflow. Archiving keeps the transmitted payload, the provider acknowledgement and the rendered PDF as ir.attachment records tied to the journal entry for the statutory retention period, with a searchable list view and filters by issuance status, VAT period, buyer registration number and approval number — so reconciling a period against your Hometax download is a filtered list and an export, not an afternoon. Documented model methods are callable over Odoo's XML-RPC/JSON-RPC API, so an upstream billing system or RPA bot can trigger issuance and read status without UI access. The module targets Odoo 17.0, 18.0 and 19.0, ships as a normal addon with its own __manifest__.py, depends only on account (so it runs on Community), and on Enterprise hooks into the accounting dashboard and audit trail rather than duplicating them.
This is a build-to-order product, not an existing apps.odoo.com download. After a short scoping call we confirm your Odoo version and edition, your ASP or direct-Hometax route, your chart of accounts and tax mapping, and any sub-business or multi-company structure — then we write a fixed scope. Typical delivery is 2-4 weeks from confirmed scope. You get the module built and configured against a staging copy of your database first, UAT with your own invoices in the provider's test environment, a documented go-live with a rollback plan, and a post-go-live support window. The source code is handed over in a git repository you own, so nothing here makes you dependent on us to keep operating.
Signs off the VAT return and is accountable for every tax invoice being issued and accepted on time. Needs issuance status visible on the invoice itself, an audit trail that survives an NTS review, and no parallel spreadsheet between Odoo and Hometax.
Runs one Odoo instance across several countries and will not fork the accounting process for Korea. Needs the Korean obligation handled inside the standard `account.move` flow, scoped by company with proper record rules, without disturbing the other legal entities.
Posts customer invoices all day and is the person who has to deal with a rejection. Needs the reason code in plain language, a correction wizard that picks the right 수정 type, and one posting that produces both the customer PDF and the transmitted document.
Owns upgrades and integrations. Needs a clean addon with its own `__manifest__.py` and no core patches, credentials kept out of source control, an RPC-callable surface for upstream systems, and the source in a repository the company controls.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Korean e-Tax Invoice issuance | Built into the posting flow with a dedicated document model and state machine | Achievable, but you specify and build the state machine yourself | Often present, though scoped to the vendor's chosen ASP | Not present — Odoo core has no e-Tax Invoice concept |
| Business registration number validation | Check-digit validation via `@api.constrains` at data entry, before posting | Depends entirely on whether the spec asked for it | Usually a plain text field with light or no validation | A free-text VAT field with no Korean-specific rule |
| Tax mapping from master data | Configurable mapping from your own `account.tax` records to Korean classifications | Frequently hardcoded to the tax codes present on day one | Fixed mapping assuming a standard Korean chart of accounts | Tax engine exists but carries no e-invoice classification |
| Rejection and correction workflow | Guided 수정세금계산서 wizard linked back to the original document | Commonly deferred to phase two and handled manually meanwhile | Varies widely; often a status flag plus manual re-issue | None — corrections happen outside the system |
| Audit trail and archiving | Payload, acknowledgement and PDF stored as attachments on the journal entry | Logging quality depends on the developer and the budget | Typically a transmission log without the full document set | Standard chatter and PDF only, with no transmission record |
| Multi-company and access control | Dedicated security group plus record rules on `company_id` | Often single-company by default and retrofitted later | Generally single-entity assumptions in the data model | Odoo multi-company applies, but there is no e-tax object to scope |
| Source ownership and upgrades | Full source in a git repository you own, built per Odoo version | You own it, and you also own every future version migration | Licensed or encrypted code tied to the vendor's roadmap | Core upgrades handled by Odoo, but the requirement stays unmet |
| External system integration | Documented RPC-callable methods plus server and automated action hooks | Possible, but the interface is usually written for one caller | Often UI-only, with no supported programmatic entry point | Generic ORM RPC access with no e-tax semantics to call |
This is a build-to-order module, not an existing download. Typical delivery is 2-4 weeks from confirmed scope. The clock starts once we have agreed your Odoo version and edition, your ASP or direct-Hometax route, your tax mapping and any multi-company or sub-business structure — which is exactly what the initial scoping call establishes.
Most Korean businesses transmit through a certified ASP (e-tax service provider) rather than direct Hometax API access, and that is the route we implement by default, against your provider's documented API. If you already hold direct or certificate-based credentials we build against that instead — the integration layer is scoped to your actual channel during the scoping call. We do not resell or provide the ASP account itself.
We build for Odoo 17.0, 18.0 and 19.0. The module depends only on `account`, so it runs on Community as well as Enterprise. On Enterprise we hook into the accounting dashboard and audit-trail features rather than duplicating them; nothing in the module requires an Enterprise subscription.
The reason code is stored on the e-tax document, translated into a readable message in the invoice chatter, and an activity is raised for the responsible accountant. From there the correction wizard produces the appropriate 수정세금계산서 — cancellation, amount amendment or re-issue — and links it back to the original so the audit trail shows the whole chain.
Delivery includes a post-go-live support window for defect fixes and configuration adjustments. Beyond that, ongoing support and version upgrades — carrying the module to a newer Odoo release, or adapting to an NTS or provider specification change — are handled as a support agreement or a scoped change request. Because the source is handed over in your own git repository, you are never locked in: your team or another partner can maintain it.
No core files are patched. The module is a standard addon with its own `__manifest__.py` that extends `res.partner`, `res.company`, `account.tax` and `account.move` by inheritance and adds its own models, views and security rules. Upgrades follow the normal Odoo addon path, and we test the module against the target version as part of any upgrade engagement.
Yes. The issuance and status-read methods are exposed on the model and callable over Odoo's XML-RPC and JSON-RPC API using a service user restricted by the module's own security group, so an upstream billing system, portal or RPA bot can issue and poll status. Server actions and automated actions are also available if you would rather drive issuance from an Odoo-side event such as payment registration.

A build-to-order Odoo localization that loads Algeria's full wilaya and commune hierarchy with bilingual French and Arabic names, wired into partner addresses and reporting. ECOSIRE builds, installs, and supports it after your quotation.



A build-to-order Odoo module that lets you render any accounting report — P&L, Balance Sheet, aged reports, journals, trial balance — in a currency of your choice, with automatic conversion at the rate you define. ECOSIRE scopes, builds, installs and supports it for your Odoo 17/18/19 environment.
A build-to-order Odoo module that turns a posted customer invoice into a compliant Korean electronic tax invoice, transmits it through your Hometax or ASP route, and tracks acceptance, rejection and correction end to end. ECOSIRE builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database.