diff --git a/.claude/board/AGENT_LOG.md b/.claude/board/AGENT_LOG.md index 17e24afd..d8b83feb 100644 --- a/.claude/board/AGENT_LOG.md +++ b/.claude/board/AGENT_LOG.md @@ -1,3 +1,15 @@ +## 2026-06-18 — #526 follow-up: corpus regenerated with inherits_from + validation_kind + +**Main thread (Opus) — single implementer**, branch `claude/odoo-spo-corpus-regen`. Executes the explicit pending step from PR #526 ("Corpus regenerated against live `/home/user/odoo/addons` — pending next session with Odoo source"). This session HAS the Odoo source, so the two new enrichment passes #526 shipped as code now land their triples in the shipped corpus. + +**Regenerated:** `python3 -m odoo_blueprint_extractor.spo_enrich --corpus odoo_ontology.spo.ndjson --addons /home/user/odoo/addons`. Additive + `(s,p,o)`-idempotent: P1/P0 emitted 0 new (already present — confirms #525's `inherit[0]` fix + multi-emitter lifts are baked in), `inherits_from`=166 new, `validation_kind`=247 new. **24 166 → 24 579.** + +**Rust (`odoo_ontology.rs`):** count assertion `24_166`→`24_579`; histogram gains `inherits_from`=166 + `validation_kind`=247 asserts; module-doc provenance + count updated. 2 new regression tests: `enrichment_emits_inherits_from_to_declared_base` (account_account→mail_thread; every base is a declared ObjectType; no self-loop) and `enrichment_emits_validation_kind_on_constrains_method` (_check_account_code=format; every object ∈ {presence,uniqueness,range,format,lookup}). validation_kind distribution: presence 108 / range 80 / lookup 31 / uniqueness 18 / format 10. + +**Tests:** `cargo test -p lance-graph --lib odoo_ontology` 13/13 green; `cargo fmt -p lance-graph --check` clean; `python3 -m unittest tests.test_spo_enrich` 41/41 (unchanged — no Python edit this round). + +**Consumer:** `od_ontology::RecomputeDag` + a future `ClassView` MRO walk now see the 166 inheritance edges; odoo-rs `UPSTREAM_WISHLIST` P1 (`_inherit`/`_inherits`) + P2 (`validation_kind`) are upstream-RESOLVED once a consumer PR consumes them (no odoo-rs change here — one-way pull). + ## 2026-06-18 — PR #525 follow-up: `_inherit`-only binding scoped to `inherit[0]` **Main thread (Opus) — single implementer**, branch `claude/odoo-spo-fk-target-deep-reads`. Addresses the one unresolved codex P2 on #525: the prior `_inherit`-only fix bound a no-`_name` class's relational fields to the WHOLE `_inherit` list, so a multi-element `_inherit = ['a','b']` would attach local fields to every inherited mixin and let `build_relation_map()` emit bogus `target`/`reads_field` triples for secondary parents. diff --git a/crates/lance-graph/src/graph/spo/odoo_ontology.rs b/crates/lance-graph/src/graph/spo/odoo_ontology.rs index 709a38b2..a65dea51 100644 --- a/crates/lance-graph/src/graph/spo/odoo_ontology.rs +++ b/crates/lance-graph/src/graph/spo/odoo_ontology.rs @@ -70,15 +70,19 @@ //! //! Data file `odoo_ontology.spo.ndjson` carries the base extraction (388 //! Object Types, 3 107 Properties, 3 328 Functions) plus the `spo_enrich` -//! P1/P0 layer (842 `target` + 144 `inverse_name` + 935 deep `reads_field`), -//! for 24 166 triples total. The `target`/`inverse_name`/deep-read totals grew +//! P1/P0 layer (842 `target` + 144 `inverse_name` + 935 deep `reads_field`) +//! and the P1b/P2 layer (166 `inherits_from` + 247 `validation_kind`), for +//! 24 579 triples total. The `target`/`inverse_name`/deep-read totals grew //! over the initial enrichment (618/102/736) once `spo_enrich` (a) honored //! `_inherit`-only extension classes — `_inherit = "account.move"` with no //! `_name`, the common Odoo extension form whose relational fields were //! previously dropped — and (b) lifted each deep `reads_field` onto EVERY //! emitter of the dependent field, not just the last (a field such as //! `stock_move.quantity` is emitted by both `_compute_quantity` and -//! `_onchange_product_uom_qty`). The base extraction's original generator +//! `_onchange_product_uom_qty`). `inherits_from` (ruff#19 shape) carries +//! `_inherit`/`_inherits` bases that are themselves corpus-declared +//! ObjectTypes; `validation_kind` (ruff#21 shape) classifies each +//! `@api.constrains` method body. The base extraction's original generator //! (`emit_ontology2.py` over a `methods.parquet`) is not present in this //! tree — only its output is — so the enrichment is applied over the shipped //! corpus + the Odoo source via @@ -155,9 +159,10 @@ mod tests { #[test] fn parses_all_triples() { let triples = parse_triples(ONTOLOGY); - // 22 245 base triples + 1 921 spo_enrich triples (842 target + - // 144 inverse_name + 935 deep reads_field) = 24 166. - assert_eq!(triples.len(), 24_166, "triple count drifted from data file"); + // 22 245 base triples + 1 921 spo_enrich P1/P0 triples (842 target + + // 144 inverse_name + 935 deep reads_field) + 413 P1b/P2 triples + // (166 inherits_from + 247 validation_kind) = 24 579. + assert_eq!(triples.len(), 24_579, "triple count drifted from data file"); } #[test] @@ -194,6 +199,10 @@ mod tests { assert_eq!(hist.get("inverse_name"), Some(&144)); // reads_field grew from 2 095 (base) to 3 030 with 935 deep lifts. assert_eq!(hist.get("reads_field"), Some(&3030)); + // spo_enrich P1b/P2 layer: inherits_from (ruff#19) + validation_kind + // (ruff#21), regenerated against /home/user/odoo/addons (#526 follow-up). + assert_eq!(hist.get("inherits_from"), Some(&166)); + assert_eq!(hist.get("validation_kind"), Some(&247)); assert_eq!(hist.get("other"), None, "unexpected predicate kind"); } @@ -437,4 +446,62 @@ mod tests { _inherit='account.move' extension) must resolve to payment.transaction" ); } + + /// `spo_enrich` P1b `inherits_from` (ruff#19 shape) — a model that mixes in + /// `mail.thread` carries an `inherits_from` edge to the base, and the base + /// is itself a corpus-declared ObjectType (the enrichment never invents an + /// edge to an unknown base). No self-inherits (`_inherit == _name`). + #[test] + fn enrichment_emits_inherits_from_to_declared_base() { + let triples = parse_triples(ONTOLOGY); + let edge = triples.iter().any(|t| { + t.s == "odoo:account_account" && t.p == "inherits_from" && t.o == "odoo:mail_thread" + }); + assert!( + edge, + "P1b: account_account must inherits_from mail_thread (mixin base)" + ); + + // Every inherits_from base is a declared ObjectType, and no edge is a + // self-loop (the Odoo extend-in-place idiom is dropped at scan time). + let object_types: std::collections::HashSet<&str> = triples + .iter() + .filter(|t| t.p == "rdf:type" && t.o == "ogit:ObjectType") + .map(|t| t.s.as_str()) + .collect(); + for t in triples.iter().filter(|t| t.p == "inherits_from") { + assert_ne!(t.s, t.o, "inherits_from must never be a self-loop"); + assert!( + object_types.contains(t.o.as_str()), + "inherits_from base {} must be a declared ObjectType", + t.o + ); + } + } + + /// `spo_enrich` P2 `validation_kind` (ruff#21 shape) — an `@api.constrains` + /// method is classified by AST pattern; the subject is the METHOD IRI and + /// every object is one of the five recognised kinds. + #[test] + fn enrichment_emits_validation_kind_on_constrains_method() { + let triples = parse_triples(ONTOLOGY); + let classified = triples.iter().any(|t| { + t.s == "odoo:account_account._check_account_code" + && t.p == "validation_kind" + && t.o == "format" + }); + assert!( + classified, + "P2: _check_account_code must be classified validation_kind=format" + ); + + const KINDS: [&str; 5] = ["presence", "uniqueness", "range", "format", "lookup"]; + for t in triples.iter().filter(|t| t.p == "validation_kind") { + assert!( + KINDS.contains(&t.o.as_str()), + "validation_kind object {} not in the recognised set", + t.o + ); + } + } } diff --git a/crates/lance-graph/src/graph/spo/odoo_ontology.spo.ndjson b/crates/lance-graph/src/graph/spo/odoo_ontology.spo.ndjson index a22a35d5..e5f1f290 100644 --- a/crates/lance-graph/src/graph/spo/odoo_ontology.spo.ndjson +++ b/crates/lance-graph/src/graph/spo/odoo_ontology.spo.ndjson @@ -24164,3 +24164,416 @@ {"s":"odoo:website_visitor.product_ids","p":"target","o":"product.product","f":0.95,"c":0.9} {"s":"odoo:website_visitor.website_track_ids","p":"inverse_name","o":"visitor_id","f":0.95,"c":0.9} {"s":"odoo:website_visitor.website_track_ids","p":"target","o":"website.track","f":0.95,"c":0.9} +{"s":"odoo:account_account","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:account_account","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:account_account._check_account_code","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:account_account._check_account_type_sales_purchase_journal","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_account._check_company_consistency","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_account._check_company_consistency","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_account._check_company_consistency","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:account_account._check_journal_consistency","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:account_account._check_journal_consistency","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_account._check_reconcile","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_analytic_account","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:account_analytic_distribution_model","p":"inherits_from","o":"odoo:analytic_mixin","f":0.95,"c":0.9} +{"s":"odoo:account_bank_statement_line","p":"inherits_from","o":"odoo:account_move","f":0.95,"c":0.9} +{"s":"odoo:account_bank_statement_line._check_amounts_currencies","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_cash_rounding.validate_rounding","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_journal","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:account_journal","p":"inherits_from","o":"odoo:mail_alias_mixin_optional","f":0.95,"c":0.9} +{"s":"odoo:account_journal","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:account_journal._check_afip_pos_number","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_journal._check_auto_post_draft_entries","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:account_journal._check_auto_post_draft_entries","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_journal._check_company_consistency","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:account_journal._check_fik_creditor_number","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_journal._check_l10n_se_invoice_ocr_length","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_journal._check_payment_method_line_ids_multiplicity","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_journal._check_type","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:account_journal.check_use_document","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:account_move","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:account_move","p":"inherits_from","o":"odoo:sequence_mixin","f":0.95,"c":0.9} +{"s":"odoo:account_move._check_expense_ids","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_move._check_invoice_currency_rate","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_move._check_l10n_latam_document_number_is_numeric","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:account_move._check_l10n_latam_documents","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_move._require_bill_date_for_autopost","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_move_line","p":"inherits_from","o":"odoo:analytic_mixin","f":0.95,"c":0.9} +{"s":"odoo:account_move_line._check_caba_non_caba_shared_tags","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_move_line._check_l10n_tr_ctsp_number","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_move_line._constrains_deductible_amount","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_move_line._constrains_matching_number","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:account_move_line._constrains_matching_number","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_partial_reconcile._check_required_computed_currencies","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_payment","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:account_payment._check_move_id","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_payment._check_payment_method_line_id","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_payment._constrains_check_number_unique","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:account_payment._constrains_check_number_unique","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_payment_register_withholding_line","p":"inherits_from","o":"odoo:account_withholding_line","f":0.95,"c":0.9} +{"s":"odoo:account_payment_term._check_lines","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_payment_withholding_line","p":"inherits_from","o":"odoo:account_withholding_line","f":0.95,"c":0.9} +{"s":"odoo:account_reconcile_model","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:account_report._validate_availability_condition","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_tax","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:account_tax._check_company_consistency","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:account_tax._constrains_cash_basis_transition_account","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_tax._constrains_name","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:account_tax._l10n_sa_constrain_is_retention","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_tax._validate_repartition_lines","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_tax._validate_repartition_lines","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_tax._validate_withholding","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:account_tax._validate_withholding","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:account_withholding_line","p":"inherits_from","o":"odoo:analytic_mixin","f":0.95,"c":0.9} +{"s":"odoo:account_withholding_line._constrains_base_amount","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:barcode_rule._check_pattern","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:barcode_rule._check_pattern","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:base_automation","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:base_automation","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:base_automation._check_time_trigger","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:base_automation._check_trigger","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:calendar_event","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:calendar_event._check_closing_date","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:calendar_event._check_closing_date","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:card_campaign","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:card_campaign","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:chatbot_script._check_question_selection","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:crm_lead","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:crm_lead","p":"inherits_from","o":"odoo:mail_thread_blacklist","f":0.95,"c":0.9} +{"s":"odoo:crm_lead","p":"inherits_from","o":"odoo:mail_thread_phone","f":0.95,"c":0.9} +{"s":"odoo:crm_lead","p":"inherits_from","o":"odoo:mail_tracking_duration_mixin","f":0.95,"c":0.9} +{"s":"odoo:crm_team","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:crm_team._constrains_assignment_domain","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:crm_team_member","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:crm_team_member._constrains_assignment_domain","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:crm_team_member._constrains_assignment_domain_preferred","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:crm_team_member._constrains_membership","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:crm_team_member._constrains_membership","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:crm_team_member._constrains_membership","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:delivery_carrier._check_in_store_dm_has_warehouses_when_published","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:discuss_channel","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:discuss_channel","p":"inherits_from","o":"odoo:rating_mixin","f":0.95,"c":0.9} +{"s":"odoo:discuss_channel._constraint_partners_chat","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:event_booth","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:event_booth","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:event_event","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:event_event","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:event_event._check_closing_date","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:event_event._check_slots_dates","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:event_event._check_slots_dates","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:event_event_ticket","p":"inherits_from","o":"odoo:event_type_ticket","f":0.95,"c":0.9} +{"s":"odoo:event_registration","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:event_registration","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:event_registration._check_event_slot","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:event_slot._check_hours","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:event_slot._check_time_range","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:event_sponsor","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:event_sponsor","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:event_track","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:event_track","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:fetchmail_server._check_use_google_gmail_service","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:fetchmail_server._check_use_microsoft_outlook_service","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:fleet_vehicle","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:fleet_vehicle","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:fleet_vehicle_log_contract","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:fleet_vehicle_log_contract","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:fleet_vehicle_log_services","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:fleet_vehicle_log_services","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:fleet_vehicle_model","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:fleet_vehicle_model","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:forum_forum","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:forum_post","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:forum_tag","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:gamification_badge","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:gamification_challenge","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:hr_applicant","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_applicant","p":"inherits_from","o":"odoo:mail_thread_blacklist","f":0.95,"c":0.9} +{"s":"odoo:hr_applicant","p":"inherits_from","o":"odoo:mail_thread_phone","f":0.95,"c":0.9} +{"s":"odoo:hr_applicant","p":"inherits_from","o":"odoo:mail_tracking_duration_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_applicant._check_talent_pool_required","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_attendance","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:hr_attendance._check_validity","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:hr_attendance._check_validity","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_attendance._check_validity","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_attendance._check_validity_check_in_check_out","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_attendance_overtime_rule._check_expected_hours","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_attendance_overtime_rule._check_work_schedule","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_department","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_department","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:hr_employee","p":"inherits_from","o":"odoo:hr_version","f":0.95,"c":0.9} +{"s":"odoo:hr_employee","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_employee._check_salary_distribution","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_employee._check_salary_distribution","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_employee._verify_barcode","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:hr_employee._verify_barcode","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_expense","p":"inherits_from","o":"odoo:analytic_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_expense","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_expense._check_o2o_payment","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_expense_split","p":"inherits_from","o":"odoo:analytic_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_individual_skill_mixin._check_date","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_job","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_job","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:hr_leave","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_leave._check_contracts","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_leave._l10n_in_check_optional_holiday_request_dates","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_leave_allocation","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_leave_allocation","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:hr_leave_allocation._check_date_from_date_to","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_leave_type._check_elligible_for_accrual_rate","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_leave_type._check_overlapping_public_holidays","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:hr_leave_type._check_overlapping_public_holidays","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_leave_type.check_allocation_requirement_edit_validity","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:hr_skill_type._check_no_null_skill_or_skill_level","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_version","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:hr_version","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:hr_version._check_dates","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:hr_version._check_dates","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_work_entry._check_duration","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:hr_work_entry_type._check_code_unicity","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:hr_work_entry_type._check_work_entry_type_country","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:iap_account","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:iap_account.validate_warning_alerts","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:iap_account.validate_warning_alerts","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:im_livechat_channel","p":"inherits_from","o":"odoo:rating_parent_mixin","f":0.95,"c":0.9} +{"s":"odoo:im_livechat_channel._check_review_link","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:ir_actions_server","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:ir_actions_server","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:ir_mail_server._check_use_google_gmail_service","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:ir_mail_server._check_use_microsoft_outlook_service","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:l10n_ar_partner_tax.check_partner_tax_dates","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:l10n_br_zip_range._check_range","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:l10n_in_ewaybill","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:l10n_in_ewaybill","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:l10n_in_pan_entity","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:l10n_in_pan_entity","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:l10n_latam_check","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:l10n_latam_check","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:l10n_latam_check._constrains_min_amount","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:link_tracker._check_unicity","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:link_tracker._check_unicity","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:loyalty_card","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:loyalty_card._contrains_code","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:loyalty_program._check_date_from_date_to","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:loyalty_program._constrains_reward_ids","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:loyalty_rule._constrains_code","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:lunch_order._check_topping_quantity","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:lunch_product._check_active_categories","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:lunch_product._check_active_suppliers","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:lunch_supplier","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:lunch_supplier","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mail_activity_plan._check_compatibility_with_model","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_activity_plan_template._check_responsible","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_activity_type._check_activity_type_res_model","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:mail_alias._check_alias_domain_id_mc","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:mail_alias._check_alias_domain_id_mc","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_alias_domain._check_bounce_catchall_uniqueness","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:mail_alias_domain._check_bounce_catchall_uniqueness","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_group._check_access_mode","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_group._check_moderation_guidelines","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_group._check_moderation_notify","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_group._check_moderator_email","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_group._check_moderator_existence","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mail_mail","p":"inherits_from","o":"odoo:mail_message","f":0.95,"c":0.9} +{"s":"odoo:mail_scheduled_message._check_scheduled_date","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:mail_test_ticket","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mail_thread_blacklist","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mail_thread_phone","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mail_tracking_duration_mixin","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mailing_contact","p":"inherits_from","o":"odoo:mail_thread_blacklist","f":0.95,"c":0.9} +{"s":"odoo:mailing_contact","p":"inherits_from","o":"odoo:mail_thread_phone","f":0.95,"c":0.9} +{"s":"odoo:mailing_filter._check_mailing_domain","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:mailing_mailing","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:mailing_mailing","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mrp_bom","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mrp_bom._check_bom_cycle","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:mrp_bom._check_bom_cycle","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mrp_bom._check_bom_lines","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:mrp_bom._check_bom_lines","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:mrp_bom._check_valid_batch_size","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:mrp_bom.check_kit_has_not_orderpoint","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:mrp_production","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:mrp_production","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mrp_production._check_byproducts","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:mrp_production._check_lot_producing_ids","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:mrp_unbuild","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:mrp_unbuild","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:mrp_workcenter","p":"inherits_from","o":"odoo:analytic_mixin","f":0.95,"c":0.9} +{"s":"odoo:mrp_workcenter","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:myinvois_document","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:myinvois_document","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:myinvois_document","p":"inherits_from","o":"odoo:sequence_mixin","f":0.95,"c":0.9} +{"s":"odoo:onboarding_onboarding_step.check_step_on_onboarding_has_action","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:payment_capture_wizard._check_amount_to_capture_within_boundaries","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:payment_provider._check_available_country_currency_ids","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:payment_provider._check_currency_is_supported","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:payment_provider._check_mercado_pago_credentials_are_set_before_allowing_tokenization","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:payment_provider._check_mercado_pago_credentials_are_set_before_enabling","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:payment_provider._check_razorpay_credentials_are_set_before_enabling","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:payment_provider._limit_available_currency_ids","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:payment_refund_wizard._check_amount_to_refund_within_boundaries","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:payment_transaction._check_state_authorized_supported","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:payment_transaction._check_token_is_active","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:pos_category._check_hour","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:pos_config._check_adyen_ask_customer_for_tip","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:pos_config._check_company_payment","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:pos_config._check_default_user","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:pos_config._check_online_payment_methods","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:pos_config._check_payment_method_ids_journal","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:pos_config._check_payment_method_ids_journal","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:pos_order","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:pos_payment_method._check_adyen_terminal_identifier","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:pos_payment_method._check_adyen_terminal_identifier","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:pos_payment_method._check_business_short_code","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:pos_payment_method._check_cash_method_single_shop","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:pos_payment_method._check_company_config","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:pos_payment_method._check_payment_method","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:pos_payment_method._check_stripe_serial_number","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:pos_payment_method._check_stripe_serial_number","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:pos_preset._check_slots","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:pos_printer._constrains_epson_printer_ip","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:pos_session","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:pos_session","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:pos_session._check_pos_config","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:pos_session._check_pos_config","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:product_category","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:product_combo._check_combo_item_ids_no_duplicates","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_combo._check_combo_item_ids_not_empty","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_combo._check_company_id","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:product_combo._check_qty_free","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_combo._check_qty_max","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_combo._check_qty_max_greater_than_qty_free","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_document","p":"inherits_from","o":"odoo:ir_attachment","f":0.95,"c":0.9} +{"s":"odoo:product_document._check_product_is_unpublished_before_removing_print_images","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:product_document._check_product_is_unpublished_before_removing_print_images","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_feed","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:product_feed._check_product_limit","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_feed._check_product_limit","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:product_image._check_valid_video_url","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_pricelist","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:product_pricelist","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:product_pricelist_item._check_base_pricelist_id","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_pricelist_item._check_date_range","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_pricelist_item._check_margin","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_pricelist_item._check_pricelist_recursion","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:product_pricelist_item._check_pricelist_recursion","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_pricelist_item._check_product_consistency","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_product","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:product_product","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:product_product","p":"inherits_from","o":"odoo:product_template","f":0.95,"c":0.9} +{"s":"odoo:product_product._check_base_unit_count","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_product._check_company_id","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:product_product._check_l10n_tr_ctsp_number","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_product._check_service_tracking_for_event_booths","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:product_ribbon._check_assign","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:product_template","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:product_template","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:product_template","p":"inherits_from","o":"odoo:rating_mixin","f":0.95,"c":0.9} +{"s":"odoo:product_template._check_combo_ids_not_empty","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_template._check_combo_inclusions","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:product_template._check_combo_inclusions","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_template._check_incompatible_types","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:product_template._check_sale_combo_ids","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_template._check_sale_product_company","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_template._check_service_tracking_for_event_booths","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:product_template_attribute_line._check_valid_values","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:product_uom._check_barcode_uniqueness","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:project_milestone","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:project_project","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:project_project","p":"inherits_from","o":"odoo:mail_tracking_duration_mixin","f":0.95,"c":0.9} +{"s":"odoo:project_project","p":"inherits_from","o":"odoo:rating_parent_mixin","f":0.95,"c":0.9} +{"s":"odoo:project_project._check_allow_timesheet","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:project_project._check_sale_line_type","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:project_task","p":"inherits_from","o":"odoo:html_field_history_mixin","f":0.95,"c":0.9} +{"s":"odoo:project_task","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:project_task","p":"inherits_from","o":"odoo:mail_tracking_duration_mixin","f":0.95,"c":0.9} +{"s":"odoo:project_task","p":"inherits_from","o":"odoo:rating_mixin","f":0.95,"c":0.9} +{"s":"odoo:project_task._check_project_root","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:project_task._check_project_root","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:project_task._check_sale_line_type","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:project_task._ensure_super_task_is_not_private","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:project_task_recurrence._check_repeat_interval","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:project_task_recurrence._check_repeat_until_date","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:project_update","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:purchase_order","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:purchase_order","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:purchase_order_line","p":"inherits_from","o":"odoo:analytic_mixin","f":0.95,"c":0.9} +{"s":"odoo:purchase_requisition","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:purchase_requisition","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:purchase_requisition._check_dates","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:quotation_document","p":"inherits_from","o":"odoo:ir_attachment","f":0.95,"c":0.9} +{"s":"odoo:rating_mixin","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:repair_order","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:repair_order","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:res_company","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:res_company._check_active","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:res_company._check_eco_admin_index","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:res_company._check_l10n_it_edi_purchase_journal_id","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:res_company._check_peppol_endpoint","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:res_company._check_prepayment_percent","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:res_company._check_tax_representative","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:res_company.validate_lock_dates","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:res_partner","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:res_partner","p":"inherits_from","o":"odoo:mail_thread_blacklist","f":0.95,"c":0.9} +{"s":"odoo:res_partner","p":"inherits_from","o":"odoo:mail_thread_phone","f":0.95,"c":0.9} +{"s":"odoo:res_partner._check_l10n_rs_edi_public_funds","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:res_partner._validate_l10n_es_edi_facturae_ac_logical_operational_point","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:res_partner._validate_l10n_es_edi_facturae_ac_physical_gln","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:res_partner_bank","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:res_partner_bank","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:res_partner_bank._check_br_proxy","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:res_partner_bank._check_br_proxy","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:res_partner_bank._check_clearing_number_us","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:res_partner_bank._check_journal_id","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:resource_calendar._check_attendance_ids","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:resource_calendar_leaves.check_dates","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:sale_order","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:sale_order","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:sale_order._check_l10n_it_edi_doi_id","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:sale_order._check_prepayment_percent","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:sale_order._check_warehouse","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:sale_order._check_warehouse","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:sale_order._constraint_unique_assigned_grade","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:sale_order_line","p":"inherits_from","o":"odoo:analytic_mixin","f":0.95,"c":0.9} +{"s":"odoo:sale_order_line._check_event_booth_registration_ids","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:sale_order_line._check_event_registration_ticket","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:sale_order_template._check_company_id","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:sale_order_template._check_company_id","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:sale_order_template._check_prepayment_percent","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:sale_pdf_form_field._check_form_field_name_follows_pattern","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:sale_pdf_form_field._check_valid_and_existing_paths","p":"validation_kind","o":"format","f":0.85,"c":0.75} +{"s":"odoo:sequence_mixin._constrains_date_sequence","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:slide_channel","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:slide_channel","p":"inherits_from","o":"odoo:rating_mixin","f":0.95,"c":0.9} +{"s":"odoo:slide_slide","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:spreadsheet_dashboard","p":"inherits_from","o":"odoo:spreadsheet_mixin","f":0.95,"c":0.9} +{"s":"odoo:spreadsheet_dashboard_share","p":"inherits_from","o":"odoo:spreadsheet_mixin","f":0.95,"c":0.9} +{"s":"odoo:spreadsheet_mixin._check_spreadsheet_data","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:stock_landed_cost","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:stock_landed_cost","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:stock_location._check_replenish_location","p":"validation_kind","o":"lookup","f":0.85,"c":0.75} +{"s":"odoo:stock_location._check_scrap_location","p":"validation_kind","o":"uniqueness","f":0.85,"c":0.75} +{"s":"odoo:stock_lot","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:stock_lot","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:stock_lot._check_unique_lot","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:stock_lot._check_unique_lot","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:stock_move._check_negative_quantity","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:stock_move_line._check_positive_quantity","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:stock_picking","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:stock_picking","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:stock_picking_batch","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:stock_picking_batch","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:stock_quant.check_product_id","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:stock_scrap","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:survey_survey","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:survey_survey","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:survey_survey._check_survey_responsible_access","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:survey_user_input","p":"inherits_from","o":"odoo:mail_activity_mixin","f":0.95,"c":0.9} +{"s":"odoo:survey_user_input","p":"inherits_from","o":"odoo:mail_thread","f":0.95,"c":0.9} +{"s":"odoo:uom_uom._check_factor","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:website._check_domain","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:website._check_events_app_name","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:website_controller_page","p":"inherits_from","o":"odoo:ir_ui_view","f":0.95,"c":0.9} +{"s":"odoo:website_menu._validate_parent_menu","p":"validation_kind","o":"range","f":0.85,"c":0.75} +{"s":"odoo:website_page","p":"inherits_from","o":"odoo:ir_ui_view","f":0.95,"c":0.9} +{"s":"odoo:website_rewrite._check_url_to","p":"validation_kind","o":"presence","f":0.85,"c":0.75} +{"s":"odoo:website_snippet_filter._check_limit","p":"validation_kind","o":"range","f":0.85,"c":0.75}