⚠ This document is superseded (v1 reference — not confirmed v2 design).

Module 4: Purchasing & Suppliers

SUPERSEDED 2026-06-11 — Sprig-era feature spec (pre-pivot). The authoritative current design is the locked schema in docs/SCHEMA.md, the module's entry in docs/PROJECT_DECISIONS.md, and the responsibility/seam maps in docs/MODULE_INDEX.md + docs/CROSS_MODULE_CONTRACTS.md. This file is retained for historical feature context only; do NOT treat its scope/table/feature claims as current (it predates the nursery→generic pivot, the HR-out-of-scope cut, the identity/payments/integrations/files extractions, and the schema locks). Superseded note added 2026-06-11.

Status: ✅ Locked for v1.0 Schema: purchasing Feature count: 134 features in v1.0 Build estimate: Strategic spec only — implementation effort TBD Last updated: 2026-05-12

Overview

Purchasing & Suppliers handles the full inbound supply chain — vendor management, purchase orders, receiving with three-way match, invoice reconciliation, vendor performance tracking, reorder forecasting, and special workflows (drop ship, consignment, returns/RMA).

This module is the Full Purchasing build that ships in v1.0. Note: 5 lighter purchasing features already exist in the Inventory module (shopping list, cost change alerts, vendor pricing comparison, basic QuickBooks export, vendor cost history) — those remain in Inventory; this module is the comprehensive purchasing workflow.

Purchasing depends on Inventory (variants, vendor records, receiving), Customer Orders (special orders trigger PO drafts), and integrates with QuickBooks for AP/payables.

Target Customer Profile

  • Mid-size growth-stage retail nursery, $500K–$5M revenue
  • 15–50 active vendors (plant growers + hard goods suppliers)
  • Spring-weighted purchasing (40–50% of annual purchases Jan–May)
  • Mix of standing reorders, seasonal bulk orders, special customer orders
  • 3-way match required for accounting integrity
  • Multi-vendor sourcing common for popular items

Architecture Principle: Configurability

Every threshold, policy, and default in Purchasing is configurable per tenant via the Owner Dashboard (Module 10).

Feature Hierarchy (134 features across 16 groups)

Group 1: Vendor Management (13 features)

# Feature Notes
1.1 Vendor master record Name, contact, billing address, shipping address, terms, tax ID.
1.2 Multiple contacts per vendor Sales rep, AR contact, customer service contact.
1.3 Vendor categorization Plant grower / hard goods supplier / both / service provider.
1.4 Vendor payment terms Net 30, Net 60, 2/10 Net 30, COD, prepay — captured per vendor.
1.5 Vendor lead time tracking Average days from PO to receipt; auto-derived from history.
1.6 Vendor minimum order quantity (MOQ) Per vendor or per item.
1.7 Vendor catalog / price list Items vendor sells, prices, availability.
1.8 Vendor catalog import (CSV) Upload vendor's catalog quickly.
1.9 Vendor preferred status Mark preferred vendors; auto-suggest first for reorders.
1.10 Vendor notes Free-text — quirks, preferences, special instructions.
1.11 Vendor active/inactive status Deactivate vendors no longer used.
1.12 Vendor account number / customer code Your code with the vendor (for their references).
1.13 Vendor blackout dates Closed periods, plant production cycles; PO won't ship in those windows.

Group 2: Purchase Order Creation (17 features)

# Feature Notes
2.1 Create draft PO Vendor + items + qty + expected cost + delivery date.
2.2 Multi-line PO Multiple variants on one PO.
2.3 Add items by SKU or scan Fast entry.
2.4 Add items from vendor catalog Pre-populated price suggestions.
2.5 PO line cost capture Per-line cost; system warns if differs significantly from last cost.
2.6 PO subtotal, tax, freight, total Calculated in real-time.
2.7 PO destination (which site to deliver to) Multi-loc-aware.
2.8 PO expected delivery date Vendor's promised date.
2.9 PO notes (to vendor) Free text accompanying PO.
2.10 PO internal notes Visible to staff, not vendor.
2.11 PO from low-stock report (one-click) "These items are low — generate POs."
2.12 PO from reorder suggestions AI-assisted reorder list (Group 8).
2.13 PO templates Save common POs as templates.
2.14 PO copy from past PO "Same as last spring's order" — duplicate.
2.15 Multi-line discount rules at PO Vendor offers "2% off if 100+ qty" — auto-applied.
2.16 Freight terms per PO Vendor pays / Vrida pays / Split — affects landed cost.
2.17 PO project tagging Link PO to specific contractor/internal project.

