Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Purchasing
  3. Purchase Contracts v 19.0
  4. Sales Conditions FAQ

Purchase Contracts

by Grevlin Global Corp. https://www.grevlin.com
Odoo

$ 149.28

v 19.0 Third Party
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Purchase (purchase)
• Invoicing (account)
Lines of code 2474
Technical Name grev_od_purchase_contracts
LicenseOPL-1
Websitehttps://www.grevlin.com
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Purchase (purchase)
• Invoicing (account)
Lines of code 2474
Technical Name grev_od_purchase_contracts
LicenseOPL-1
Websitehttps://www.grevlin.com
  • Description
  • Documentation
  • License

📄 Purchase Contracts

Full Contract Lifecycle Management — Amendments, SLA Tracking, Risk Scoring, Disputes & OWL Dashboard

✓  Odoo 19.0 Community and Enterprise  |  OPL-1 License

🎯 Value Proposition

Purchase Contracts extends Odoo’s native purchase agreements into a full Contract Lifecycle Management platform. Govern amendments with diff capture and multi-level routing, track milestones and obligations, score contract risk algorithmically across five dimensions, manage disputes to resolution, and monitor SLA performance with monthly snapshots — all surfaced through a real-time OWL KPI dashboard.

📊

Algorithmic Risk Score

5-dimension scoring across SLAs, compliance, disputes, expiry & supplier risk

⏳

Zero Missed Renewals

Configurable notice periods, auto-renewal cron, and expiry countdown widget

💰

Full Audit Governance

Every amendment, approval, and state change captured with chatter tracking

🌟 Key Benefits

📋

Governed Amendment Workflow

Every contract change goes through a formal amendment record — before/after diff, approval routing, and automatic version increment on apply. Full chatter audit trail on every transition.

🔒

Rule-Based Approval Routing

Configure routing rules by value threshold, product category, or supplier risk level. Each rule assigns procurement, legal, or finance approvers — individually or by group — in configurable sequence.

📊

Algorithmic Risk Scoring

Risk score (0–100) weighted across five dimensions: SLA performance (25%), compliance status (20%), open disputes (20%), expiry proximity (15%), and supplier risk level (20%). Surfaced on every contract and aggregated on the dashboard.

🔔

Proactive Expiry & Renewal

Countdown widget on the contract form, configurable notice periods, daily cron alerts, and automatic renewal with max-renewal cap. Auto-renewal optionally commits the budget on activation.

⚙ Core Features

📄 Contract Lifecycle Management

  • Extends native purchase.requisition
  • States: draft → under review → active → expired
  • Contract templates with default terms
  • Multi-company record rules throughout
  • Version number auto-increments on amendment apply

✅ Amendment & Approval Workflow

  • Formal amendment records with old/new diff
  • Types: term change, value, date extension, scope
  • Approval routing: procurement / legal / finance
  • Condition-based routing rules (value, category, risk)
  • Full chatter tracking on all state transitions

📅 Milestones & Obligations

  • Milestone types: payment, delivery, acceptance, inspection
  • State computed from due date vs completion date
  • Obligation register with recurrence logic (monthly / quarterly / annually)
  • Next due date computed automatically
  • Daily cron alerts for overdue items

🛡 SLA Tracking & Performance History

  • SLA metrics: delivery time, quality rate, response time, fill rate, defect rate
  • State: met / at-risk / breached (computed)
  • Penalty clauses linked to SLA breaches
  • Monthly auto-snapshots of SLA actuals
  • Full performance history per SLA line

📝 Dispute & Claim Management

  • Dispute types: pricing, delivery, quality, quantity, payment, scope
  • Workflow: open → under review → resolved / escalated → closed
  • Claimed vs settled amount tracking
  • Resolution types: credit note, replacement, discount, rejected
  • Linked to purchase orders and SLA records

🔗 OWL Dashboard & SQL Report

  • Real-time KPI dashboard: active contracts, expiring soon, avg risk score
  • Pipeline banner by state with total values
  • Activity feed, upcoming milestones, top suppliers by risk
  • SQL performance report: pivot & graph by vendor / risk level / state
  • Expiry countdown field widget on contract form

