<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://magento-sage-accounting.byte8.dev/blog</id>
    <title>Byte8 Sage Accounting Blog</title>
    <updated>2026-04-30T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://magento-sage-accounting.byte8.dev/blog"/>
    <subtitle>Byte8 Sage Accounting Blog</subtitle>
    <icon>https://magento-sage-accounting.byte8.dev/img/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[v1.0.0 — initial release]]></title>
        <id>https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release</id>
        <link href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release"/>
        <updated>2026-04-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The first public release of Byte8 Sage Accounting is out. SaaS connector for Magento 2 → Sage Business Cloud Accounting — invoices, credit notes, customers, products, and payments syncing within minutes, multi-currency aware, with full sync-status visibility from the Magento admin.]]></summary>
        <content type="html"><![CDATA[<p>The first public release of <strong>Byte8 Sage Accounting</strong> is out. SaaS connector for <strong>Magento 2 → Sage Business Cloud Accounting</strong> — invoices, credit notes, customers, products, and payments syncing within minutes, multi-currency aware, with full sync-status visibility from the Magento admin.</p>
<h2 class="anchor anchorWithStickyNavbar_gijT" id="whats-in-v100">What's in v1.0.0<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#whats-in-v100" class="hash-link" aria-label="Direct link to What's in v1.0.0" title="Direct link to What's in v1.0.0" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_gijT" id="connect-flow">Connect flow<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#connect-flow" class="hash-link" aria-label="Direct link to Connect flow" title="Direct link to Connect flow" translate="no">​</a></h3>
<ul>
<li><strong>Pairing-code Connect</strong> — generate a 30-min code in Magento admin, paste into <code>ledger.byte8.io</code>, the chassis handshakes back. No OAuth client secret on disk, no callback URL wrangling.</li>
<li><strong>Sage OAuth</strong> — fully chassis-side. Tokens encrypted at rest (AES-GCM), refreshed transparently, never seen in PHP. Multi-region support (UK / US / IE / CA / FR / ES / DE).</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_gijT" id="outbound-sync-magento--sage">Outbound sync (Magento → Sage)<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#outbound-sync-magento--sage" class="hash-link" aria-label="Direct link to Outbound sync (Magento → Sage)" title="Direct link to Outbound sync (Magento → Sage)" translate="no">​</a></h3>
<ul>
<li><strong>Invoices</strong> (<code>invoice.created</code>) — outstanding AR with full line items, addresses, currency, exchange rate, per-line discounts, dedicated shipping panel.</li>
<li><strong>Payments</strong> (<code>invoice.paid</code>) — <code>contact_payment</code> + <code>contact_allocation</code> against the matching Sage invoice, routed per the per-tenant payment-method map.</li>
<li><strong>Credit notes</strong> (<code>creditmemo.created</code>) — refunds routed to the same contact as the original invoice, with shipping refund line and original-invoice date for accountant reporting.</li>
<li><strong>Customers</strong> (<code>customer.upserted</code>) — Magento customer → Sage contact with <strong>per-currency dedup</strong> (one customer in three currencies = three Sage contacts, deduped via <code>entity_xref</code>).</li>
<li><strong>Products</strong> (<code>product.upserted</code>, opt-in) — simple → Sage <code>product</code>, virtual / downloadable → <code>service</code>. Composite types skipped intentionally.</li>
<li><strong>Stock</strong> (opt-in) — managed-stock simples route to Sage <code>STOCK_ITEM</code> + <code>/stock_movements</code> reconciliation.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_gijT" id="multi-currency">Multi-currency<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#multi-currency" class="hash-link" aria-label="Direct link to Multi-currency" title="Direct link to Multi-currency" translate="no">​</a></h3>
<ul>
<li>Auto-detected from Magento order currency. Per-currency contact keying (<code>M5E</code> for EUR, <code>M5U</code> for USD, <code>M5</code> for GBP).</li>
<li>Cross-border tax routing — non-GB customers force <code>tax_rate_id = "GB_ZERO"</code> (post-Brexit reverse charge), with EU goods/services type resolution per Magento product type.</li>
<li>Sage v3.1 quirk §32 worked around: shipping VAT auto-recompute forces <code>GB_ZERO</code> shipping rate when Magento ships untaxed — no more phantom outstanding balances.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_gijT" id="b2c-consolidation-opt-in">B2C consolidation (opt-in)<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#b2c-consolidation-opt-in" class="hash-link" aria-label="Direct link to B2C consolidation (opt-in)" title="Direct link to B2C consolidation (opt-in)" translate="no">​</a></h3>
<ul>
<li>Collapse low-ticket guest orders onto a single fallback Sage contact ("Magento Web Sales") instead of one row per customer.</li>
<li>Routing rule: B2B (company present) + repeat customers + high-value first-timers all route individual; the rest consolidate.</li>
<li>Per-currency fallback contacts (one per currency).</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_gijT" id="magento-admin-visibility-pr7">Magento admin visibility (PR7)<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#magento-admin-visibility-pr7" class="hash-link" aria-label="Direct link to Magento admin visibility (PR7)" title="Direct link to Magento admin visibility (PR7)" translate="no">​</a></h3>
<ul>
<li><strong>Sage Status column</strong> on Sales → Invoices and Sales → Credit Memos grids. Sortable + filterable. Chips: ✓ Synced / ⏳ Pending / ⏸ Skipped / ✗ Failed / —. Hover for Sage entity id, skip-reason, or error code.</li>
<li><strong>Sage Accounting info block</strong> on every Invoice + Credit Memo detail page — chip, Sage reference, last sync timestamp, skip / error context.</li>
<li><strong>Write-through pending mirror</strong> — chip appears the moment the merchant clicks Submit Invoice, not 60 s later when the cron drain catches up.</li>
<li><strong>Dead-letter banner</strong> on the config page surfaces failed deliveries + links to the <code>byte8:sage:outbox:inspect</code> triage CLI.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_gijT" id="operator-surfaces">Operator surfaces<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#operator-surfaces" class="hash-link" aria-label="Direct link to Operator surfaces" title="Direct link to Operator surfaces" translate="no">​</a></h3>
<ul>
<li><strong>Console commands</strong> for outbox triage: <code>byte8:sage:outbox:{inspect,requeue,cleanup}</code>.</li>
<li><strong>Dev command</strong> to force-sync a single invoice: <code>byte8:sage:invoice:sync &lt;id&gt;</code>.</li>
<li><strong>Settings dashboard</strong> at <code>ledger.byte8.io/dashboard/bindings/{id}/settings</code> with seven cards: Sync Behaviour, Default Mappings, Payment-method Map, Tax-rate Map, Commercial Knobs, Multi-currency, B2C Consolidation. Server-side validation against the live Sage reference cache; red-underline field errors before save.</li>
<li><strong>Sync history</strong> dashboard at <code>ledger.byte8.io/dashboard/sync</code> with full per-event audit + per-row retry button.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_gijT" id="distribution">Distribution<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#distribution" class="hash-link" aria-label="Direct link to Distribution" title="Direct link to Distribution" translate="no">​</a></h3>
<ul>
<li><code>byte8/magento-sage-accounting</code> on Cargoman (Byte8 private Composer registry) for the closed-beta cohort. Public Packagist + Magento Marketplace listing follow.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_gijT" id="intentionally-not-in-v1">Intentionally NOT in v1<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#intentionally-not-in-v1" class="hash-link" aria-label="Direct link to Intentionally NOT in v1" title="Direct link to Intentionally NOT in v1" translate="no">​</a></h2>
<ul>
<li><strong>No Sage Status chip on Sales → Orders or Customers grids.</strong> Orders aren't synced directly (we sync invoices, 0..N per order); customers map to N Sage contacts (per-currency). A row-level chip would either obscure partial-sync state or arbitrarily pick one. Order-rollup info block + per-currency customer block are planned v1.1+.</li>
<li><strong>No "Open in Sage" deep link.</strong> Sage's business URL slug isn't deterministic across regions and isn't returned in OAuth. Probe once we have a US or IE design partner.</li>
<li><strong>No <code>provider_reference</code></strong> (e.g. <code>SI-27</code>) populated on the chip yet. Column exists in the schema; chassis sends <code>null</code> today. v1.1+ — needs a getter on the provider trait so <code>displayed_as</code> rides back with the Sage create response.</li>
<li><strong>No manual "Resync now" button on Magento detail pages.</strong> Operators use the chassis dashboard's per-row retry; no need to duplicate the surface yet.</li>
<li><strong>No standalone <code>payment.captured</code></strong> for offline payments. Magento has no API to attach an offline payment to an existing invoice — accountants reconcile manually in Sage when the cheque / bank transfer lands.</li>
<li><strong>No Sage → Magento writeback.</strong> Enterprise on request — needs Sage webhook surface + Magento write endpoints + conflict-resolution policy. Build only on a custom contract.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_gijT" id="whats-next-v11">What's next (v1.1+)<a href="https://magento-sage-accounting.byte8.dev/blog/v1-0-0-release#whats-next-v11" class="hash-link" aria-label="Direct link to What's next (v1.1+)" title="Direct link to What's next (v1.1+)" translate="no">​</a></h2>
<p>If you have specific asks, email <code>helo@byte8.io</code>. We'll prioritise based on the design-partner cohort feedback. Likely first hits:</p>
<ul>
<li><code>provider_reference</code> end-to-end (the SI-27 / CN-5 labels)</li>
<li>Customer detail-page block (per-currency contact references)</li>
<li>Order detail-page rollup block (per-invoice statuses on the order)</li>
<li>Backfill CLI for pre-PR7 invoices</li>
<li>"Open in Sage" deep link (once we know the URL slug pattern)</li>
</ul>]]></content>
        <author>
            <name>Byte8 Team</name>
            <uri>https://byte8.io</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
</feed>