Group 3: PO Lifecycle & Sending (13 features)

# Feature Notes
3.1 PO status states draft / sent / acknowledged / partially_received / received / closed / cancelled.
3.2 Send PO to vendor via email PDF attached, branded.
3.3 Send PO to vendor via print For vendors who require paper.
3.4 PO confirmation from vendor Vendor acknowledges (manual entry or email response capture).
3.5 PO modification after sending Edit with vendor approval; audit trail.
3.6 PO cancellation With reason; notify vendor; audit.
3.7 PO acknowledgment changes Vendor modifies (price, qty); staff accepts/disputes.
3.8 PO expiration / aging Open POs >X days flagged for follow-up.
3.9 PO export to PDF Standalone document.
3.10 PO numbering Sequential, customizable prefix per site/year.
3.11 PO approval workflow (multi-level by amount) POs over $X require manager; over $Y require owner.
3.12 PO confirmation deadline tracking Flag if vendor doesn't acknowledge within X days.
3.13 PO release scheduling Create now, send on future date.

Group 4: Receiving Workflow (16 features)

# Feature Notes
4.1 Receive against PO Cashier opens PO at receiving zone; scans/counts arrived items.
4.2 Receiving by line item Mark received qty per line; partial receiving supported.
4.3 Receiving captures actual cost Match against PO cost; flag discrepancies.
4.4 Receiving captures destination zone Where to put away.
4.5 Receiving capture photo of shipment Document condition; optional.
4.6 Damage / defect codes at receiving Cracked pot, root-bound, dead, wrong variety.
4.7 Receiving discrepancy capture Expected 100, received 95 — explicit short tracking.
4.8 Substitution capture at receiving Vendor sent variety B instead of A — staff accepts/disputes.
4.9 Receiving updates inventory Stock incremented atomically with receipt.
4.10 Receiving completes PO line Line marked received when qty matches.
4.11 Receive without a PO (ad-hoc) Rare but supported; auto-create PO afterward.
4.12 Receiving print put-away labels "These plants go to North Yard" — print labels at receiving.
4.13 Multiple receipts per PO "First truckload today, second next week" — incremental receipts.
4.14 Cost allocation per line Freight charges split proportionally across line items.
4.15 Landed cost calculation Item cost + freight + duty + handling = true cost basis for inventory.
4.16 Receipt tally / count verification High-value items ($500+) counted twice independently.

Group 5: Three-Way Match & Invoice Reconciliation (12 features)

# Feature Notes
5.1 Capture vendor invoice PDF upload, photo, or manual entry.
5.2 Invoice line items Each line: item, qty, unit cost, total.
5.3 Three-way match PO line + Receipt line + Invoice line — system reconciles.
5.4 Match discrepancy highlighting Show differences (price, qty) for review.
5.5 Discrepancy resolution workflow Approve/dispute/adjust each line.
5.6 Invoice approval for payment Once matched, mark approved for QuickBooks.
5.7 Vendor invoice list Open, matched, approved, paid views.
5.8 Invoice aging report How long since received, how long until payment due.
5.9 Multi-PO invoice One invoice covering multiple POs.
5.10 Invoice partial approval Approve part now, dispute part separately.
5.11 Cash discount tracking 2/10 Net 30 — actively track and capture discounts if paid early.
5.12 Vendor credit memo tracking Vendor issues credit; track to apply against future invoices.

Group 6: AI Invoice OCR (5 features)

# Feature Notes
6.1 Snap photo of vendor invoice Phone camera captures PDF or paper.
6.2 AI extracts line items OCR + Bedrock parsing: item descriptions, qty, prices.
6.3 AI matches extracted lines to inventory variants Suggests which variant each line is.
6.4 Manual review/correction of AI suggestions Cashier confirms or fixes.
6.5 One-click create invoice from AI extraction After review, invoice record created in system.

