Files
Odoo-Modules/nexa_coa_setup/data/10_account_reconcile_model.xml
gsinghpal d2f8934a53 feat(nexa_coa_setup): product categories, partner records, bank reconcile rules
Phase 7 — 14 product categories under Services/Resale parents, each wired
to the appropriate default income (and expense for Resale) accounts.

Phase 8 — RP-Associated partner tag + Westin Healthcare Inc + Divine
Mobility Inc partner records, both as Customer+Vendor, both tagged
RP-Associated, both with CA-Ontario fiscal position pre-applied.

Phase 9 — 8 bank reconciliation rules for common vendors (AWS, Hetzner,
DigitalOcean, Cloudflare, GitHub, Microsoft, Stripe fee, Google Ads)
that auto-suggest the correct category account when reconciling bank
statement lines. Uses Odoo 19's 'trigger' field (replaces old
'rule_type').

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 19:15:21 -04:00

111 lines
4.8 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<record id="rule_aws" model="account.reconcile.model">
<field name="name">AWS / Amazon Web Services → Cloud Infrastructure</field>
<field name="trigger">manual</field>
<field name="match_label">contains</field>
<field name="match_label_param">AMAZON WEB SERVICES</field>
<field name="line_ids" eval="[(0, 0, {
'account_id': ref('acct_511105'),
'amount_type': 'percentage',
'amount_string': '100',
'label': 'AWS — Cloud Infrastructure',
})]"/>
</record>
<record id="rule_hetzner" model="account.reconcile.model">
<field name="name">Hetzner → Cloud Infrastructure</field>
<field name="trigger">manual</field>
<field name="match_label">contains</field>
<field name="match_label_param">HETZNER</field>
<field name="line_ids" eval="[(0, 0, {
'account_id': ref('acct_511105'),
'amount_type': 'percentage',
'amount_string': '100',
'label': 'Hetzner — Cloud Infrastructure',
})]"/>
</record>
<record id="rule_digitalocean" model="account.reconcile.model">
<field name="name">DigitalOcean → Cloud Infrastructure</field>
<field name="trigger">manual</field>
<field name="match_label">contains</field>
<field name="match_label_param">DIGITALOCEAN</field>
<field name="line_ids" eval="[(0, 0, {
'account_id': ref('acct_511105'),
'amount_type': 'percentage',
'amount_string': '100',
'label': 'DigitalOcean — Cloud Infrastructure',
})]"/>
</record>
<record id="rule_cloudflare" model="account.reconcile.model">
<field name="name">Cloudflare → CDN &amp; Edge</field>
<field name="trigger">manual</field>
<field name="match_label">contains</field>
<field name="match_label_param">CLOUDFLARE</field>
<field name="line_ids" eval="[(0, 0, {
'account_id': ref('acct_511110'),
'amount_type': 'percentage',
'amount_string': '100',
'label': 'Cloudflare — CDN &amp; Edge',
})]"/>
</record>
<record id="rule_github" model="account.reconcile.model">
<field name="name">GitHub → Software (Dev Tools)</field>
<field name="trigger">manual</field>
<field name="match_label">contains</field>
<field name="match_label_param">GITHUB</field>
<field name="line_ids" eval="[(0, 0, {
'account_id': ref('acct_631200'),
'amount_type': 'percentage',
'amount_string': '100',
'label': 'GitHub — Software (Dev Tools)',
})]"/>
</record>
<record id="rule_microsoft" model="account.reconcile.model">
<field name="name">Microsoft / M365 → Software (Productivity)</field>
<field name="trigger">manual</field>
<field name="match_label">contains</field>
<field name="match_label_param">MICROSOFT</field>
<field name="line_ids" eval="[(0, 0, {
'account_id': ref('acct_631100'),
'amount_type': 'percentage',
'amount_string': '100',
'label': 'Microsoft — Software (Productivity)',
})]"/>
</record>
<record id="rule_stripe_fee" model="account.reconcile.model">
<field name="name">Stripe fee → Merchant Processing</field>
<field name="trigger">manual</field>
<field name="match_label">contains</field>
<field name="match_label_param">STRIPE FEE</field>
<field name="line_ids" eval="[(0, 0, {
'account_id': ref('acct_691200'),
'amount_type': 'percentage',
'amount_string': '100',
'label': 'Stripe — Merchant Processing',
})]"/>
</record>
<record id="rule_google_ads" model="account.reconcile.model">
<field name="name">Google Ads → Advertising (Digital)</field>
<field name="trigger">manual</field>
<field name="match_label">contains</field>
<field name="match_label_param">GOOGLE ADS</field>
<field name="line_ids" eval="[(0, 0, {
'account_id': ref('acct_641100'),
'amount_type': 'percentage',
'amount_string': '100',
'label': 'Google Ads — Advertising (Digital)',
})]"/>
</record>
</data>
</odoo>