{ "$schema": "https://git.siax.io/sax3l/siax-standard/raw/branch/main/schema/siax.repo.v3.schema.json", "standardVersion": "3.0", "repo": "ACCOUNTED", "tier": "satellite", "category": "business", "subcategory": "bookkeeping-engine", "appId": null, "appIdJustification": "No SIAX appId registered. Accounted is an adopted external open-source Swedish bookkeeping product (package.json name \"erp-base\", upstream copyright Jakob Wennberg / gnubok, AGPL-3.0-or-later) brought into the sax3l org on 2026-09-10 as a finance capability alongside ERPNext for engagement bookkeeping (see Simon's 2026-09-14 decision: ERPNext/Accounted, not Fortnox). It is not a SIAX-branded 0-suffix platform product, so it has no CL0UD APP_REGISTRY entry; that assignment is a separate, not-yet-made decision.", "owner": "SIAX Technology AB", "lifecycle": "active", "operationalState": "planned", "gitHost": "git.siax.io", "canonicalRemote": "https://git.siax.io/sax3l/accounted.git", "mirrors": [ { "host": "github.com", "url": "https://github.com/erp-mafia/accounted.git", "role": "mirror", "direction": "push-from-canonical" } ], "node": null, "domains": [], "consumes": [], "consumedBy": [], "replacesSaaS": ["Fortnox"], "children": [ { "path": "app", "purpose": "Next.js 16 App Router: UI, API route handlers (app/api/**), cron endpoints, and the OAuth 2.1 MCP connector surface (app/api/mcp-oauth)", "lifecycle": "active" }, { "path": "lib/core/bookkeeping", "purpose": "Double-entry bookkeeping engine: voucher commit/storno, period locks, correction chains, enforced by Postgres triggers per Bokforingslagen", "lifecycle": "active" }, { "path": "packages/accounted-mcp", "purpose": "Current-generation MCP tool package (150+ bookkeeping tools) for agent access; additive successor to gnubok-mcp", "lifecycle": "active" }, { "path": "packages/gnubok-mcp", "purpose": "Legacy-named MCP compatibility package kept for existing MCP installs/API-key prefixes (gnubok_sk_/gnubok_inv_); never to be renamed per CLAUDE.md", "lifecycle": "active" }, { "path": "extensions", "purpose": "Opt-in extension system (AI categorization, receipt OCR, email/calendar, bank/Peppol/Skatteverket connectors); core code must never import from here", "lifecycle": "active" }, { "path": "supabase/migrations", "purpose": "Postgres schema migrations, including the legally-required enforcement triggers (migration 017) and RLS policies", "lifecycle": "active" }, { "path": "claude-plugin", "purpose": "Claude Code plugin distributing approval-gated workflow skills (/accounted:bookkeep, /accounted:vat, /accounted:year-end)", "lifecycle": "active" } ], "runtime": { "language": "typescript", "node": ">=20", "framework": "next", "packageManager": "npm" }, "canonical": true, "parentRepo": null, "capabilities": [], "surfaces": ["ui", "api", "mcp"], "contracts": {}, "identity": { "workloadIdentity": false, "authProvider": "supabase", "tenantScoped": true }, "persistence": { "stateful": true, "database": "postgres", "storage": "other" }, "deployment": { "node": null, "dedicated": false, "environments": [] }, "observability": { "health": true, "ready": false, "metrics": false, "otel": false }, "reliability": { "slo": false, "backupFrequency": "none", "provenRestore": false, "rollback": false }, "engines": ["postgres", "supabase", "redis"], "licenses": { "spdx": "AGPL-3.0-or-later", "approved": false }, "productionEvidence": { "verified": false }, "decoupled": true, "packageName": "erp-base" }