Group 7: Vendor Performance Tracking (9 features)

# Feature Notes
7.1 Vendor on-time delivery rate % of POs delivered by promised date.
7.2 Vendor fill rate % of ordered qty actually received.
7.3 Vendor pricing trend Cost over time per item per vendor.
7.4 Vendor quality score Damage/defect rate at receiving.
7.5 Vendor scorecard Composite metric: on-time + fill + quality + price.
7.6 Vendor comparison view Side-by-side: 3 vendors for same item.
7.7 Vendor performance alerts Auto-flag deteriorating performance.
7.8 Vendor rating Manual 1-5 star rating with notes.
7.9 AI cost trend alerts "Vendor X cost on lavender up 15% — investigate?"

Group 8: Reorder Suggestions & Forecasting (8 features)

# Feature Notes
8.1 Rule-based reorder suggestions Low-stock + lead-time + sales velocity → suggested qty.
8.2 AI-powered reorder forecasting Bedrock-trained on historical sales + seasonality.
8.3 Seasonal demand forecasting "Spring is coming — order 30% more lavender."
8.4 Multi-vendor reorder suggestion "Order from Vendor A (cheaper) or Vendor B (faster)?"
8.5 Reorder by category "All annuals" or "all 1gal perennials" — bulk reorder suggestions.
8.6 Reorder by lead time "Things to order today to arrive before next weekend."
8.7 Reorder budget alerts "You've spent $X with this vendor this month" — budget tracking.
8.8 Forecasting accuracy tracking Compare actual vs forecast over time; improve.

Group 9: PO Reporting & Analytics (9 features)

# Feature Notes
9.1 Open POs dashboard All active POs sorted by expected delivery.
9.2 PO spend by vendor Total $ spent with each vendor over period.
9.3 PO spend by category Spend on plants vs hard goods vs services.
9.4 PO aging report POs open >X days.
9.5 Vendor lead time report Actual lead time per vendor; trend.
9.6 Cost variance report Where receiving cost differed from PO cost.
9.7 Special order pipeline What's been ordered for specific customers, when expected.
9.8 Purchasing seasonality Spend patterns over time; identify trends.
9.9 PO commitment accounting (encumbrance) Reserved $ once PO is sent; encumbrance reporting.

Group 10: Receiving Reports (4 features)

# Feature Notes
10.1 Daily receiving log Everything received today, by zone, by vendor.
10.2 Damaged receiving report What arrived damaged; by vendor, by item.
10.3 Discrepancy report Short shipments, substitutions, over-deliveries.
10.4 Receiving by cashier Who received what; performance tracking.

Group 11: Vendor Communication (8 features)

# Feature Notes
11.1 Email vendor from PO Send message tied to specific PO.
11.2 Vendor portal (future v2.0) Vendor self-service: see POs, confirm, update. Schema-ready in v1.0.
11.3 Vendor responses logged Email replies captured against PO.
11.4 Vendor follow-up reminders "PO sent 7 days ago, no response — follow up?"
11.5 Vendor catalog update notification When vendor sends new catalog, system alerts.
11.6 Vendor newsletter / promotional email handling Capture promotions, prices, availability.
11.7 Vendor RFQ (request for quote) Send "what's your price on X qty of Y?" to multiple vendors.
11.8 Vendor bid comparison Side-by-side quotes from multiple vendors.

Group 12: Bulk Operations (4 features)

# Feature Notes
12.1 Bulk PO creation "Generate POs for all low-stock items" — one click.
12.2 Bulk PO sending Email/print all today's POs at once.
12.3 Bulk vendor catalog update Update prices for many items at once.
12.4 Bulk invoice approval Mark multiple invoices as approved for payment.

Group 13: Compliance & Audit (5 features)

