resources/js/lib/rule-engine.ts protects the description, notes, creditor_name
and debtor_name var references from being lowercased during normalization,
while AutomationRuleService::normalizeRuleJson only listed description and notes.
The two engines had drifted, and nothing stopped them drifting further.
Extend the PHP protected set to the same four fields (the superset) and add a
shared tests/Fixtures/rule-engine-parity.json driven by both a PHP feature test
(via AutomationRuleService::ruleMatches) and a TS vitest suite (via
evaluateRulesForNewTransaction), so the same rule + transaction must yield the
same match/no-match on both sides. Behaviour-preserving: existing creditor/debtor
matching tests already passed, and this closes the divergence for good.