👥 Who Is This For?

💼

Contract & Procurement Managers

Own the full contract lifecycle — create, route for approval, track amendments, monitor milestones, and receive early expiry alerts with one clear dashboard.

⚖

Legal & Finance Teams

Act as designated approvers on routing rules. Review amendment diffs, approve high-value contracts, and monitor dispute resolution — all within Odoo.

📦

Compliance Officers

Read-only access to contract terms, SLA status, obligation completion evidence, and the algorithmic risk score — feeding directly into downstream compliance checks.

🗒 Changelog

Version 2.0.0 — March 2026

Full CLM Platform — Major Release

  • Amendment workflow with before/after diff, approval routing, and version increment
  • Dispute & claim management: 7 dispute types, resolution workflow, settled amount tracking
  • Obligation register with monthly/quarterly/annual recurrence and next-due-date computation
  • Milestone tracker: 6 types, computed state (pending/in-progress/completed/overdue)
  • SLA performance history: monthly cron auto-snapshots of actuals vs targets
  • Algorithmic risk scoring (0–100) across 5 weighted dimensions
  • OWL KPI dashboard with pipeline banner, activity feed, and supplier risk view
  • SQL performance report (pivot + graph) via grev.contract.performance.report
  • Expiry countdown field widget (contract_countdown)
  • Rule-based approval routing: value threshold, category, and supplier risk conditions
  • Soft budget commitment integration on contract activation
  • 5 scheduled cron jobs covering expiry, renewal, milestones, obligations, and SLA snapshots

Version 1.0.0 — January 2026

Initial Release

  • Contract repository extending purchase.requisition with CLM fields
  • Multi-level approval workflow engine (procurement / legal / finance)
  • Renewal and expiry management with configurable notice periods
  • Contract versioning and basic amendment tracking
  • SLA definition with met / at-risk / breached computation
  • Contract templates with default terms library
  • Three-tier security (User / Officer / Manager) with multi-company record rules
  • esourcing RFQ linkage via Many2many

📞 Need Help?

🎁 30 Days Free Support Included
📧

Email

odoo@grevlin.com
🐦

X (Twitter)

@GrevlinGlobal

Grevlin Procurement Suite

Enterprise-Grade Procurement Solutions for Odoo

© 2026 Grevlin Global Corp. All Rights Reserved.

Compatible with Odoo 19.0 | Licensed under OPL-1

Purchase Contracts

The Purchase Contracts module extends Odoo's native purchase agreements (purchase.requisition) into a full Contract Lifecycle Management (CLM) platform. It adds formal amendment governance, milestone and obligation tracking, dispute management, SLA performance history, algorithmic risk scoring, and a real-time OWL KPI dashboard — all anchored to the standard Odoo purchase agreement record.

Overview

This module provides a governed CLM layer on top of purchase.requisition. Rather than maintaining a separate contract model, every feature is applied directly to the native blanket/framework agreement so that existing Odoo purchase flows remain intact.

Key Capabilities

  1. Amendment Workflow — formal amendment records with before/after diff, multi-level approval routing, and automatic version increment on apply.
  2. Rule-Based Approval Routing — configurable rules by value threshold, product category, or supplier risk level that auto-populate approval chains.
  3. Milestone & Payment Schedule — sequenced milestones with computed states (pending / in-progress / completed / overdue) and analytic account support.
  4. Obligation Register — buyer/supplier contractual duties with monthly, quarterly, or annual recurrence and computed next-due dates.
  5. Dispute & Claim Management — full dispute lifecycle (open → under review → resolved / escalated → closed) with claimed and settled amount tracking.
  6. SLA Tracking & Performance History — SLA definitions per contract with monthly auto-snapshots of actuals vs targets.
  7. Algorithmic Risk Scoring — weighted score (0–100) across five dimensions: SLA performance, compliance status, open disputes, expiry proximity, and supplier risk.
  8. OWL KPI Dashboard — real-time pipeline banner, KPI cards, activity feed, upcoming milestones, and supplier risk overview.
  9. SQL Performance Report — grev.contract.performance.report (pivot + graph).
  10. Expiry Countdown Widget — contract_countdown field widget on the contract form.
  11. 5 Scheduled Crons — daily expiry alerts, daily auto-renewal, daily milestone/ obligation overdue checks, and monthly SLA auto-snapshots.