# Feature Notes
13.1 PO audit trail Every change to PO logged with actor, time.
13.2 Receiving audit trail Every receipt logged.
13.3 Invoice approval audit Who approved, when, against which PO and receipt.
13.4 Vendor record changes audit Anyone modifying vendor master record.
13.5 1099 tracking for vendors Annual spend per vendor for tax reporting.

Group 14: Drop Ship & Special Vendor Workflows (5 features)

# Feature Notes
14.1 Drop ship vendor configuration Mark vendor as drop ship; orders ship direct to customer.
14.2 Drop ship sale workflow Sale at POS triggers PO that ships to customer address.
14.3 Drop ship tracking Vendor provides tracking; system shows status.
14.4 Consignment vendor handling Items on consignment — vendor owns until sold; revenue split.
14.5 Consignment reconciliation Periodic settlement with consignment vendor.

Group 15: Integration Endpoints (3 features)

Routing note (Architecture Redesign 2026-05-13): All external-system endpoints in this group route via the Integrations module (Core & Platform Layer). The QuickBooks AP export job, the bidirectional vendor sync runtime, and future Vendor Catalog API connectors all use the unified connector pattern owned by Integrations. Purchasing surfaces the tenant-facing UI ("approve invoice for QB export"), emits the appropriate events, and consumes Integrations-module events for sync results. Purchasing does NOT import vendor SDKs directly.

# Feature Notes
15.1 QuickBooks AP export Approved invoices flow to QB for payment.
15.2 QuickBooks vendor sync Bidirectional sync of vendor master records.
15.3 Vendor catalog APIs (future) Some larger vendors offer APIs; integrate later.

Group 16: Vendor Returns / RMA (3 features)

# Feature Notes
16.1 Vendor return / RMA workflow Send something back to vendor; track credit.
16.2 Return shipping management Label, tracking, follow-up.
16.3 RMA credit tracking Vendor credit applied to future invoices; reconciled.

Tier Behavior (Module-Level)

Tier Purchasing capability
Starter Light purchasing only (shopping list, vendor records, cost history — features remain in Inventory module). No PO workflow.
Pro Full Purchasing module: PO creation, receiving, three-way match, vendor performance, reorder suggestions, AI invoice OCR, vendor returns.
Enterprise + Multi-level PO approval workflows + commitment accounting + landed cost calculation + advanced forecasting + vendor portal (future).

Configurable Defaults (Owner Dashboard)

Configurable Default
Default PO destination site First site (for single-site tenants)
Auto-suggest reorder qty OFF (configurable to ON, AI-assisted)
Three-way match required before invoice approval ON
Manager PIN for invoice approval ON above $X
Cost variance alert threshold 10% deviation flags
PO numbering format SITE-YEAR-SEQUENTIAL (configurable)
Auto-send PO on creation OFF (always reviewed first)
Vendor catalog auto-update OFF
Forecast horizon 30 days, 60 days, 90 days
Budget alerts per vendor OFF (configurable)
Drop ship enabled per vendor Per-vendor flag
Consignment enabled per vendor Per-vendor flag
PO approval threshold tier 1 (manager) $1,000
PO approval threshold tier 2 (owner) $10,000
Vendor confirmation deadline 7 days
Auto-release scheduled POs ON
Freight terms default Vendor pays (FOB destination)
Landed cost calculation enabled OFF (configurable; defaults to simple cost)
Encumbrance / commitment accounting OFF (Pro+ feature)
Receipt tally verification threshold $500+ items require double-count
RMA tracking enabled OFF (configurable to ON)

AI Features in Purchasing & Suppliers

Feature # AI capability
6.1-6.5 AI Invoice OCR (entire group — OCR + line matching + variant suggestion)
7.9 AI cost trend alerts (vendor-specific cost anomaly detection)
8.2 AI-powered reorder forecasting (Bedrock on historical sales + seasonality)
8.3 AI seasonal demand forecasting
8.4 AI multi-vendor optimization suggestions
8.8 AI forecast accuracy improvement (feedback loop)

All AI features route via AIService (AI / Intelligence module; model-as-config; AWS Bedrock Claude Haiku 4.5 is the default model). Purchasing does not call Bedrock directly. This includes Group 6 AI Invoice OCR and Group 8 AI-powered reorder forecasting / seasonal demand / vendor optimization / forecast accuracy improvement.

