- Shipped
- November 14, 2026 at 10:25 PM UTC
- Author
- Kamo
- Commit
- b42f4e4
- MortgageProgramOffering: ProductEnablement is the single program catalog (version in force today, org time zone; no row = offered on the business type's channels). Program x channel grid = the program's channel list (or the business type's) with ChannelApplicabilityRule exceptions resolved through ChannelApplicabilityResolver. Refusals PROGRAM_NOT_OFFERED / PROGRAM_NOT_ON_CHANNEL **************** plain sentence). - ProgramService derives isActive from it; OrgProgramOverride.isActive retired (rows migrated), setProgramActiveForOrg removed; listOfferedForOrg. **************** refuses a program not offered; programChoice, propertyState, leadPropertyState reads for the controllers' gates. - Company Licenses: LicensingEntry gains print_on_disclosures, disclosure_text, license_name, regulator_name, regulator_phone, display_order; state + dates optional (NMLS company rows; carried-over rows). LicenseStates = the one ISO US-XX normalizer (any spelling, DC + territories). LenderDisclosureProfile reads the merged list (only rows marked Print on disclosures; profile legal name / NMLS fallback). OrgStateLicense + repository deleted (table kept, 0 rows migrated). - LicensingResolver: the property-state gate (evaluate / coverage / propertyStateRefusal STATE_NOT_LICENSED); not configured until a state license exists; org time zone. - License renewal reminders: LicenseRenewalReminder (unique per license/expiry/threshold), finders for the sweep; NotificationKind LICENSE_RENEWAL_COMPANY / LICENSE_RENEWAL_OWN. - ScenarioSupportResolver hard-stops a scenario missing a critical dimension before any override; ProductDiscoveryGate reads the active market profile's rules. Hand DDL applied 2026-11-14 as kamo before this push (sdd/mlosset/ledger/C1-ddl/001, 002).
