Skip to content

feat(vocab+class-view): mint PRODUCT (0x0207) + ACCOUNTING_ACCOUNT (0x0208); extend ODOO_ALIASES#111

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/odoo-aliases-product-and-accounting-account-mints
Jun 23, 2026
Merged

feat(vocab+class-view): mint PRODUCT (0x0207) + ACCOUNTING_ACCOUNT (0x0208); extend ODOO_ALIASES#111
AdaWorldAPI merged 1 commit into
mainfrom
claude/odoo-aliases-product-and-accounting-account-mints

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Phase-3 mint (C of A+B+C) — close the cross-axis identity gap

Phase-3 mints from the cross-axis identity gap surfaced in
odoo-rs PR #14's
alignment_pin::seeded_classes_have_compatible_ogar_identity. OdooPort
previously covered the commerce arm only (9 aliases); the alignment table
declared 15 concepts across 6 basins (BillingCore + SMBAccounting +
SmbFoundryCustomer + SmbFoundryInvoice + ProductCatalog + HRFoundation),
leaving 11 Odoo classes without a canonical OGAR class_id.

This PR closes the highest-impact 4-of-11 gap by minting two
product+accounting concepts and routing their Odoo aliases.

What lands

PRODUCT (0x0207)               ← product.template   (catalogue master record)
                               ← product.product    (variant SKU; same id)

ACCOUNTING_ACCOUNT (0x0208)    ← account.account             (live ledger row)
                               ← account.account.template    (SKR03/04 chart-of-accounts template)

Same convergence pattern as account.move ↔ sale.order → COMMERCIAL_DOCUMENT
in the existing commerce arm.

Synchronised across the codebook

File Change
ogar-vocab/src/lib.rs CODEBOOK + 2 rows (product, accounting_account)
ogar-vocab/src/lib.rs class_ids mod + 2 typed consts (PRODUCT, ACCOUNTING_ACCOUNT)
ogar-vocab/src/lib.rs class_ids::ALL + 2 entries
ogar-vocab/src/lib.rs builders + product() and accounting_account() Class fns with minimal schema:Product / fibo:Account-aligned attributes
ogar-vocab/src/lib.rs all_promoted_classes() + 2 calls in 0x02XX block
ogar-vocab/src/lib.rs tests commerce_concept loop +2 names; concepts_in_domain(Commerce).count(): 6 → 8
ogar-vocab/src/ports.rs ODOO_ALIASES + 4 entries (9 → 13); count-drift assert updated
ogar-class-view/src/lib.rs all_canonical_classes() + 2 entries with the new builders imported
ogar-class-view/src/lib.rs doc comments refresh the stale "32 promoted" count references

Class attribute shapes

Minimal schema:Product / fibo:Account-aligned attributes:

product():            sku, name, price (decimal), description
accounting_account(): code, name, account_type, currency

Same density as commercial_document(), tax_policy(), currency_policy()
small typed-attribute set that downstream renderers extend per app.

Deferred for follow-up (7 of 11 missing aliases)

Class Proposed concept Notes
product.pricelist PRICELIST (0x0209?) schema:PriceSpecification
product.pricelist.item PRICELIST_RULE (0x020A?) schema:UnitPriceSpecification
uom.uom UNIT_OF_MEASURE (0x020B?) qudt:Unit
hr.employee EMPLOYEE (0x0C01?) vcard:Individual — needs new HR concept domain 0x0C
hr.department ORGANIZATIONAL_UNIT (0x0C02?) org:OrganizationalUnit
hr.job JOB_ROLE (0x0C03?) org:Role
hr.contract EMPLOYMENT_CONTRACT (0x0C04?) fibo:Contract

The 0x02XX product-catalog additions need a schema:PriceSpecification
alignment review first. The HR cluster needs a new 0x0CXX concept domain
proposal, paralleling AuthStore #110's keystone §7 review pattern. Queued
as a follow-up PR once the schema decisions are made.

Tests

  • ogar-vocab: 93 passed (was 91 pre-mint; +2 from new constants going through the loop)
  • ogar-class-view: 11 passed
  • clippy clean on my new code; fmt clean

Cross-repo refs

…x0208); extend ODOO_ALIASES

Phase-3 mints from the cross-axis identity gap surfaced in odoo-rs PR #14
(`alignment_pin::seeded_classes_have_compatible_ogar_identity`). `OdooPort`
previously covered the commerce arm only (9 aliases); the alignment table
declared 15 concepts across 6 basins (BillingCore + SMBAccounting +
SmbFoundryCustomer + SmbFoundryInvoice + ProductCatalog + HRFoundation),
leaving 11 Odoo classes without a canonical OGAR class_id.

This PR closes the highest-impact 4-of-11 gap by minting two product+
accounting concepts and routing their Odoo aliases:

  PRODUCT (0x0207)
    ← product.template  (master record / catalogue)
    ← product.product   (variant SKU; converges on the same id)

  ACCOUNTING_ACCOUNT (0x0208)
    ← account.account             (live ledger row)
    ← account.account.template    (SKR03/04 chart-of-accounts template)

Same convergence pattern as `account.move ↔ sale.order → COMMERCIAL_DOCUMENT`
in the existing commerce arm.

Synchronised across the codebook:
  - CODEBOOK rows + class_ids constants + class_ids::ALL entries
  - all_promoted_classes() (ogar-vocab) with new product() / accounting_account()
    builders (Class definitions with minimal schema:Product / fibo:Account-aligned
    attributes)
  - all_canonical_classes() (ogar-class-view) — the ObjectView registry
  - ODOO_ALIASES (ports.rs) — 4 new entries (9 → 13)
  - Tests updated for new count (Commerce concepts.count(): 6 → 8) +
    commerce_concept loop iterates the 2 new names
  - Odoo alias count drift assert: 9 → 13
  - Stale "32 promoted" doc comments in ogar-class-view refreshed to count-
    agnostic phrasing

Deferred for follow-up (7 remaining missing aliases per odoo-rs #14):
  - product.pricelist, product.pricelist.item, uom.uom  → ProductCatalog basin
    candidates (PRICELIST / PRICELIST_RULE / UNIT_OF_MEASURE — additional 0x02XX
    mints; needs a "schema:PriceSpecification" alignment review first)
  - hr.employee, hr.department, hr.job, hr.contract → HRFoundation basin
    candidates (new 0x0CXX concept domain proposal; needs separate keystone-
    style §7 spec review like AuthStore #110 did)

Tests:
  - ogar-vocab: 93 passed (was 91 pre-mint; +2 doctests pass)
  - ogar-class-view: 11 passed
  - clippy clean on my new code; fmt clean

Refs:
  - AdaWorldAPI/odoo-rs#14 (alignment-pin surfaces the 11-class gap)
  - AdaWorldAPI/odoo-rs#15 (Phase-2 hydrator pull)
  - AdaWorldAPI/odoo-rs#16 (repatriation-frame canonical citations)
  - AdaWorldAPI/lance-graph#594 (B of A+B+C: hydrator silent suffix bugs)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants