A build-to-order Odoo module that turns subcontract packages into governed work orders with certified progress claims, retention ledgers, back-charges and a compliance document register. ECOSIRE scopes, builds, installs and supports it on your Odoo 17, 18 or 19 database. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $499.00 USD; request a quote for a scoped proposal.
示意预览A build-to-order Odoo module that turns subcontract packages into governed work orders with certified progress
claims, retention ledgers, back-charges and a compliance document register.
ECOSIRE scopes, builds, installs and supports it on your Odoo 17, 18 or 19 database.
无需自行搭建——由 ECOSIRE 构建、安装并提供支持的可用应用。
以一次性构建价格开始。我们在启动时与您共同确定范围。
ECOSIRE 在您的 Odoo 上构建、配置并安装。
约 2–4 周内上线,并提供上线后的支持期。
Main contractors do not lose money on the head contract — they lose it in the gap between what a subcontractor claimed, what the quantity surveyor certified, what was actually paid, and what was withheld. In stock Odoo that gap is invisible. A subcontract package lives as a purchase.order, which assumes a quantity of goods delivered against a receipt; it has no concept of a schedule of values, a cumulative claim, a certified-this-period amount, or a retention percentage held against practical completion. Progress claims end up in a spreadsheet, retention lives in a QS's head, and back-charges (the crane hire you provided, the rectification you paid another trade to redo, the site clean-up levy) get remembered at final account time — or not at all. Odoo Enterprise's Project and Field Service apps track your own labour, not a third party's contractual entitlement, and no core model carries an expiry-dated insurance certificate that must block a payment.
What we build is a subcontract layer that sits beside Purchase and Accounting rather than fighting them. A new construction.subcontract model holds the package: the subcontractor partner, the parent project or analytic account, the contract sum, the retention rule (percentage held, percentage released at practical completion, percentage at end of defects liability), and a schedule-of-values line set with quantities, rates and a previously_claimed field. Against it, construction.subcontract.claim records each period's claim with @api.depends computes for amount_this_period, amount_cumulative, retention_held, back_charges_total and amount_certified_net — so the certified figure is derived, never typed. A statusbar workflow (draft → submitted → assessed → certified → invoiced → paid) is enforced by Python guards and by record rules in ir.model.access.csv plus ir.rule definitions, so a site engineer can assess but only a commercial manager can certify, and nobody can certify a claim whose cumulative value exceeds the contract sum plus approved variations. On certification we generate the vendor bill through the standard account.move API with the retention posted to a dedicated liability account and each back-charge posted as a negative line against its own account, so your trial balance, aged payables and project P&L all agree without a reconciliation exercise.
The compliance register is the part that pays for itself. construction.subcontract.document carries typed document slots — public liability and workers' compensation insurance, licence or registration number, tax clearance, method statement, RAMS, warranty — each with an issue date, expiry date and a computed is_valid. An ir.cron running nightly plus automated actions (base.automation) escalate at 30, 14 and 7 days before expiry to the buyer and the subcontractor's contact, and a configurable hard gate refuses certification while a mandatory document is expired. Reporting is QWeb: a payment certificate PDF suitable for issuing to the subcontractor, a retention statement per project, a back-charge schedule, and a subcontract cost-to-complete report reading through the analytic lines. Everything is exposed over XML-RPC and JSON-RPC with the standard search_read/create/write surface, so a site app, a Power BI dataset, or your existing document store can read and post without a custom endpoint. The module targets Odoo 17.0, 18.0 and 19.0 and is written against Community — Purchase, Accounting and Analytic are the only hard dependencies in __manifest__.py. If you run Enterprise we wire the optional hooks (Documents for file storage, Sign for the subcontract execution, Approvals for the certification chain) behind a soft dependency so the same codebase installs on either edition.
This is a build-to-order product, not an apps.odoo.com download. You request a quotation, we run a scoping call, and we write down the specifics that actually vary between builders: your retention percentages and release triggers, whether you certify against a schedule of values or a percentage-complete, how variations and provisional sums flow in, which back-charge categories exist, your document types and their expiry rules, and the exact chart-of-accounts codes for retention held and back-charges recovered. That scope becomes a fixed written specification before a line of code is committed. Typical delivery is 2–4 weeks from confirmed scope, depending on how much of the claim workflow and reporting is bespoke.
Delivery runs on a staging copy of your database first. You get the installable source for your exact Odoo version, a UAT pass where your commercial team runs real claims through the workflow, and a documented rollback before we touch production. After go-live you have a support window for defect fixes, and the git repository is handed to you — the code is yours, so you are never locked to us for the next change.
Owns the certified number. Needs cumulative claim, retention held and back-charges computed from one source so the payment certificate can be issued the same day it is assessed, and needs an over-claim ceiling that cannot be argued around at final account.
Chases insurance certificates, licences and tax clearances across dozens of trades. Needs a register with expiry dates, automated escalation, and a hard gate that stops a payment going out to a subcontractor whose public liability cover lapsed last month.
Needs retention sitting in a real liability account, back-charges posted against their own codes, and vendor bills created through Odoo's own accounting API so aged payables, the project P&L and the trial balance agree without a monthly reconciliation.
Owns the Odoo estate and the upgrade path. Wants Community-only hard dependencies, clean `ir.model.access.csv` and record rules, no core model patching, a documented RPC surface, and the git repository in hand so the module survives the next major version.
| 标准 | 伊科西尔 | 定制建造 | 竞争对手 | Odoo 原生 |
|---|---|---|---|---|
| Progress claim certification | Assess and certify as separate guarded states; certified amount computed from schedule of values, retention and back-charges | Achievable, but the computed fields and workflow guards are the bulk of the build effort you pay for | Usually a single-step claim record with a manually entered certified amount | No claim concept; a purchase order bills against receipt quantities |
| Retention handling | Per-subcontract retention ledger with split release triggers, posted to a dedicated liability account | Depends entirely on whether your developer models the release triggers, not just the held percentage | Often a percentage field with no ledger and no release workflow | None — retention ends up as a manual journal entry or a spreadsheet |
| Back-charges | Typed categories posting as negative bill lines against their own accounts, with an audit trail | Commonly deferred to phase two and never built | Rarely covered; deductions are a free-text discount line | Manual credit note or an ad-hoc bill line with no category reporting |
| Compliance documents | Typed register with expiry dates, nightly cron escalation and a hard gate on certification | Buildable, but the escalation cron and the payment gate are usually cut for budget | Attachment list with no expiry logic or payment enforcement | Generic chatter attachments on the partner, no dates, no enforcement |
| Accounting integration | Bills created through the standard `account.move` API with analytic distribution — no shadow ledger | Quality varies; direct SQL or duplicate tracking tables are a common shortcut | Usually posts correctly but often ignores analytic distribution to the project | Standard vendor bills, but with no subcontract context to post against |
| Security and segregation of duties | Dedicated groups in `ir.model.access.csv` plus `ir.rule` record rules separating assess from certify | Frequently ships with a single group and view-level `invisible` attrs only | Typically one manager group for the whole module | Purchase user and manager groups, which do not map to assess-versus-certify |
| Version support and upgrade path | Built for your exact 17.0, 18.0 or 19.0; Community-only hard dependencies; no core model patching | Upgrade cost depends on whether the original developer inherited cleanly or patched core | Version support varies by author; abandoned modules block your next upgrade | Upgrades with Odoo, but the functionality is not there to upgrade |
| Ownership and extensibility | Git repository handed over with full history; documented RPC surface for site apps and BI | You own it, but documentation and a clean integration surface are rarely part of the quote | Obfuscated or licence-keyed code in many cases; extension means forking blind | Fully open, but you are building the whole feature yourself |
This is a build-to-order module, not an instant download. Typical delivery is 2–4 weeks from confirmed scope. The clock starts when the written specification from the scoping call is signed off, not when the quote is accepted — retention rules, back-charge categories, document types and account codes all need to be pinned first, because those are what vary between builders.
You get a post-go-live support window for defect fixes against the delivered scope, and the full git repository is handed to you so nothing is locked behind us. Version upgrades (for example carrying the module from Odoo 18.0 to 19.0) and new functionality beyond the signed scope are quoted separately as change requests. Because we build against Community dependencies and avoid patching core models, upgrades are usually a small piece of work rather than a rewrite.
Community is enough. The hard dependencies in `__manifest__.py` are Purchase, Accounting and Analytic, all available in Community. If you run Enterprise we wire optional integrations — Documents for compliance file storage, Sign for subcontract execution, Approvals for the certification chain — behind soft dependencies, so the same codebase installs cleanly on either edition.
A `purchase.order` models goods delivered against a receipt. A subcontract package is a contractual entitlement claimed progressively against a schedule of values, reduced by retention and back-charges, and certified by a named person. Core Odoo has no cumulative-claim field, no retention ledger, no back-charge concept and no certification workflow, so builders end up with the real numbers in a spreadsheet. This module keeps the contractual layer in Odoo and still posts through the standard `account.move` API, so nothing is duplicated.
Yes, optionally. We can expose a portal view where each trade enters claimed quantities against their own schedule-of-values lines; the claim arrives in your database as `submitted` and enters your assessment and certification workflow untouched. Record rules restrict every subcontractor to their own records. If you prefer claims to arrive by email or PDF and be keyed in by your contracts administrator, we scope it that way instead.
On certification the module creates a vendor bill through Odoo's standard accounting API. The gross certified amount posts to the expense or work-in-progress account with the project's analytic distribution, retention posts as a credit to a dedicated retention-held liability account, and each back-charge posts as a negative line against its own account. Retention release later generates its own bill and clears the liability, so the retention balance on your balance sheet always equals the sum of the per-subcontract retention ledgers.
Yes — variations adjust the approved contract value and therefore the over-claim ceiling, with the change recorded on the subcontract chatter for audit. Provisional sums can be carried as separate schedule-of-values lines that are claimed against once the actual scope is instructed. The exact approval path for a variation is one of the things we pin down at the scoping call, because it differs between a two-person builder and a tier-one contractor.
A build-to-order Odoo module that turns subcontract packages into governed work orders with certified progress claims, retention ledgers, back-charges and a compliance document register. ECOSIRE scopes, builds, installs and supports it on your Odoo 17, 18 or 19 database.