Events Emitted

  • purchasing.po_drafted
  • purchasing.po_sent
  • purchasing.po_acknowledged
  • purchasing.po_modified
  • purchasing.po_cancelled
  • purchasing.po_approved
  • purchasing.po_released
  • purchasing.receipt_recorded
  • purchasing.discrepancy_logged
  • purchasing.invoice_captured
  • purchasing.invoice_matched
  • purchasing.invoice_approved
  • purchasing.invoice_disputed
  • purchasing.cash_discount_captured
  • purchasing.credit_memo_received
  • purchasing.vendor_created
  • purchasing.vendor_updated
  • purchasing.vendor_blackout_triggered
  • purchasing.reorder_suggestion_generated
  • purchasing.forecast_alert
  • purchasing.cost_trend_alert
  • purchasing.rma_created
  • purchasing.rma_completed

Events Consumed

  • inventory.stock_changed (trigger reorder suggestion logic)
  • inventory.variant_updated (refresh variant data on PO lines)
  • orders.special_order_created (auto-create vendor PO for special orders)
  • orders.pre_order_created (auto-create vendor PO for pre-orders)
  • pos.sale_completed (feed sales data to forecasting)
  • billing.subscription_changed (enforce tier limits)

API Contract (PurchasingService — public methods)

High-level surface (detailed signatures during implementation):

  • Vendor lifecycle: createVendor, updateVendor, deactivateVendor, manageVendorContacts
  • PO lifecycle: createPO, addPOLine, applyDiscountRules, setFreightTerms, setPOProjectTag, submitPOForApproval, approvePO, sendPO, schedulePORelease, modifyPO, cancelPO
  • Receiving: startReceiving, recordReceiptLine, recordDiscrepancy, recordSubstitution, allocateCost, calculateLandedCost, verifyHighValueReceipt, completeReceipt
  • Invoice: captureInvoice, runThreeWayMatch, resolveDiscrepancy, approveInvoice, trackCashDiscount, recordCreditMemo
  • AI OCR: scanInvoice, extractLines, suggestVariantMatches, confirmExtraction
  • Performance: getVendorScorecard, compareVendors, triggerPerformanceAlert
  • Forecasting: generateReorderSuggestions, forecastSeasonalDemand, compareVendorBids
  • RMA: createRMA, manageReturnShipping, trackRMACredit

Out of Scope

Capability Why excluded
EDI with vendors Wholesale territory
Full vendor portal (self-service) v2.0+; schema-ready in v1.0
Real-time vendor inventory API integration Most vendors don't offer this
Automated AP / payment to vendors QuickBooks integration handles
Currency conversion at PO (UI) Multi-currency deferred to v1.5+; schema-ready
Vendor 3PL warehousing Wholesale territory
Blanket POs (annual contracts with batched releases) Wholesale territory
Multi-buyer / requisitioner workflows Enterprise feature; deferred
Material certifications tracking (organic, USDA) Niche; defer if customer asks
Capital vs expense PO classification Niche accounting concern
Vendor sales tax handling per PO line Edge case; defer

Gaps Identified from Market Research

Source: See docs/MARKET_RESEARCH_GAPS.md for the master gap registry. Status: All gaps below are Open — pending decision. None have been accepted into scope yet.

Gap # Gap What's missing in this module Research source Possible options
1 Shopify/Woo/Wix ecommerce sync Module 4 has vendor POs and receiving; no inbound sync from external ecommerce platforms Research §2.1 #6 Deferred (v1.5+) — Native connectors ship v1.5+; v1.0 tenants use manual CSV-sync. Connectors will live in the Integrations module (Core & Platform Layer) per Architecture Redesign 2026-05-13; Purchasing consumes the Integrations connector pattern, not vendor SDKs directly. See ROADMAP v1.5.
23 Hyper-local reorder with weather No local-weather input yet Research §6.3.5 Deferred (v1.2) — Coupled with Inventory Gap #23 + weather-tied bundle.
Last modified: Jun 17, 2026, 6:57 PM PT
On this page
Esc