# Customer dynamics # Use the full canonical form for recurrence references. Bracket shorthand such as # SaaSPL::[Account.Customers]:Year[PREV] is not supported. # Base year is explicit; later years are explicit recurrence rules to avoid overlap. rule SaaSPL::Account.Customers:Year.2026:Scenario.* = Drivers::[Driver.StartingCustomers] rule SaaSPL::Account.Customers:Year.2027:Scenario.* = SaaSPL::Account.Customers:Year[PREV] + Drivers::[Driver.NewCustomers] - SaaSPL::[Account.ChurnedCustomers] rule SaaSPL::Account.Customers:Year.2028:Scenario.* = SaaSPL::Account.Customers:Year[PREV] + Drivers::[Driver.NewCustomers] - SaaSPL::[Account.ChurnedCustomers] rule SaaSPL::Account.ChurnedCustomers:Year.2026:Scenario.* = Drivers::[Driver.StartingCustomers] * Drivers::[Driver.ChurnRate] rule SaaSPL::Account.ChurnedCustomers:Year.2027:Scenario.* = SaaSPL::Account.Customers:Year[PREV] * Drivers::[Driver.ChurnRate] rule SaaSPL::Account.ChurnedCustomers:Year.2028:Scenario.* = SaaSPL::Account.Customers:Year[PREV] * Drivers::[Driver.ChurnRate] # Driver visibility in the PL cube rule SaaSPL::Account.NewCustomers:Year.*:Scenario.* = Drivers::[Driver.NewCustomers] rule SaaSPL::Account.ChurnRate:Year.*:Scenario.* = Drivers::[Driver.ChurnRate] rule SaaSPL::Account.ARPU:Year.*:Scenario.* = Drivers::[Driver.ARPU] # Financial outputs rule SaaSPL::Account.Revenue:Year.*:Scenario.* = SaaSPL::[Account.Customers] * SaaSPL::[Account.ARPU] rule SaaSPL::Account.COGS:Year.*:Scenario.* = SaaSPL::[Account.Revenue] * Drivers::[Driver.COGS_Rate] rule SaaSPL::Account.GrossProfit:Year.*:Scenario.* = SaaSPL::[Account.Revenue] - SaaSPL::[Account.COGS] rule SaaSPL::Account.OperatingExpense:Year.*:Scenario.* = Drivers::[Driver.OperatingExpense] rule SaaSPL::Account.EBITDA:Year.*:Scenario.* = SaaSPL::[Account.GrossProfit] - SaaSPL::[Account.OperatingExpense]