Module 5: Customer Management (CRM)
⛔ 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.
⚠️ Revised 2026-05-13 per Nursery-Only Focus: Customer is tenant-scoped, lives in crm schema (no core.customer). The Phase 4B-1 framing that customer master "moves to core.customer" is cancelled. Customer stays in crm. Tenant-scoping is preserved — customer carries tenant_id, is RLS-policed. charge_account moves to the Billing module (Module 11) per the Billing Ownership Split decision. All other CRM features remain unchanged.
Status: ✅ Locked for v1.0 (charge_account move to Billing pending; spec content valid)
Schema: crm (nursery-facing module; owns customer master directly, tenant-scoped)
Feature count: 158 features in v1.0 → 158 (pending recount post-charge_account migration — Group 6 charge-account features move to Billing module per Billing Ownership Split decision; CRM count will decrease after the move completes). Original 158-count breakdown preserved below in feature tables.
Build estimate: Strategic spec only — implementation effort TBD
Last updated: 2026-05-13 (Nursery-Only Focus revision; charge_account move pending)
Overview
Customer Management owns customer records, relationships, charge accounts, marketing, loyalty, tax exemption certificates, and the data that POS, Orders, Notifications, Customer App, Reporting, and Audit all pull from. CRM is the single source of truth for customer identity and segmentation across the entire platform.
For nurseries, CRM handles diverse customer types — retail walk-ins, landscape contractors (B2B with A/R), commercial accounts, HOAs, and wholesale tier customers — each with distinct workflows for credit terms, pricing, communication preferences, and tax exemption.
CRM is consumed by POS (customer attach), Orders (contractor B2B), Notifications (opt-in/out), Customer-Facing App (login, profile), Reporting (analytics), and Billing (tier enforcement). CRM consumes data from POS (purchase history), Orders (order history), Purchasing (cost basis for LTV), and Billing (subscription state).
Target Customer Profile
- Mid-size growth-stage retail nursery, $500K–$5M revenue
- ~70% retail walk-in customers
- ~20% landscape contractor B2B customers (with charge accounts, project tagging)
- ~10% commercial / HOA accounts (with PO requirements)
- Spring-weighted customer acquisition (40–50% of new customers Jan–May)
- Mix of repeat customers and seasonal visitors
Architecture Principle: Configurability
Every threshold, policy, and default in CRM is configurable per tenant via the Owner Dashboard (Module 10).
Table Scope (Tenancy)
Revised 2026-05-13 per Nursery-Only Focus. The Phase 4B-1 "moves to core.customer" framing is cancelled. Customer lives in crm schema, tenant-scoped. Multi-nursery consumer linkage lives in the customer_app schema (still consumer-owned, cross-tenant — that property hasn't changed; just no "extension layer" framing). charge_account moves to the Billing module per Billing Ownership Split.
| Table |
Schema / Module |
Scope |
Notes |
crm.customer |
crm (this module) |
Tenant-scoped (carries tenant_id, RLS-policed) |
Customer master. Each tenant owns its own customer rows. Standard cross-schema write pattern (SET LOCAL + RLS) applies. |
| Multi-nursery consumer linkage table |
customer_app (Module 8) |
Cross-tenant, consumer-owned |
Links one consumer identity across multiple tenants for the consumer plant-care app. SECURITY DEFINER pattern reserved for writes touching this table. CRM features that read across nurseries call into customer_app to resolve linkage. |
crm.charge_account → billing.charge_account |
Billing module (Module 11) |
Tenant-scoped |
A/R relationship per-tenant. Moves to Billing per Billing Ownership Split. FKs to crm.customer. |
crm.segment |
crm (this module) |
Tenant-scoped |
Custom segments are tenant-defined. FKs to crm.customer. |
crm.tax_certificate |
crm (this module) |
Tenant-scoped |
Per-customer cert, scoped to the capturing tenant. FKs to crm.customer. |
crm.loyalty_enrollment |
crm (this module) |
Tenant-scoped |
Loyalty is per-tenant program. FKs to crm.customer. |
crm.campaign |
crm (this module) |
Tenant-scoped |
Marketing campaigns are tenant-owned. |
crm.customer_tag |
crm (this module) |
Tenant-scoped |
Tags belong to the tenant that applied them. FKs to crm.customer. |
Multi-nursery customer linkage — product capability preserved
The consumer-facing capability "one consumer account spans multiple connected nurseries" is preserved as a product goal. CRM continues to surface unified consumer identity via the multi-nursery linkage table in the extension layer:
- The physical join table lives in the nursery vertical-extension layer (not in
crm).
- CRM features that read across nurseries (unified order history, cross-nursery loyalty visibility) call into the extension layer to resolve the linkage.
- For non-nursery deployments that omit the vertical-extension layer entirely, CRM degrades gracefully to tenant-scoped customer only — no cross-tenant linkage, which is the correct default for any non-nursery vertical.
Superseded prior framing (preserved for traceability)
crm.customer — Global. Per PROJECT_DECISIONS Global Tables. One record per consumer email/phone across all tenants.
crm.nursery_customer — Global. Join table linking global customers to tenants (many-to-many).
Both rows above are superseded per the Architecture Redesign.
See PROJECT_DECISIONS.md → "Global Tables (Tenant Scope Exceptions)" and SCHEMA_CONVENTIONS.md → "Cross-Schema Writes" for access patterns.
Feature Hierarchy (158 features across 16 groups)
Group 1: Customer Records — Core (17 features)
| # |
Feature |
Notes |
| 1.1 |
Customer master record |
First name, last name, business name, customer type |
| 1.2 |
Customer type classification |
Retail walk-in / Landscape contractor / Commercial / HOA / Wholesale tier / Other |
| 1.3 |
Primary contact info |
Phone (primary), email (primary), preferred contact method |
| 1.4 |
Multiple phone numbers per customer |
Mobile, business, home, fax — labeled |
| 1.5 |
Multiple emails per customer |
Personal, business, billing — labeled |
| 1.6 |
Multiple addresses per customer |
Billing, shipping, business, project sites — labeled |
| 1.7 |
Customer photo / avatar |
Optional; helpful for high-touch customers |
| 1.8 |
Customer status |
active / inactive / VIP / flagged / blocked |
| 1.9 |
Customer notes (general) |
Free-text notes visible to staff |
| 1.10 |
Customer source / referral |
How they found the nursery (advertising, word-of-mouth, drive-by) |
| 1.11 |
Customer signup date |
When customer record was created |
| 1.12 |
Last visit / last purchase date |
Auto-derived from sales data |
| 1.13 |
Customer ID / membership number |
Auto-generated; printable on cards/receipts |
| 1.14 |
Customer language preference |
English, Spanish, etc. — drives receipts and notifications |
| 1.15 |
Customer ship-to instructions |
Per-address delivery notes ("leave at gate, watch for dogs") |
| 1.16 |
Customer complaint / issue log |
Issues, resolutions, current status — operational visibility |
| 1.17 |
Customer-related documents storage |
Contracts, agreements, certifications stored against customer |
Group 2: Customer Search & Lookup (10 features)
| # |
Feature |
Notes |
| 2.1 |
Search by name |
First, last, business name; fuzzy-tolerant |
| 2.2 |
Search by phone |
Partial match (e.g., last 4 digits) |
| 2.3 |
Search by email |
Partial match supported |
| 2.4 |
Search by customer ID / membership number |
Quick lookup at register |
| 2.5 |
Search by address |
Useful for delivery confirmation |
| 2.6 |
Recent customers list |
Last 50 customers viewed/touched |
| 2.7 |
Customer scan via QR code |
Customer shows their digital card; cashier scans |
| 2.8 |
Multi-field combined search |
Search across all fields at once |
| 2.9 |
Search filters |
Type, status, tag, location, last visit date |
| 2.10 |
Search by purchase history |
"Find customers who bought roses last spring" |
Group 3: Customer Type — Retail Customers (8 features)
| # |
Feature |
Notes |
| 3.1 |
Retail customer simplified record |
Minimum: name + phone OR email; optional everything else |
| 3.2 |
Anonymous tracking via phone |
No record created but phone tagged to sales for re-identification |
| 3.3 |
Retail customer purchase history |
All past sales linked to customer record |
| 3.4 |
Retail customer purchase preferences (auto-derived) |
"Mostly buys perennials" — based on sales |
| 3.5 |
Retail customer favorite plants |
Plants viewed in customer-facing app, marked as favorite |
| 3.6 |
Retail customer plant care reminders |
"Your roses need fertilizer this week" |
| 3.7 |
Retail customer event invitations |
RSVP to nursery events (planting workshops, etc.) |
| 3.8 |
Retail customer gift purchases |
Track gifts purchased FOR this customer by others |
Group 4: Customer Type — Contractors (B2B) (16 features)
| # |
Feature |
Notes |
| 4.1 |
Contractor business record |
Business name, license #, insurance info, primary contact |
| 4.2 |
Contractor pricing tier |
Tier 1/2/3 — auto-applied at POS and Orders |
| 4.3 |
Contractor payment terms |
Net 30, Net 60, 2/10 Net 30, COD, prepay |
| 4.4 |
Contractor credit limit |
Maximum outstanding balance allowed |
| 4.5 |
Contractor charge account balance |
Real-time outstanding A/R balance |
| 4.6 |
Contractor credit status |
active / on hold / over limit / pre-pay only |
| 4.7 |
Contractor charge limit override (per-sale) |
Already in POS 6.15; reference here |
| 4.8 |
Contractor employees / sub-users |
List of people authorized to charge to this account |
| 4.9 |
Contractor business hours |
When contractor is reachable |
| 4.10 |
Contractor preferred delivery times |
Time windows for deliveries |
| 4.11 |
Contractor project list |
Active projects with project IDs and budgets |
| 4.12 |
Contractor purchase history per project |
All purchases tagged to specific projects |
| 4.13 |
Contractor preferred substitutions |
Per-customer "if X is out, substitute Y" rules |
| 4.14 |
Contractor sales rep assignment |
Which staff member owns this customer relationship |
| 4.15 |
Contractor-specific contract pricing |
Per-customer locked prices on specific items |
| 4.16 |
Customer-specific item visibility |
Some items only visible to certain customer types (e.g., commercial-only) |
Group 5: Customer Type — Commercial & HOA (8 features)
| # |
Feature |
Notes |
| 5.1 |
Organization record |
Business/HOA name, type, fiscal year |
| 5.2 |
Multiple contacts per organization |
Property manager, board members, billing contact |
| 5.3 |
Organization billing terms |
Net 30/60 typically; PO required |
| 5.4 |
Organization purchase order tracking |
All POs from this org, totals over time |
| 5.5 |
Organization annual contract / agreement |
Document storage for service agreements |
| 5.6 |
Multi-property tracking |
One org with multiple properties to service |
| 5.7 |
Organization fiscal reporting |
Year-end purchases summary for their accounting |
| 5.8 |
Government / nonprofit tax exemption |
Auto-applied at sale; cert library reference (POS 6.16) |
Group 6: Charge Accounts & A/R (20 features)
| # |
Feature |
Notes |
| 6.1 |
Charge account creation |
New customer → charge account workflow |
| 6.2 |
Credit application |
Capture credit references, business info, financial details. Customer signs application via HelloSign (Dropbox Sign) when the application creates an A/R relationship above the configurable threshold; canvas signature for below-threshold applications. See ARCHITECTURE.md "Signature Infrastructure". |
| 6.3 |
Credit approval workflow |
Manager review → approve / deny / set limit |
| 6.4 |
Credit limit setting |
Dollar limit; configurable per customer |
| 6.5 |
Open invoice / A/R balance |
Real-time outstanding balance per customer |
| 6.6 |
Invoice aging buckets |
Current / 30 days / 60 days / 90+ days |
| 6.7 |
Invoice list per customer |
All open and historical invoices |
| 6.8 |
Customer statement generation |
Monthly statement with all activity, balances |
| 6.9 |
Customer statement email/print |
Auto-send or manual send |
| 6.10 |
Payment receipt |
When customer pays, system records payment, applies to invoices |
| 6.11 |
Partial payment application |
Customer pays $X; system applies to oldest invoices first (configurable) |
| 6.12 |
Payment plan / installment |
Setup multi-payment schedule for large balances |
| 6.13 |
Late fee application |
Auto-apply late fees on aged invoices (configurable) |
| 6.14 |
Credit hold trigger |
Automatic when customer over limit or X days late |
| 6.15 |
Collection workflow |
Escalation: notice → warning → suspension → handed-off |
| 6.16 |
Customer billing instructions |
Where/how to send invoices (specific email, mail-only, AP@company.com only) |
| 6.17 |
Customer payment method preferences |
"Always charges ACH", "Prefers check", etc. |
| 6.18 |
Customer payment auto-debit setup |
Recurring auto-charge of A/R balance (Pro+ tier) |
| 6.19 |
Customer payment promise tracking |
"Customer said they'd pay by Friday" — promise + accountability log |
| 6.20 |
Customer onboarding workflow |
Welcome process for new charge accounts — checklist of steps |
| # |
Feature |
Notes |
| 7.1 |
Built-in customer segments |
New / Repeat / VIP / At-Risk / Lost — auto-calculated |
| 7.2 |
Custom customer tags |
Tenant-defined tags (e.g., "Garden Club", "Master Gardener", "Wholesale Sign-Up") |
| 7.3 |
Multi-tag per customer |
Customer can have many tags |
| 7.4 |
Smart segments (auto-calculated) |
"Spent $1000+ in last 90 days", "No purchase in 6 months" — rule-based |
| 7.5 |
Geographic segments |
"All customers within 10 miles", "All customers in specific zip codes" |
| 7.6 |
Segment search and filter |
Find customers matching segment criteria |
| 7.7 |
Segment-based bulk actions |
Email all VIPs, etc. |
| 7.8 |
Segment performance tracking |
Sales, retention, frequency per segment |
| 7.9 |
Customer scoring / health score |
Algorithmic score based on recency, frequency, monetary value (RFM) |
| 7.10 |
Customer lifetime value (LTV) calculation |
Total revenue from this customer over time. LTV is scoped per (tenant, customer) pair. Tenant A never sees Tenant B's revenue contribution to the same customer. See PROJECT_DECISIONS Customer LTV Scope Rule. |
Group 8: Customer Communication Preferences (9 features)
| # |
Feature |
Notes |
| 8.1 |
Email opt-in / opt-out |
Marketing emails preference |
| 8.2 |
SMS opt-in / opt-out |
Marketing SMS preference (Pro+) |
| 8.3 |
Phone call opt-in / opt-out |
"Don't call me" preference |
| 8.4 |
Mail opt-in / opt-out |
Physical mail preference |
| 8.5 |
Notification frequency preferences |
Daily / weekly / monthly digest options |
| 8.6 |
Transactional vs marketing distinction |
Receipts always send; marketing respects opt-out |
| 8.7 |
Per-channel granular preferences |
Email for receipts, SMS for ready-for-pickup, no marketing — granular |
| 8.8 |
Communication history log |
All emails/SMS sent to this customer, with timestamps |
| 8.9 |
Customer-specific marketing exclusions |
"Don't send marketing to government accounts" — group-level rule |
Group 9: Tax Exemption Management (6 features)
| # |
Feature |
Notes |
| 9.1 |
Tax exemption certificate library |
Multiple certs per customer; types: resale, agricultural, government, religious, etc. |
| 9.2 |
Cert upload / photo capture |
PDF or photo stored with cert record |
| 9.3 |
Cert expiration tracking |
Certs expire; system alerts before expiration |
| 9.4 |
Cert auto-selection at sale |
Right cert for the right jurisdiction/situation |
| 9.5 |
Tax-exempt sale audit |
Records why sale was tax-exempt, which cert applied |
| 9.6 |
Cert reporting for tax filings |
List of all tax-exempt sales with cert details for annual reporting |
Group 10: Loyalty Program Management (8 features)
| # |
Feature |
Notes |
| 10.1 |
Loyalty enrollment status |
Active member / pending / never enrolled / opted out |
| 10.2 |
Loyalty tier per customer |
Bronze / Silver / Gold (configurable tiers) |
| 10.3 |
Loyalty points balance |
Real-time, visible at register |
| 10.4 |
Loyalty points history |
All earnings and redemptions |
| 10.5 |
Loyalty tier progression |
"Spend $200 more to reach Gold" — visible to customer |
| 10.6 |
Loyalty anniversary tracking |
Customer anniversary date; auto-rewards |
| 10.7 |
Loyalty referrals |
Customer refers friend; both get points |
| 10.8 |
Loyalty leaderboard (optional) |
For wholesale tier; ranks customers by spend |
Group 11: Marketing & Outreach (13 features)
| # |
Feature |
Notes |
| 11.1 |
Email marketing campaign creation |
Compose, target segment, schedule, send |
| 11.2 |
SMS marketing campaign creation |
Pro+ tier; concise messages with opt-out link |
| 11.3 |
Campaign templates |
Pre-built templates: spring sale, new arrivals, etc. |
| 11.4 |
Campaign segment targeting |
Send to specific customer segments only |
| 11.5 |
Campaign A/B testing |
Test variants on small segment first (Pro+ feature) |
| 11.6 |
Campaign analytics |
Open rate, click rate, conversion, unsubscribes |
| 11.7 |
Automated drip campaigns |
Welcome series, abandoned cart, post-purchase follow-up |
| 11.8 |
Seasonal campaign automation |
Auto-trigger campaigns: spring opening, end-of-season clearance |
| 11.9 |
Birthday/anniversary campaigns |
Auto-sent on customer birthday or anniversary |
| 11.10 |
Plant care follow-up campaigns |
"You bought roses 2 weeks ago — here are care tips" |
| 11.11 |
Re-engagement campaigns |
"We haven't seen you in 6 months — here's 20% off" |
| 11.12 |
Survey/feedback request campaigns |
Post-purchase satisfaction surveys |
| 11.13 |
Sustainability-tagged campaign templates |
Pre-built campaign templates targeting customers interested in native plants, pollinator gardens, drought-tolerant landscaping. Auto-segments based on past purchase attributes. Editable per tenant. |
Group 12: Customer-Facing App Integration (6 features)
| # |
Feature |
Notes |
| 12.1 |
Customer account creation via app |
Customer self-registers; CRM record created |
| 12.2 |
Customer login via app |
Email/phone + password; linked to CRM record |
| 12.3 |
Customer profile editing |
Customer edits their own info from app |
| 12.4 |
Customer purchase history visible in app |
View past purchases, receipts |
| 12.5 |
Customer saved plants / favorites in app |
Wishlist functionality |
| 12.6 |
Customer notifications received in app |
Plant care reminders, loyalty status, etc. |
Group 13: Customer Reporting & Analytics (12 features)
| # |
Feature |
Notes |
| 13.1 |
New customer acquisition report |
New signups by source, by period |
| 13.2 |
Customer retention report |
Churn rate, return frequency |
| 13.3 |
Customer lifetime value (LTV) by segment |
LTV across customer types |
| 13.4 |
Customer growth trajectory |
Customers gained vs lost over time |
| 13.5 |
Top customers by revenue |
List of highest-spend customers |
| 13.6 |
Customer purchase frequency |
How often each customer buys |
| 13.7 |
Customer geographic distribution |
Map of customer locations |
| 13.8 |
Customer purchase pattern analysis |
What products customers buy together |
| 13.9 |
At-risk customer report |
Customers showing signs of churning |
| 13.10 |
Customer demographic insights |
Age, location, customer type analysis |
| 13.11 |
Customer return history per customer |
Return rate, reasons, patterns per customer |
| 13.12 |
Customer activity timeline |
Chronological view of all interactions (sales, calls, emails, complaints, etc.) |
Group 14: Privacy & Data Management (7 features)
| # |
Feature |
Notes |
| 14.1 |
Customer data export |
All data on a customer (GDPR right to access) |
| 14.2 |
Customer data deletion |
Right to be forgotten — anonymize sale history, delete PII |
| 14.3 |
Customer data correction |
Customer requests correction; staff updates with audit |
| 14.4 |
Customer data sharing log |
Who/where customer data was shared (other systems, partners) |
| 14.5 |
Customer consent tracking |
When/how customer consented to marketing, data use |
| 14.6 |
Data retention policy enforcement |
Auto-delete or anonymize old data per policy |
| 14.7 |
Customer audit trail |
All changes to customer record with timestamp + actor |
Group 15: Bulk Customer Operations (5 features)
| # |
Feature |
Notes |
| 15.1 |
Bulk customer import (CSV) |
Upload customer list from external system |
| 15.2 |
Bulk customer export (CSV) |
Export all or filtered customers |
| 15.3 |
Bulk tag assignment |
Add tag to many customers at once |
| 15.4 |
Bulk merge duplicate customers |
"John Smith" appearing 3 times — merge with history preservation |
| 15.5 |
Bulk customer status update |
Mark many customers as inactive, VIP, etc. |
Group 16: Customer Tasks & Follow-ups (3 features)
| # |
Feature |
Notes |
| 16.1 |
Task list per customer |
"Call this customer next week", "Follow up on quote" — CRM-style tasks |
| 16.2 |
Automated follow-up triggers |
Auto-create tasks based on events (new account, no contact 60 days, etc.) |
| 16.3 |
Task reporting |
Open tasks per staff member; SLA tracking; completion rate |
Tier Behavior (Module-Level)
| Tier |
CRM capability |
| Starter |
Basic customer records (name, contact, purchase history). No charge accounts, no segments beyond built-in, no marketing campaigns. |
| Pro |
Full CRM: charge accounts, custom segments, marketing campaigns (email), tax certs, loyalty, customer reporting, complaint log, follow-up tasks. |
| Enterprise |
+ Customer-specific contract pricing + item visibility rules + auto-debit + multi-property organizations + custom fields per customer + A/B testing in marketing + advanced analytics + activity timeline depth. |
Configurable Defaults (Owner Dashboard)
| Configurable |
Default |
| Default customer type at creation |
Retail walk-in |
| Required fields for new customer |
Name + phone OR email |
| Charge account approval workflow |
ON (manager review required) |
| Default credit limit (new customer) |
$500 |
| Credit hold trigger |
Auto when over limit OR 30+ days late |
| Late fee policy |
OFF (configurable) |
| Statement send frequency |
Monthly |
| Loyalty program enable/disable |
OFF |
| HelloSign-required threshold for credit applications |
Configurable; default = credit limit ≥ $5,000 OR contractor type = commercial/HOA |
| Email marketing opt-in default |
OFF (must opt-in) |
| SMS marketing opt-in default |
OFF (must opt-in) |
| Customer signup discount |
OFF (configurable to ON with amount) |
| Anniversary reward |
OFF |
| Inactive customer threshold |
6 months no purchase |
| At-risk customer threshold |
90 days no purchase |
| Customer data retention |
Tenant-scoped CRM data: 7 years (configurable). Global customer record + nursery_customer join: not subject to tenant-side retention (consumer-owned). On tenant cancellation, tenant-scoped CRM is deleted 90 days post-cancel; global customer record persists. See PROJECT_DECISIONS Tenant Lifecycle. |
| GDPR/CCPA compliance enabled |
ON (per region) |
| Duplicate customer detection |
ON (alert when creating similar) |
| Loyalty tier thresholds |
Bronze $0+, Silver $500+, Gold $2000+ (configurable) |
| A/R aging buckets |
Current / 30 / 60 / 90+ (configurable) |
| Soft delete vs hard delete |
Soft delete only for v1.0; hard delete for GDPR |
| Merge reversal window |
24 hours after merge |
| Auto-create follow-up tasks for new charge accounts |
ON |
| Customer onboarding checklist enabled |
ON |
| Auto-debit available (Pro+) |
OFF by tenant; per-customer opt-in |
AI Features in CRM
| Feature # |
AI capability |
| 7.4 |
AI-powered smart segments (rule generation from natural language) |
| 7.9 |
AI customer scoring / health score |
| 11.7 |
AI drip campaign optimization |
| 11.11 |
AI re-engagement timing optimization |
| 13.9 |
AI predictive churn detection (at-risk customers) |
| 13.8 |
AI purchase pattern analysis (cross-sell recommendations) |
| 15.4 |
AI duplicate detection for merge suggestions |
| 16.2 |
AI suggested follow-up tasks based on customer behavior |
All AI features use AWS Bedrock with Claude Haiku 4.5.
Events Emitted
crm.customer_created
crm.customer_updated
crm.customer_deleted
crm.customer_merged
crm.customer_segment_changed
crm.charge_account_created
crm.credit_limit_changed
crm.credit_hold_triggered
crm.credit_hold_released
crm.payment_received
crm.payment_promise_made
crm.payment_promise_kept
crm.payment_promise_broken
crm.late_fee_applied
crm.statement_generated
crm.loyalty_enrolled
crm.loyalty_tier_changed
crm.marketing_consent_changed
crm.tax_exemption_certificate_added
crm.tax_exemption_certificate_expired
crm.gdpr_data_export_requested
crm.gdpr_data_deletion_requested
crm.campaign_sent
crm.churn_risk_detected
crm.complaint_logged
crm.complaint_resolved
crm.task_created
crm.task_completed
Events Consumed
pos.sale_completed (update purchase history, LTV, retention metrics)
orders.reservation_created (update customer order history)
orders.contractor_order_created (update A/R balance)
purchasing.receipt_recorded (cost basis for LTV calculations)
billing.subscription_changed (enforce tier limits)
API Contract (CRMService — public methods)
High-level surface (detailed signatures during implementation):
- Customer lifecycle:
createCustomer, updateCustomer, mergeCustomers, deleteCustomer, searchCustomers
- Customer type:
setCustomerType, setPricingTier, setItemVisibilityRules, assignSalesRep, linkProject
- Charge account:
createChargeAccount, setCreditLimit, applyPayment, setPaymentPromise, triggerCreditHold, releaseCreditHold, setBillingInstructions, setPaymentMethodPreference, setupAutoDebit, startOnboardingWorkflow
- Segments:
assignTag, removeTag, getSmartSegment, getCustomerLTV, getCustomerScore
- Communication:
setOptIn, setOptOut, getCommunicationHistory, setMarketingExclusion
- Tax:
addTaxCertificate, selectCertificateForSale, trackExpiration
- Loyalty:
enrollLoyalty, accruePoints, redeemPoints, setTier
- Marketing:
createCampaign, sendCampaign, trackCampaignPerformance
- Reports:
getNewCustomers, getRetention, getLTVBySegment, getActivityTimeline, getReturnHistory
- Privacy:
exportCustomerData, deleteCustomerData, correctCustomerData
- Tasks:
createTask, assignTask, completeTask, getOpenTasks
Out of Scope
| Capability |
Why excluded |
| Full CRM with sales pipeline (B2B lead tracking) |
Different product category |
| Email marketing automation platform (like Mailchimp) |
We do basic; for advanced, integrate with Mailchimp |
| Customer service ticket system |
Future v2.0 |
| Customer support chat / live chat |
Future v2.0 |
| Multi-currency customer balances (UI) |
Schema-ready, deferred |
| Customer credit scoring via external service |
Defer |
| Marketing automation deep A/B testing |
Pro+ feature, basic in v1.0 |
| Predictive analytics ML models |
AI-light in v1.0; v2.0+ for deep analytics |
| Customer competitor tracking |
Niche |
| Per-location credit limits (different limits per ship-to) |
Edge case |
| Customer event RSVP deep functionality |
Future v1.2 |
| Customer satisfaction NPS-style tracking |
Future v1.2 |
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 |
| 4 |
Job-level contractor view |
CRM Group 4 has contractor projects (4.11) and per-project history (4.12); no end-to-end job view |
Research §6.1 + §10.C |
Deferred (v1.5) — Ships with job costing module in v1.5. See ROADMAP v1.5. |
| 8 |
Sustainability/eco customer segments |
Sustainability-tagged campaign template added as CRM 11.13 |
Research §10.E |
Accepted — Aligns with growing native plant / pollinator habitat market signal; leverages Inventory 1.4 attributes. |
| 25 |
AI marketing copilot |
No AI suggestion layer for campaigns yet |
Research §6.3.5 |
Deferred (v1.2) — Part of v1.2 AI expansion bundle. See ROADMAP v1.2. |