Skip to content

Core Domain Packages

Core domain packages define the foundational data structures and business rules for RightCapital’s financial planning platform.

The central data modeling layer providing 225+ Eloquent models and 105+ enum directories.

  • Unified Model base class with common functionality
  • Comprehensive morph map for polymorphic relationships
  • Auto-synced schema definitions
  • Submodel/JSON field casting with validation
core-models/
├── src/
│ ├── Enums/ # 105+ enum directories
│ │ ├── Common/ # Shared enums
│ │ └── {Model}/ # Model-specific enums
│ ├── Models/ # 225 model classes
│ │ └── Model.php # Base abstract class
│ └── Schemas/ # Auto-generated schemas
├── phpstan_mock/ # PHPStan mock stubs
└── mysql.sql # Database schema dump
Category Examples
User & Organization User, Advisor, Client, Organization, Team
Financial Accounts Account, Investment, BankAccount, LoanAccount
Planning Household, Goal, Scenario, Tweak, TaxReturnTweak
Insurance LifeInsurance, DisabilityInsurance, LtcInsurance
Allocation AllocationByAssetType, GlidePath, TargetCategoryMix
Billing BillingAccount, BillingSubscription, RightpayAccount
Authentication Device, WebauthnCredential, OauthAccessToken, SsoBinding
Workflow Task, Tasklet, Rightflow, Activity
namespace RightCapital\Core\Models;
abstract class Model extends Illuminate\Database\Eloquent\Model {
// Age/year boundaries
public const int AGE_YEAR_BOUNDARY = 150;
public const int FUTURE_YEAR_MIN = 200;
public const int FUTURE_YEAR_MAX = 300;
// Polymorphic relationship mapping
public const array MORPH_MAP = [
'household' => Household::class,
'account' => Account::class,
// ... 200+ mappings
];
}
  • illuminate/database, illuminate/cache, illuminate/redis
  • rightcapital/illuminate-database, rightcapital/illuminate-validation
  • rightcapital/array-helpers, rightcapital/billing-helpers
  • rightcapital/business-validation-rules, rightcapital/financial-networks

YAML-based database seeding utilities for test environment initialization.

src/base.yml
use RightCapital\Core\Seeds\BaseYamlSeeder;
use RightCapital\Core\Seeds\CollegeYamlSeeder;
class BaseYamlSeeder extends YamlSeeder { }
// Loads from: src/college.yml
class CollegeYamlSeeder extends YamlSeeder { }
<!-- In phpunit.xml -->
<env name="TEST_SEEDERS" value="\RightCapital\Core\Seeds\BaseYamlSeeder"/>

Pre-built YAML fixture datasets for automated testing.

Fixture Description Use Case
simple Minimal household + advisor Basic unit tests
simple-minimal-single Single person, minimal data Fast tests
realworld Multi-household, complex assets Integration tests
realworld-single Single household, full features Feature tests
realworld-minimal Multi-household, optimized CI pipeline
realworld-minimal-single Single household, minimal Quick validation
database.yml
_meta:
auto_increment:
accounts: 1001
users: 1
users:
- id: &STANDARD_ADVISOR 1
email: advisor@example.com
type: advisor
households:
- id: 1
advisor_id: *STANDARD_ADVISOR
last_name: "Doe"

Fixtures are loaded by laravel-test-support during test setup:

// In test class
protected function setUp(): void
{
parent::setUp();
$this->seed('realworld');
}

Domain-specific validation rules for financial planning logic.

Rule Range Description
client_birth_year [1900, today) Client birth year
child_birth_year [1900, 2150] Child birth year
general_age (0, 150] Any age value
retirement_age [0, 100] Retirement age
calendar_year [1900, 2199] Any calendar year
Rule Range Description
percentage [0, 100] Standard percentage
high_percentage [0, 200] Extended percentage
annual_increase [0, 100] Annual increase rate
interest_rate [0, 100] Interest rate
investment_cost [0, 100] Investment cost ratio
Rule Range Description
balance [-100M, 100M] Account balance
large_dollar_amount [0, 100M] Large amounts
medium_dollar_amount [0, 15M] Medium amounts
extra_large_dollar_amount [0, 1B] Extra large amounts
insurance_benefit [0, 15M] Insurance benefits
Rule Format Description
us_phone_number 10-digit integer US phone number
us_zip_code ZIP or ZIP+4 US postal code
precision N decimal places Decimal precision
$validator = Validator::make($data, [
'balance' => 'required|balance',
'birth_year' => 'required|client_birth_year',
'percentage' => 'required|percentage',
'phone' => 'required|us_phone_number',
]);

Auto-registers via Laravel’s service provider discovery:

// BusinessValidationRulesServiceProvider
Validator::extend('balance', 'BusinessValidationRules@validateBalance');

Advisor network abstractions for XYPN, AssetMark, and other partnerships.

abstract class BaseNetwork {
abstract static function getNetworkName(): string;
abstract static function getNetworkIdentifierValue(): string;
abstract static function getConflictNetworkIdentifierValues(): array;
abstract static function getAllCouponCodes(): array;
abstract function shouldChargeTerminationFee(): bool;
abstract function canCancelSubscription(): bool;
abstract function getAvailableCouponCode(): string|null;
}
Network Identifier Features
XYPN xypn No termination fee, self-upgrade, keeps pricing tier
AssetMark asset_mark Conflicts with XYPN
$network = match($advisor->network_identifier) {
'xypn' => new XypnNetwork($settings),
'asset_mark' => new AssetMarkNetwork($settings),
};
if ($network->canCancelSubscription()) {
// Allow cancellation UI
}
$plans = $network->getSubscribableStripePriceLookupKeys();
$coupon = $network->getAvailableCouponCode();
// XypnNetwork
public const array COUPON_CODES = ['XYPN2025', 'GrNWeycP'];
public const array SUBSCRIBABLE_PLANS = [
'standard_basic_monthly',
'standard_premium_monthly',
'standard_platinum_monthly',
];

business-validation-rules
core-models ←── financial-networks
core-seeds
core-test-fixtures
Package Type Purpose Key Exports
core-models Data layer Eloquent models + enums 225 models, 105+ enums
core-seeds Test infra YAML database seeders 2 seeder classes
core-test-fixtures Test data Fixture datasets 6 fixture sets
business-validation-rules Validation Domain rules 40+ validation rules
financial-networks Business logic Network abstractions 2 network classes