Note

Budget commitment and supplier risk integrations are soft dependencies — the module degrades gracefully if those modules are absent.

Configuration

Approval Routing Rules

Routing rules determine which approvers are required for a contract (and its amendments).

  1. Go to :menuselection:`Purchase --> Contracts --> Configuration --> Routing Rules`.
  2. Click :guilabel:`Create`.
  3. Set :guilabel:`Condition Type`:
    • Always — rule applies to every contract.
    • Value Threshold — applies when contract value falls within :guilabel:`Min Value` and :guilabel:`Max Value`.
    • Category — applies when the contract's product category matches :guilabel:`Product Category`.
    • Supplier Risk — applies when supplier risk level is medium, high, or critical (read from grev.supplier.intel if installed).
  4. Set :guilabel:`Approval Type` to Procurement, Legal, or Finance.
  5. Assign either a specific :guilabel:`Approver` or an :guilabel:`Approver Group` (one of the two is required).
  6. Set :guilabel:`Sequence` to control evaluation order.
  7. Click :guilabel:`Save`.

Important

At least one routing rule should cover the always condition to ensure every contract has at least one approver. Rules without a matching approver are skipped silently — verify your rule set by submitting a test contract.

Contract Templates

Templates pre-populate terms and default settings when applied to a contract.

  1. Go to :menuselection:`Purchase --> Contracts --> Configuration --> Templates`.
  2. Click :guilabel:`Create`.
  3. Select :guilabel:`Template Type` (framework / blanket / service / one-time).
  4. Set :guilabel:`Default Notice Period Days` and :guilabel:`Default Renewal Type`.
  5. Add default terms in the :guilabel:`Terms` tab.
  6. Click :guilabel:`Save`.

To apply a template to an open contract, open the contract, select the template in the :guilabel:`Template` field, and click :guilabel:`Apply Template`. Existing contract terms are not removed — template terms are appended.

Scheduled Actions

Five crons ship with the module. All are active by default.

Cron Frequency Purpose
Contract Expiry Check Daily Creates an activity on contracts expiring within their notice_period_days.
Contract Auto-Renew Daily Renews contracts where auto_renew = True, renewal date is reached, and renewal_count < max_renewals (0 = unlimited).
Milestone Overdue Check Daily Sets overdue milestones and creates activity alerts on the parent contract.
Obligation Overdue Check Daily Marks obligations past their due date as overdue and creates activity alerts.
SLA Performance Snapshot Monthly (1st) Auto-creates grev.purchase.contract.sla.record entries for all active contract SLAs.

Security Groups

The module defines three groups under grev_purchase_contracts:

Contract User (group_contract_user)

  • Read-only access to contracts, amendments, disputes, milestones, obligations, SLA records, and the performance report.
  • Cannot create or edit contract records.

Contract Officer (group_contract_officer)

  • Create and edit contracts, amendments, milestones, obligations, and disputes.
  • Cannot delete records.
  • Inherits Contract User permissions.

Contract Manager (group_contract_manager)

  • Full CRUD including delete on all contract models.
  • Can configure routing rules and templates.
  • Can directly activate contracts (bypassing approval when needed).
  • Inherits Contract Officer permissions.

Note

Multi-company record rules apply to all models using the pattern ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]. Child records (amendments, disputes, milestones, obligations, SLA records) inherit company_id from the parent contract via a stored related field.

Usage

