{
  "id": "pantry",
  "name": "Pantry",
  "version": "0.2.5",
  "maturity": "first-release-local",
  "category": "accounting",
  "spine": {
    "id": "books-and-close",
    "record": "JournalEntry \u2192 JournalLine \u2190 Match \u2192 BankLine \u2190 Statement \u2192 Reconciliation \u2192 Period lock"
  },
  "description": "Keep the books for one US business: bank statements, receipts, invoices, bills and a month-end close you can review with your accountant.",
  "capabilities": [
    {
      "id": "business-and-roles",
      "clauses": [
        "PAN-01"
      ]
    },
    {
      "id": "chart-and-opening",
      "clauses": [
        "PAN-02"
      ]
    },
    {
      "id": "contacts-and-documents",
      "clauses": [
        "PAN-03"
      ]
    },
    {
      "id": "receivables",
      "clauses": [
        "PAN-04",
        "PAN-06"
      ]
    },
    {
      "id": "payables",
      "clauses": [
        "PAN-05",
        "PAN-06"
      ]
    },
    {
      "id": "bank-reconciliation",
      "clauses": [
        "PAN-07",
        "PAN-08",
        "PAN-09"
      ]
    },
    {
      "id": "journal",
      "clauses": [
        "PAN-10",
        "PAN-11"
      ]
    },
    {
      "id": "reports",
      "clauses": [
        "PAN-12"
      ]
    },
    {
      "id": "close",
      "clauses": [
        "PAN-13"
      ]
    },
    {
      "id": "portability",
      "clauses": [
        "PAN-14"
      ]
    },
    {
      "id": "agent-proposals",
      "clauses": [
        "PAN-15"
      ]
    },
    {
      "id": "quickbooks-online-move-in",
      "clauses": [
        "PAN-16"
      ]
    },
    {
      "id": "receipts",
      "clauses": [
        "PAN-17"
      ]
    },
    {
      "id": "pantry-questions",
      "clauses": [
        "PAN-18"
      ]
    },
    {
      "id": "connected-payouts-and-payroll",
      "clauses": [
        "PAN-19"
      ]
    }
  ],
  "nonGoals": [
    "Paying bills or moving money from Pantry",
    "Tax filing or tax advice",
    "Running payroll (Gusto runs it; Pantry books it)",
    "Multi-currency",
    "Multi-entity consolidation",
    "Inventory valuation",
    "Depreciation automation",
    "Advanced revenue recognition",
    "A model account held by Pantry (receipts and answers are read with the installation's own AI key)"
  ],
  "externals": [
    {
      "id": "cloudflare",
      "required": true,
      "why": "Worker hosting",
      "data": [
        "HTTP requests"
      ],
      "adapters": []
    },
    {
      "id": "mail-provider",
      "required": false,
      "why": "A hosted Pantry emails sign-in links, invitations, invoices, reminders and its questions through the owner's own Resend or SendGrid account; Pantry on your own computer sends no email.",
      "data": [
        "Recipient email address",
        "Invoice PDF and customer-page link",
        "Sign-in and invitation links"
      ],
      "adapters": []
    },
    {
      "id": "plaid",
      "required": false,
      "why": "Live bank and card feeds with the owner's own Plaid keys; statement files work without it.",
      "data": [
        "Bank and card transactions",
        "Account names and last four digits"
      ],
      "adapters": []
    },
    {
      "id": "stripe",
      "required": false,
      "why": "Card payment from the invoice link (ACH bank debit for a US Stripe account) and payouts split into sales, fees and refunds, with the business's own Stripe key.",
      "data": [
        "Invoice amount and number",
        "Payments, payouts and balance transactions"
      ],
      "adapters": []
    },
    {
      "id": "gusto",
      "required": false,
      "why": "Payrolls posted as one balanced entry, through the owner's own Gusto developer app.",
      "data": [
        "Payroll totals by category"
      ],
      "adapters": []
    },
    {
      "id": "xero",
      "required": false,
      "why": "Move-in from Xero with attachments, through the owner's own Xero app.",
      "data": [
        "Chart, contacts, open invoices and bills, attachments"
      ],
      "adapters": []
    },
    {
      "id": "ai-provider",
      "required": false,
      "why": "Reading receipts and the owner's own words in answers, with the installation's own key; without one, details are typed in.",
      "data": [
        "Receipt images and text",
        "The owner's answer text"
      ],
      "adapters": []
    }
  ],
  "env": [],
  "deploy": {
    "healthPath": "/health",
    "publicPaths": [
      "/",
      "/health",
      "/signin"
    ],
    "notes": "Native owner sessions guard /app; unknown paths return real 404s; local runs send no email."
  },
  "extensionPoints": {
    "contributions": [],
    "policies": [],
    "events": [],
    "slots": [],
    "adapters": []
  },
  "limits": {
    "status": "unmeasured"
  },
  "accessibility": {
    "level": "WCAG 2.2 AA",
    "status": "target; unaudited"
  },
  "operatingCost": {
    "status": "unmeasured"
  },
  "composition": {
    "base": "base",
    "family": "accounting",
    "edition": "pantry",
    "modules": [
      "job-queue",
      "release",
      "deploy-kit",
      "container",
      "demo-host",
      "integrations",
      "mail",
      "ai",
      "portability",
      "erasure",
      "dependencies",
      "operator-auth",
      "owner-claim"
    ]
  }
}
