Account, Company & Contact Management

Business perspective: Account, Company & Contact Management

1. Business Summary

Maintains the customer master record (Accounts), corporate hierarchy (Companies), people (Contacts), addresses, billing/PO/invoicing options, payment behavior, branches, account teams, marketing/sales attribution, and compliance.

2. Business Value

Single source of truth for everything customer-facing: pricing, invoicing, deliveries, satisfaction.

3. Users / Stakeholders

Sales, account managers, project managers, vendor managers, finance, executives.

4. Workflows

A. Account creation & assignment
- Direct or via lead conversion.
- Sales agent (sales_agent_id), account manager (account_manager_id), PMs (project_pm_id, test_pm_id) assigned.
- Hierarchy via parent_id and root_id; invoicing via invoicing_account_id.

B. Billing/PO configuration
- Set account_invoicing_option_id, account_po_option_id, account_early_payment_option_id, actual_payment_method_id, payment_behavior_id, currency_id, price_book_id, branch_id.

C. Compliance & verification
- verification_status_id, compliant_status_id, current_status_id, last_year_status_id track regulatory and lifecycle state.

D. Customer pattern tracking
- current_pattern_id, previous_pattern_id capture buying behavior changes.

E. Account-Company relationships
- HABTM and AccountRelationship (account_from_id, account_to_id, relationship_id) for ownership, parent/child, sister-co.

5. Sub-Features

  • Multi-level hierarchy (Account → Parent/Root → Invoicing Account).
  • Account team (sales agent + AM + PMs + Test PM + ChecklistGroup + back-up PMs).
  • Contact management with HABTM Communication Channels and emails.
  • Branches per brand.
  • Account references (specialized contacts/refs per account).

6. Business Rules

  • BillingAddress and PrimaryAddress required for invoicing.
  • PriceBook validation: name, currency_id, brand_id, entered_by, last_updated_by all numeric/non-empty.
  • ContactSatisfaction tied to contact + account.

7. Data Entities

Account, Company, Contact, Address, Branch, PriceBook, ContactEmail, ContactSatisfaction, AccountRelationship, CompanyRelationship, AccountInvoicingOption, AccountPoOption, AccountEarlyPaymentOption, AccountEarlyPaymentOptionsDetail, AccountRelationships, ChecklistGroup.

8. Entry Points

  • crm/accounts, crm/companies, crm/contacts, crm/branches, crm/priceBooks, crm/clientPayments.
  • FreshSales sync flows: getAccounts, getContacts.

9. Inputs & Outputs

  • Inputs: account profile, addresses, contacts, billing/PO settings.
  • Outputs: customer master record, account team, billing config.

10. Integrations

  • FreshSales (account/contact import).
  • SAP (account sync — SapController::sapAccountSync).

11. Calculations / Logic

  • Tax rate inferred from Branch.tax_id.
  • Price source = PriceBook.currency vs. Account.currency.
  • Effective AR balance = Σ ClientInvoice.amount – Σ ClientPaymentDetail.amount.

12. Status Lifecycle

  • AccountStatus (active / inactive / closed / suspended).
  • AccountYearStatus (current_status_id, last_year_status_id) for annual retention.
  • Verification, Compliance.

13. Permissions

  • Sales agent, AM, PMs, back-up PMs.
  • Brand isolation.

14. Reports & KPIs

  • Account growth, retention vs. churn (year-status comparison), AR aging, satisfaction score.

15. Risks & Observations

  • Cyclic risk in parent_id/root_id (no validation).
  • Many downstream features assume account financial config — bad data has wide impact.
  • Hard-coded Currency = "##" for SAP account sync (default).

16. Source Code Evidence

  • app/Plugin/crm/Model/Account.php, Company.php, Contact.php, Branch.php, AccountInvoicingOption.php, AccountPoOption.php, AccountRelationship.php, CompanyRelationship.php, ContactSatisfaction.php.
  • app/Plugin/crm/Controller/AccountsController.php, CompaniesController.php, ContactsController.php, BranchesController.php, PriceBooksController.php, accountsContactsController.php.
  • app/Controller/SapController.php :: sapAccountSync (~line 339).

← Deep dives index