Creating a Contract

  1. Navigate to :menuselection:`Purchase --> Contracts --> Contracts`.
  2. Click :guilabel:`Create`. This opens a new purchase.requisition record.
  3. Fill in the required fields:
    • :guilabel:`Contract Name` — descriptive reference.
    • :guilabel:`Vendor` — the supplier partner.
    • :guilabel:`Contract Value` — total ceiling value.
    • :guilabel:`Validity Start` / :guilabel:`Validity Stop` — contract period.
    • :guilabel:`Notice Period Days` — days before expiry to trigger the alert cron.
  4. Optionally select a :guilabel:`Template` and click :guilabel:`Apply Template` to pre-populate terms.
  5. Add :guilabel:`Terms`, :guilabel:`SLAs`, and :guilabel:`Penalties` in their tabs.
  6. Click :guilabel:`Submit for Review` to initiate the approval chain.

Submitting for Approval

Clicking :guilabel:`Submit for Review` calls action_submit_for_review(), which:

  1. Evaluates all active routing rules against the contract.
  2. Creates grev.purchase.contract.approval records for each matching rule.
  3. Moves the contract to state under_review.

Each approver sees their pending approval on the contract's :guilabel:`Approvals` tab. They click :guilabel:`Approve` or :guilabel:`Reject` (with optional comments). When all approval records are approved, the contract moves to active automatically and, if the budget module is installed, commits the budget.

Managing Amendments

  1. Open an active contract and click the :guilabel:`Amendments` smart button.
  2. Click :guilabel:`Create`.
  3. Set :guilabel:`Amendment Type` and fill in :guilabel:`Old Value` and :guilabel:`New Value` to capture the diff.
  4. Enter a mandatory :guilabel:`Reason`.
  5. Optionally link :guilabel:`Affected Terms`.
  6. Click :guilabel:`Submit` to route the amendment through its own approval chain (uses the same routing rules).
  7. Once all approvals pass, click :guilabel:`Apply`. This records the applied_date, the applied_by user, and increments the parent contract's version field.

Tip

Use the version badge on the contract form header to track how many amendments have been applied. The chatter records every increment automatically.

Tracking SLA Performance

  1. Open a contract and go to the :guilabel:`SLAs` tab.
  2. Add SLA lines for each metric (delivery time, quality rate, etc.) with a :guilabel:`Target Value`, :guilabel:`Unit`, and :guilabel:`Measurement Period`.
  3. Update :guilabel:`Actual Value` on each SLA line as measurements come in. The state field (met / at-risk / breached) recomputes automatically.
  4. On the first day of each month the cron creates a snapshot grev.purchase.contract.sla.record capturing the current actual vs target. View history via :menuselection:`Purchase --> Contracts --> SLA Records`.

Managing Disputes

  1. From a contract form, click the :guilabel:`Disputes` smart button.
  2. Click :guilabel:`Create`, select :guilabel:`Dispute Type`, and enter a :guilabel:`Description` (Html field).
  3. Optionally link a :guilabel:`Related Purchase Order` and enter :guilabel:`Claimed Amount`.
  4. Workflow actions on the dispute form:
    • :guilabel:`Start Review` → under_review
    • :guilabel:`Escalate` → escalated
    • :guilabel:`Resolve` → requires :guilabel:`Resolution Type` and :guilabel:`Settled Amount`
    • :guilabel:`Close` → closed

Reading the Risk Score

The risk_score (0–100) is computed automatically and stored on the contract. It updates whenever the underlying data changes.

Dimension Weight Source
SLA Performance 25% Ratio of breached/at-risk SLAs to total SLAs.
Compliance Status 20% compliance_status field (set by compliance module or manually).
Open Disputes 20% open_dispute_count smart button count.
Expiry Proximity 15% Days remaining vs notice_period_days.
Supplier Risk Level 20% supplier_risk_level (read from grev.supplier.intel if installed).

risk_level bands: Low (0–33) · Medium (34–66) · High (67–100).

Technical Details

Data Model

Model Type Description
purchase.requisition Extended Core contract record; all CLM fields added here.
grev.purchase.contract.approval Model Per-step approval records for contracts and amendments.
grev.purchase.contract.template Model Template with default terms and renewal settings.
grev.purchase.contract.term Model + analytic.mixin Term/clause lines (attached to contract or template).
grev.purchase.contract.sla Model SLA definition per contract.
grev.purchase.contract.penalty Model Penalty clause linked to contract/SLA.
grev.purchase.contract.routing.rule Model Routing rules for auto-populating approval chains.
grev.purchase.contract.amendment Model + mail.thread Amendment records with sub-approval workflow.
grev.purchase.contract.milestone Model + analytic.mixin Milestone and payment schedule lines.
grev.purchase.contract.obligation Model Obligation register with recurrence logic.
grev.purchase.contract.dispute Model + mail.thread Dispute and claim records.
grev.purchase.contract.sla.record Model Monthly SLA performance snapshots.
grev.contract.performance.report SQL view Read-only performance report (pivot + graph).

OWL Components

Two OWL frontend components are registered:

contract_dashboard (ir.actions.client)
Loaded via :menuselection:`Purchase --> Contracts --> Dashboard`. Calls purchase.requisition.get_dashboard_data() to retrieve KPIs, pipeline counts, recent activity, upcoming milestones, and top suppliers by risk.
contract_countdown (field widget)
Registered in registry.category("fields"). Displayed on the contract form's expiry date field. Renders a visual countdown in days.

Assets are declared in __manifest__.py under assets.web.assets_backend.

Troubleshooting

Contract Stays in Draft After Submission

Symptom: :guilabel:`Submit for Review` appears to do nothing.

Checks:

  1. Verify all required fields are filled (vendor, validity dates, contract value).
  2. Confirm at least one active routing rule exists that matches the contract's value/category/risk profile.
  3. Check that the routing rule has a valid approver_id or approver_group_id (the _check_approver constraint will warn at save time if both are missing).

Approval Notifications Not Arriving

Symptom: Assigned approvers do not receive email notifications.

Checks:

  1. Verify the Odoo outgoing mail server is configured and active.
  2. Confirm approvers have valid email addresses on their res.users record.
  3. Check that the chatter mail.thread tracking is enabled on the contract (it is by default; do not disable).

Risk Score Not Updating

Symptom: risk_score shows 0 despite breached SLAs or open disputes.

Checks:

  1. The field is compute + store=True. Trigger a manual write on the contract (e.g., save a note) to force recomputation, or run purchase.requisition._compute_risk_score() directly from a shell.
  2. If supplier_risk_level shows low unexpectedly, confirm that grev_od_purchase_intel is installed and the supplier has an intel record.

SLA Snapshots Not Created

Symptom: No grev.purchase.contract.sla.record entries appear after the 1st of the month.

Checks:

  1. Confirm the SLA Performance Snapshot scheduled action is active and its next execution date is set correctly.
  2. Verify contracts are in active state — the cron skips non-active contracts.
  3. Check Odoo server logs for cron execution errors.

See Also

Related Modules

  • grev_od_purchase_intel — optional; populates supplier_risk_level on the contract's risk score computation.
  • grev_od_purchase_budget_control — optional; receives the budget commitment call from action_activate().
  • grev_od_purchase_compliance — downstream consumer of compliance_status and contract terms.
  • grev_od_spend_analytics — downstream consumer of utilization and coverage figures.

External References

  • Odoo Purchase Agreements documentation
Odoo Proprietary License v1.0

This software and associated files (the "Software") may only be used (executed,
modified, executed after modifications) if you have purchased a valid license
from the authors, typically via Odoo Apps, or if you have received a written
agreement from the authors of the Software (see the COPYRIGHT file).

You may develop Odoo modules that use the Software as a library (typically
by depending on it, importing it and using its resources), but without copying
any source code or material from the Software. You may distribute those
modules under the license of your choice, provided that this license is
compatible with the terms of the Odoo Proprietary License (For example:
LGPL, MIT, or proprietary licenses similar to this one).

It is forbidden to publish, distribute, sublicense, or sell copies of the Software
or modified copies of the Software.

The above copyright notice and this permission notice must be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author or have a question related to your purchase, please use the support page.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with