<?xml version="1.0" encoding="utf-8"?>
<rbl:kb xmlns:rbl="http://rbl.io/schema/RBLang">

  <!-- ================================================================ -->
  <!-- FCA TARGETED SUPPORT DECISION MODEL                              -->
  <!-- Generic demo and reusable blueprint. Kesterly Wealth, Brindle    -->
  <!-- Financial, Oakhurst Appointed, every product and every consumer  -->
  <!-- are fictional. As-of date 30 July 2026.                          -->
  <!-- ================================================================ -->
  <!-- Decides, for one firm and consumer interaction (a Support Case),  -->
  <!-- whether a ready-made suggestion may be delivered under COBS 9B,   -->
  <!-- which suggestion, on what consumer segment basis, whether the     -->
  <!-- segment level suitability and better position tests are met,      -->
  <!-- what must be disclosed and charged, and where targeted support    -->
  <!-- cannot help, what the consumer must be signposted to. Every       -->
  <!-- outcome carries the rationale a firm would file for FCA           -->
  <!-- supervision.                                                      -->
  <!-- ================================================================ -->
  <!-- Regulatory grounding, all verified against the live Handbook and  -->
  <!-- legislation.gov.uk on 30 August 2026:                             -->
  <!--   FCA PS25/22 Supporting consumers pensions and investment        -->
  <!--   decisions, published 11 December 2025, final rules MADE by the   -->
  <!--   FCA Board 26 February 2026 (instrument FCA 2026/5 dated 2 March  -->
  <!--   2026, Handbook Notice 138), in force 6 April 2026. Permission    -->
  <!--   gateway open from 2 March 2026.                                  -->
  <!--   RAO article 55A inserted by SI 2026/74, made 28 January 2026,    -->
  <!--   in force 23 February 2026 for rule making and permission          -->
  <!--   applications and 6 April 2026 for all other purposes.             -->
  <!--   Article 55A(2): a person providing targeted support is NOT        -->
  <!--   advising under article 53. Article 55A(3): grouping on similar    -->
  <!--   characteristics or circumstances, a recommendation presented as   -->
  <!--   suitable for the INDIVIDUAL on the basis of the individual being  -->
  <!--   in the group, and the statement. Article 55A(4) and (5): the      -->
  <!--   statement must say the recommendation is not based on             -->
  <!--   comprehensive consideration, is not specific to the individual,   -->
  <!--   and must specify the group characteristics, at the same time as   -->
  <!--   the recommendation.                                               -->
  <!--   COBS 9B.1 purpose incl the better position test at 9B.1.1G and    -->
  <!--   9B.1.2G, both GUIDANCE. COBS 9B.2 application incl 9B.2.3R the    -->
  <!--   safeguarded benefits prohibition and 9B.2.4G no appointed         -->
  <!--   representatives. COBS 9B.3 general provisions.                    -->
  <!--   COBS 9B.4 design incl 4.4R 4.5R 4.7R 4.9R 4.11R 4.16R 4.17R       -->
  <!--   4.20R the BINDING segment level suitability rule, 4.24G 4.26R      -->
  <!--   4.28R 4.32R 4.33R 4.35R, 4.38R which itself covers express AND     -->
  <!--   IMPLIED consolidation with the 4.39G definition and the 4.40G      -->
  <!--   and 4.41G carve outs, 4.42R. COBS 9B.5 delivery incl 5.3R 5.5R     -->
  <!--   5.7R 5.11R 5.14R the service opt out. COBS 9B.6 disclosure incl    -->
  <!--   6.1R 6.3R 6.4R 6.5R 6.9R 6.17R with the 6.18G fallback, 6.19G.     -->
  <!--   COBS 9B.7 unable to suggest incl 7.3G and 7.4G.                    -->
  <!--   COBS 9B.8 charging incl 8.2R 8.3R 8.4R 8.7R 8.8R 8.9R.             -->
  <!--   COBS 9B.10 systems and controls incl 10.1R 10.4G 10.6R 10.9R       -->
  <!--   10.12G. PRIN 2A Consumer Duty incl 2A.4.2R fair value via COBS     -->
  <!--   9B.4.2R(2). PROD as amended by FCA 2026/5 (there is no PROD 8      -->
  <!--   targeted support chapter). FG21/1 four drivers of vulnerability.   -->
  <!--   COBS 19.7 pensions nudge, which continues to apply. DISP and the   -->
  <!--   11 December 2025 joint statements by the FCA with the Financial    -->
  <!--   Ombudsman Service and with the ICO. UK GDPR articles 22A to 22D    -->
  <!--   as inserted by the Data Use and Access Act 2025, in force          -->
  <!--   5 February 2026, ICO ADM guidance in DRAFT. PECR regulation 22;    -->
  <!--   the workplace pension soft opt in SI is PENDING, not law.          -->
  <!-- ================================================================ -->
  <!-- IMPORTANT MODELLING NOTE. The FCA publishes NO thresholds for       -->
  <!-- excess cash, under saving, sustainable withdrawal, small pots or    -->
  <!-- fund concentration. Every numeric threshold in this graph is        -->
  <!-- FIRM POLICY requiring evidence under COBS 9B.4.11R(2), and lives    -->
  <!-- as a fact on the Kesterly Targeted Support Policy instance.         -->
  <!-- Recalibrate there, never in rules.                                  -->
  <!-- ================================================================ -->
  <!-- Consumer segments and ready made suggestions are likewise DATA,     -->
  <!-- not rules. A new segment is a set of facts, never a code change.    -->
  <!-- ================================================================ -->

  <!-- ============================ Concepts ========================== -->

  <concept name="Support Case" type="string"/>
  <concept name="Consumer" type="string"/>
  <concept name="Firm" type="string"/>
  <concept name="Policy" type="string"/>
  <concept name="Situation" type="string"/>
  <concept name="Situation Key" type="string"/>
  <concept name="Segment" type="string"/>
  <concept name="Characteristic" type="string"/>
  <concept name="Age Band" type="string"/>
  <concept name="Suggestion" type="string"/>
  <concept name="Product" type="string"/>
  <concept name="Product Category" type="string"/>
  <concept name="Pension Pot" type="string"/>
  <concept name="Investment Holding" type="string"/>
  <concept name="Data Item" type="string"/>
  <concept name="Data Record" type="string"/>
  <concept name="Provenance" type="string"/>
  <concept name="Assumption" type="string"/>
  <concept name="Evidence Basis" type="string"/>
  <concept name="Projection" type="string"/>
  <concept name="Better Position Definition" type="string"/>
  <concept name="Metric" type="string"/>
  <concept name="Vulnerability Indicator" type="string"/>
  <concept name="Vulnerability Driver" type="string"/>
  <concept name="Contra Indication" type="string"/>
  <concept name="Design Defect" type="string"/>
  <concept name="Compliance Defect" type="string"/>
  <concept name="Delivery Block" type="string"/>
  <concept name="Disclosure Item" type="string"/>
  <concept name="Disclosure Stage" type="string"/>
  <concept name="Signpost" type="string"/>
  <concept name="Outcome" type="string"/>
  <concept name="Rationale" type="string"/>
  <concept name="Evidence" type="string"/>
  <concept name="Next Step" type="string"/>
  <concept name="Channel" type="string"/>
  <concept name="Message Type" type="string"/>
  <concept name="Marketing Preference" type="string"/>
  <concept name="Initiation Basis" type="string"/>
  <concept name="Benefit Type" type="string"/>
  <concept name="Charge Basis" type="string"/>
  <concept name="Client Category" type="string"/>
  <concept name="Benefit Structure" type="string"/>
  <concept name="Scheme Type" type="string"/>
  <concept name="Access Method" type="string"/>
  <concept name="Objective" type="string"/>
  <concept name="Risk Band" type="string"/>
  <concept name="Volunteered Route" type="string"/>
  <concept name="Permission" type="string"/>
  <concept name="Domain" type="string"/>
  <concept name="Jurisdiction" type="string"/>
  <concept name="Value Text" type="string"/>
  <concept name="MI Field" type="string"/>
  <concept name="Version Tag" type="string"/>
  <concept name="Equality Justification" type="string"/>
  <concept name="Automated Decision Status" type="string"/>
  <concept name="Reporting Classification" type="string"/>
  <concept name="Lawful Basis" type="string"/>

  <concept name="Amount" type="number"/>
  <concept name="Percent" type="number"/>
  <concept name="Count" type="number"/>
  <concept name="Year Count" type="number"/>
  <concept name="Month Count" type="number"/>
  <concept name="Day Count" type="number"/>
  <concept name="Age" type="number"/>
  <concept name="Ordinal" type="number"/>
  <concept name="Priority" type="number"/>

  <concept name="Assessment Date" type="date"/>
  <concept name="Record Date" type="date"/>
  <concept name="Regime Date" type="date"/>

  <concept name="Flag" type="truth"/>

  <!-- ======================= Relationships ========================== -->
  <!-- Askability posture. Systems of record, firm configuration, policy -->
  <!-- parameters, projections and every derived or query target rel are -->
  <!-- askable none and injected by datasource or API. Only facts a      -->
  <!-- human in the interaction could genuinely answer are askable.      -->
  <!-- There are NO plural askables, because plural askables are always  -->
  <!-- re-asked even when injected, which would make a question free     -->
  <!-- straight through run impossible.                                  -->

  <!-- Case link layer -->
  <rel name="case concerns consumer" subject="Support Case" object="Consumer" askable="none" canAdd="all"/>
  <rel name="case is delivered by firm" subject="Support Case" object="Firm" askable="none" canAdd="all"/>
  <rel name="case applies policy" subject="Support Case" object="Policy" askable="none"/>
  <rel name="case has assessment date" subject="Support Case" object="Assessment Date" askable="none"/>
  <rel name="case concerns domain" subject="Support Case" object="Domain" askable="none"/>
  <rel name="case has delivery channel" subject="Support Case" object="Channel" askable="none"/>
  <rel name="case has message type" subject="Support Case" object="Message Type" askable="none"/>
  <rel name="case has initiation basis" subject="Support Case" object="Initiation Basis" askable="none"/>
  <rel name="case has jurisdiction" subject="Support Case" object="Jurisdiction" askable="none"/>
  <rel name="case has model version" subject="Support Case" object="Version Tag" askable="none"/>

  <!-- Policy parameters. Every threshold in the model lives here. -->
  <rel name="policy has emergency fund months" subject="Policy" object="Month Count" askable="none"/>
  <rel name="policy has excess cash floor amount" subject="Policy" object="Amount" askable="none"/>
  <rel name="policy has concentration limit percent" subject="Policy" object="Percent" askable="none"/>
  <rel name="policy has portfolio minimum value" subject="Policy" object="Amount" askable="none"/>
  <rel name="policy has sustainable withdrawal percent" subject="Policy" object="Percent" askable="none"/>
  <rel name="policy has contribution adequacy target percent" subject="Policy" object="Percent" askable="none"/>
  <rel name="policy has retirement proximity years" subject="Policy" object="Year Count" askable="none"/>
  <rel name="policy has small pot value ceiling" subject="Policy" object="Amount" askable="none"/>
  <rel name="policy has small pot count threshold" subject="Policy" object="Count" askable="none"/>
  <rel name="policy has better position materiality percent" subject="Policy" object="Percent" askable="none"/>
  <rel name="policy has minimum projection horizon years" subject="Policy" object="Year Count" askable="none"/>
  <rel name="policy has minimum adult age" subject="Policy" object="Age" askable="none"/>
  <rel name="policy has isa annual allowance" subject="Policy" object="Amount" askable="none"/>
  <rel name="policy has regime commencement date" subject="Policy" object="Regime Date" askable="none"/>
  <rel name="policy has version tag" subject="Policy" object="Version Tag" askable="none"/>
  <rel name="policy has median fund charge percent" subject="Policy" object="Percent" askable="none"/>
  <rel name="policy has higher rate threshold amount" subject="Policy" object="Amount" askable="none"/>
  <rel name="policy has minimum pension provision amount" subject="Policy" object="Amount" askable="none"/>

  <!-- Firm configuration -->
  <rel name="firm holds permission" subject="Firm" object="Permission" plural="true" askable="none"/>
  <rel name="firm is appointed representative" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm defines segment" subject="Firm" object="Segment" plural="true" askable="none"/>
  <rel name="firm offers situation" subject="Firm" object="Situation" plural="true" askable="none"/>
  <rel name="firm has systems and controls" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has trained staff" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has tested disclosures" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has outcome monitoring" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has differential outcome monitoring" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has review frequency months" subject="Firm" object="Month Count" askable="none"/>
  <rel name="firm has root cause process" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has governing body report" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has accountable senior manager" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has minimum capital met" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has vulnerable customer evaluation" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm charges for targeted support" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has charge basis" subject="Firm" object="Charge Basis" askable="none"/>
  <rel name="firm has fair value assessment" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm discloses charge in cash terms" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm provides charge in durable medium" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm receives benefit" subject="Firm" object="Benefit Type" plural="true" askable="none"/>
  <rel name="firm discloses differential cost" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm provides disclosure item" subject="Firm" object="Disclosure Item" plural="true" askable="none"/>
  <rel name="firm provides durable medium at delivery" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has lawful basis" subject="Firm" object="Lawful Basis" askable="none"/>
  <rel name="firm has special category condition" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has granular marketing consent record" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm separates marketing and service records" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm has human review point" subject="Firm" object="Flag" askable="none"/>
  <rel name="firm provides data subject explanation" subject="Firm" object="Flag" askable="none"/>

  <!-- Situation configuration, incl the granularity floor and ceiling -->
  <rel name="situation requires minimum characteristics" subject="Situation" object="Count" askable="none"/>
  <rel name="situation permits maximum characteristics" subject="Situation" object="Count" askable="none"/>
  <rel name="situation flags poor practice characteristic" subject="Situation" object="Characteristic" plural="true" askable="none"/>
  <rel name="situation has priority" subject="Situation" object="Priority" askable="none"/>
  <rel name="situation belongs to domain" subject="Situation" object="Domain" askable="none"/>
  <rel name="situation has trigger characteristic" subject="Situation" object="Characteristic" plural="true" askable="none"/>

  <!-- Segment configuration -->
  <rel name="segment addresses situation" subject="Segment" object="Situation" askable="none"/>
  <rel name="segment requires characteristic" subject="Segment" object="Characteristic" plural="true" askable="none"/>
  <rel name="segment excludes characteristic" subject="Segment" object="Characteristic" plural="true" askable="none"/>
  <rel name="segment requires data item" subject="Segment" object="Data Item" plural="true" askable="none"/>
  <rel name="segment has suggestion" subject="Segment" object="Suggestion" plural="true" askable="none"/>
  <rel name="segment relies on assumption" subject="Segment" object="Assumption" plural="true" askable="none"/>
  <rel name="segment has better position definition" subject="Segment" object="Better Position Definition" askable="none"/>
  <rel name="segment has alternative vulnerable segment" subject="Segment" object="Segment" askable="none"/>
  <rel name="segment has documented vulnerability rationale" subject="Segment" object="Flag" askable="none"/>
  <rel name="segment has prevalence rationale" subject="Segment" object="Flag" askable="none"/>
  <rel name="segment characteristic relevant to suggestion" subject="Segment" object="Characteristic" plural="true" askable="none"/>

  <!-- Characteristic configuration -->
  <rel name="characteristic engages protected characteristic" subject="Characteristic" object="Flag" askable="none"/>
  <rel name="characteristic has equality justification" subject="Characteristic" object="Equality Justification" askable="none"/>
  <rel name="characteristic derives from data item" subject="Characteristic" object="Data Item" plural="true" askable="none"/>
  <rel name="age band has lower edge" subject="Age Band" object="Age" askable="none"/>
  <rel name="age band has upper edge" subject="Age Band" object="Age" askable="none"/>
  <rel name="age band has characteristic" subject="Age Band" object="Characteristic" askable="none"/>

  <!-- Assumption configuration -->
  <rel name="assumption is material to suitability" subject="Assumption" object="Flag" askable="none"/>
  <rel name="assumption has evidence basis" subject="Assumption" object="Evidence Basis" askable="none"/>
  <rel name="assumption is permitted" subject="Assumption" object="Flag" askable="none"/>

  <!-- Suggestion configuration -->
  <rel name="suggestion references product" subject="Suggestion" object="Product" plural="true" askable="none"/>
  <rel name="suggestion is consolidation recommendation" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion transfers into existing arrangement" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion transfers multiple arrangements" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion concerns annuity" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion names particular annuity" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion includes annuity quote" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion limited to annuity features" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion relies on life expectancy assumption" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion has cost consideration record" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion has target market confirmation" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion has provider strength record" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion presents group basis" subject="Suggestion" object="Flag" askable="none"/>
  <rel name="suggestion is contraindicated by characteristic" subject="Suggestion" object="Characteristic" plural="true" askable="none"/>
  <rel name="suggestion is contraindicated by indicator" subject="Suggestion" object="Contra Indication" plural="true" askable="none"/>
  <rel name="contra indication is readily accessible" subject="Contra Indication" object="Flag" askable="none"/>
  <rel name="suggestion suggests access method" subject="Suggestion" object="Access Method" askable="none"/>

  <!-- Product configuration -->
  <rel name="product has category" subject="Product" object="Product Category" askable="none"/>
  <rel name="product is packaged" subject="Product" object="Flag" askable="none"/>
  <rel name="product is leveraged or illiquid" subject="Product" object="Flag" askable="none"/>
  <rel name="product has significant adaptation notice" subject="Product" object="Flag" askable="none"/>
  <rel name="product adaptation reviewed" subject="Product" object="Flag" askable="none"/>
  <rel name="product has differential cost through targeted support" subject="Product" object="Flag" askable="none"/>
  <rel name="product target market includes segment" subject="Product" object="Segment" plural="true" askable="none"/>
  <rel name="category is prohibited" subject="Product Category" object="Flag" askable="none"/>

  <!-- Benefit and disclosure configuration -->
  <rel name="benefit type is permitted" subject="Benefit Type" object="Flag" askable="none"/>
  <rel name="benefit type is annuity referral only" subject="Benefit Type" object="Flag" askable="none"/>
  <rel name="disclosure item required at stage" subject="Disclosure Item" object="Disclosure Stage" askable="none"/>
  <rel name="disclosure item is liability disclaimer" subject="Disclosure Item" object="Flag" askable="none"/>

  <!-- Vulnerability configuration, FG21/1 four drivers -->
  <rel name="vulnerability indicator belongs to driver" subject="Vulnerability Indicator" object="Vulnerability Driver" askable="none"/>
  <rel name="vulnerability indicator requires referral" subject="Vulnerability Indicator" object="Flag" askable="none"/>
  <rel name="vulnerability indicator requires adjusted delivery" subject="Vulnerability Indicator" object="Flag" askable="none"/>

  <!-- Data item configuration -->
  <rel name="data item is readily accessible" subject="Data Item" object="Flag" askable="none"/>
  <rel name="data item has staleness window days" subject="Data Item" object="Day Count" askable="none"/>
  <!-- Provenance strength is DATA, per the FCA good practice on readily   -->
  <!-- accessible evidence, so the weak provenance list is a data edit.    -->
  <rel name="provenance is weak" subject="Provenance" object="Flag" askable="none"/>

  <!-- Consumer data, injected by platform and open finance datasources -->
  <rel name="consumer has age" subject="Consumer" object="Age" askable="none"/>
  <rel name="consumer has client categorisation" subject="Consumer" object="Client Category" askable="none"/>
  <rel name="consumer is natural person" subject="Consumer" object="Flag" askable="none"/>
  <rel name="consumer has scheme type" subject="Consumer" object="Scheme Type" askable="none"/>
  <rel name="consumer has residence" subject="Consumer" object="Jurisdiction" askable="none"/>
  <rel name="consumer has pension pot" subject="Consumer" object="Pension Pot" plural="true" askable="none" canAdd="all"/>
  <rel name="consumer has investment holding" subject="Consumer" object="Investment Holding" plural="true" askable="none" canAdd="all"/>
  <rel name="consumer has cash balance" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has monthly essential expenditure" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has contribution rate percent" subject="Consumer" object="Percent" askable="none"/>
  <rel name="consumer has pensionable salary" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has target retirement age" subject="Consumer" object="Age" askable="none"/>
  <rel name="consumer has annual withdrawal amount" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has drawdown fund value" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has isa subscription used" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has unwrapped holding value" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has taxable income" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has problem debt" subject="Consumer" object="Flag" askable="none"/>
  <rel name="consumer has crm vulnerability flag" subject="Consumer" object="Vulnerability Indicator" plural="true" askable="none"/>
  <rel name="consumer has marketing preference" subject="Consumer" object="Marketing Preference" askable="none"/>
  <rel name="consumer has consented to electronic marketing" subject="Consumer" object="Flag" askable="none"/>
  <rel name="consumer is workplace pension member" subject="Consumer" object="Flag" askable="none"/>
  <rel name="consumer meets standard soft opt in" subject="Consumer" object="Flag" askable="none"/>
  <rel name="consumer has benefit structure" subject="Consumer" object="Benefit Structure" plural="true" askable="none"/>
  <rel name="consumer has capacity established" subject="Consumer" object="Flag" askable="none"/>
  <rel name="consumer is third party represented" subject="Consumer" object="Flag" askable="none"/>
  <rel name="consumer has data record" subject="Consumer" object="Data Record" plural="true" askable="none" canAdd="all"/>
  <rel name="consumer has contra indicator" subject="Consumer" object="Contra Indication" plural="true" askable="none"/>
  <rel name="consumer has volunteered information item" subject="Consumer" object="Value Text" plural="true" askable="none"/>

  <rel name="pot has value" subject="Pension Pot" object="Amount" askable="none"/>
  <rel name="pot has benefit structure" subject="Pension Pot" object="Benefit Structure" askable="none"/>
  <rel name="holding has value" subject="Investment Holding" object="Amount" askable="none"/>
  <rel name="holding is diversified fund" subject="Investment Holding" object="Flag" askable="none"/>
  <rel name="holding has ongoing charge percent" subject="Investment Holding" object="Percent" askable="none"/>

  <rel name="record covers data item" subject="Data Record" object="Data Item" askable="none"/>
  <rel name="record has provenance" subject="Data Record" object="Provenance" askable="none"/>
  <rel name="record has as at date" subject="Data Record" object="Record Date" askable="none"/>
  <rel name="record states number value" subject="Data Record" object="Amount" askable="none"/>
  <rel name="record states text value" subject="Data Record" object="Value Text" askable="none"/>
  <rel name="record has ordinal" subject="Data Record" object="Ordinal" askable="none"/>

  <!-- Askable layer. Thirteen singular askables, no plural askables. -->
  <rel name="consumer has requested support type" subject="Consumer" object="Situation" askable="secondFormObject" allowUnknown="true" canAdd="all">
    <secondFormObject>Which kind of support has %S asked the firm for?</secondFormObject>
  </rel>
  <rel name="consumer has stated objective" subject="Consumer" object="Objective" askable="secondFormObject" allowUnknown="true" canAdd="all">
    <secondFormObject>What has %S said they are trying to achieve?</secondFormObject>
  </rel>
  <rel name="consumer has declined targeted support" subject="Consumer" object="Flag" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Has %S elected not to receive a targeted support service?</secondFormObject>
  </rel>
  <rel name="consumer is receiving investment advice" subject="Consumer" object="Flag" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Is %S receiving, or have they recently received, investment advice?</secondFormObject>
  </rel>
  <rel name="consumer understands advice distinction" subject="Consumer" object="Flag" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Has %S confirmed they understand how targeted support differs from advice?</secondFormObject>
  </rel>
  <rel name="consumer has volunteered further information" subject="Consumer" object="Flag" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Has %S volunteered further information during the interaction?</secondFormObject>
  </rel>
  <rel name="consumer has chosen volunteered information route" subject="Consumer" object="Volunteered Route" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>How is the firm handling the further information %S volunteered?</secondFormObject>
  </rel>
  <rel name="consumer confirms verified stale data" subject="Consumer" object="Flag" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Has %S confirmed the out of date information the firm holds?</secondFormObject>
  </rel>
  <rel name="consumer has vulnerability disclosure" subject="Consumer" object="Vulnerability Indicator" askable="secondFormObject" allowUnknown="true" canAdd="all">
    <secondFormObject>Has %S disclosed a circumstance that affects how they need to be supported?</secondFormObject>
  </rel>
  <rel name="consumer agrees to targeted support charge" subject="Consumer" object="Flag" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Has %S agreed the targeted support charge before the service is provided?</secondFormObject>
  </rel>
  <rel name="consumer requests inconsistent transaction" subject="Consumer" object="Flag" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Has %S asked to transact inconsistently with the suggestion?</secondFormObject>
  </rel>
  <rel name="consumer has risk tolerance band" subject="Consumer" object="Risk Band" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Which band describes the investment risk %S says they will accept?</secondFormObject>
  </rel>
  <rel name="consumer has capacity for loss band" subject="Consumer" object="Risk Band" askable="secondFormObject" allowUnknown="true">
    <secondFormObject>Which band describes the capital loss %S says they could absorb?</secondFormObject>
  </rel>

  <!-- Projection layer, the firm modelling behind the better position test -->
  <rel name="projection assesses segment" subject="Projection" object="Segment" askable="none"/>
  <rel name="projection assesses suggestion" subject="Projection" object="Suggestion" askable="none"/>
  <rel name="projection has baseline value" subject="Projection" object="Amount" askable="none"/>
  <rel name="projection has supported value" subject="Projection" object="Amount" askable="none"/>
  <rel name="projection has cost of acting" subject="Projection" object="Amount" askable="none"/>
  <rel name="projection has horizon years" subject="Projection" object="Year Count" askable="none"/>
  <rel name="projection has detriment risk" subject="Projection" object="Flag" askable="none"/>
  <rel name="projection has evidence basis" subject="Projection" object="Evidence Basis" askable="none"/>
  <rel name="projection has gross improvement" subject="Projection" object="Amount" askable="none"/>
  <rel name="projection has net improvement" subject="Projection" object="Amount" askable="none"/>
  <rel name="projection has improvement percent" subject="Projection" object="Percent" askable="none"/>
  <rel name="segment has projection" subject="Segment" object="Projection" plural="true" askable="none"/>
  <rel name="better position definition has metric" subject="Better Position Definition" object="Metric" askable="none"/>
  <rel name="better position definition has threshold" subject="Better Position Definition" object="Amount" askable="none"/>

  <!-- Derived: consumer aggregates and characteristics -->
  <rel name="consumer has pot value" subject="Consumer" object="Amount" plural="true" askable="none"/>
  <rel name="consumer has holding value" subject="Consumer" object="Amount" plural="true" askable="none"/>
  <rel name="consumer has non diversified holding value" subject="Consumer" object="Amount" plural="true" askable="none"/>
  <rel name="consumer has holding charge percent" subject="Consumer" object="Percent" plural="true" askable="none"/>
  <rel name="consumer has small pot" subject="Consumer" object="Pension Pot" plural="true" askable="none"/>
  <rel name="consumer has total pension provision" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has portfolio value" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has largest single holding value" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has concentration percent" subject="Consumer" object="Percent" askable="none"/>
  <rel name="consumer has small pot count" subject="Consumer" object="Count" askable="none"/>
  <rel name="consumer has emergency buffer amount" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has excess cash amount" subject="Consumer" object="Amount" askable="none"/>
  <rel name="consumer has years to target retirement" subject="Consumer" object="Year Count" askable="none"/>
  <rel name="consumer has withdrawal rate percent" subject="Consumer" object="Percent" askable="none"/>
  <rel name="consumer has highest ongoing charge percent" subject="Consumer" object="Percent" askable="none"/>
  <rel name="consumer has characteristic" subject="Consumer" object="Characteristic" plural="true" askable="none"/>
  <rel name="consumer lacks characteristic" subject="Consumer" object="Characteristic" plural="true" askable="none"/>
  <rel name="consumer has characteristic provenance record" subject="Consumer" object="Value Text" plural="true" askable="none"/>
  <rel name="consumer has weakly evidenced characteristic" subject="Consumer" object="Characteristic" plural="true" askable="none"/>

  <!-- Derived: data quality -->
  <rel name="consumer has ordinal mark" subject="Consumer" object="Value Text" plural="true" askable="none"/>
  <rel name="case has current data item" subject="Support Case" object="Data Item" plural="true" askable="none"/>
  <rel name="case has stale data item" subject="Support Case" object="Data Item" plural="true" askable="none"/>
  <rel name="consumer has contradictory data item" subject="Consumer" object="Data Item" plural="true" askable="none"/>
  <rel name="consumer has record integrity defect" subject="Consumer" object="Design Defect" plural="true" askable="none"/>

  <!-- Derived: situations and the composed key tally -->
  <rel name="case is in situation" subject="Support Case" object="Situation" plural="true" askable="none"/>
  <rel name="case has situation key" subject="Support Case" object="Situation Key" plural="true" askable="none"/>
  <rel name="situation key is for situation" subject="Situation Key" object="Situation" askable="none"/>
  <rel name="situation key covers segment" subject="Situation Key" object="Segment" plural="true" askable="none"/>
  <rel name="case has multiple alignment defect" subject="Support Case" object="Situation" plural="true" askable="none"/>

  <!-- Derived: segment design validation -->
  <rel name="segment has design defect" subject="Segment" object="Design Defect" plural="true" askable="none"/>
  <rel name="segment design is compliant" subject="Segment" object="Flag" askable="none"/>
  <rel name="segment is usable" subject="Segment" object="Flag" askable="none"/>
  <rel name="case has defective matching segment" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has usable segment" subject="Support Case" object="Segment" plural="true" askable="none"/>

  <!-- Derived: segment qualification, three valued and fail safe -->
  <rel name="case has unmet including requirement" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has excluding characteristic hit" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has unresolved excluding characteristic" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has alignment gap record" subject="Support Case" object="Value Text" plural="true" askable="none"/>
  <rel name="case has candidate segment" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case qualifies for segment" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has data gap for segment" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has stale data for segment" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has contradictory data for segment" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has sufficient data for segment" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has confirmed alignment with segment" subject="Support Case" object="Segment" plural="true" askable="none"/>
  <rel name="case has selected segment" subject="Support Case" object="Segment" askable="none"/>
  <rel name="case has deferred situation" subject="Support Case" object="Situation" plural="true" askable="none"/>
  <rel name="case has aligned situation priority" subject="Support Case" object="Priority" plural="true" askable="none"/>

  <!-- Derived: exclusions, contra indication, vulnerability -->
  <rel name="case has contra indication" subject="Support Case" object="Contra Indication" plural="true" askable="none"/>
  <rel name="case has vulnerability driver" subject="Support Case" object="Vulnerability Driver" plural="true" askable="none"/>
  <rel name="case requires vulnerability referral" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case requires adjusted delivery" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case requires advice distinction explanation" subject="Support Case" object="Flag" askable="none"/>

  <!-- Derived: suggestion selection and product scope -->
  <rel name="case has candidate suggestion" subject="Support Case" object="Suggestion" plural="true" askable="none"/>
  <rel name="case has delivery block" subject="Support Case" object="Delivery Block" plural="true" askable="none"/>
  <rel name="case has deliverable suggestion" subject="Support Case" object="Suggestion" plural="true" askable="none"/>
  <rel name="case has selected suggestion" subject="Support Case" object="Suggestion" askable="none"/>

  <!-- Derived: segment suitability and better position, kept separate -->
  <rel name="segment suitability established" subject="Segment" object="Flag" askable="none"/>
  <rel name="segment has better position established" subject="Segment" object="Flag" askable="none"/>
  <rel name="segment lacks better position evidence" subject="Segment" object="Flag" askable="none"/>
  <rel name="case has segment suitability established" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case has better position established" subject="Support Case" object="Flag" askable="none"/>

  <!-- Derived: charging, disclosure, perimeter and compliance defects -->
  <rel name="case has compliance defect" subject="Support Case" object="Compliance Defect" plural="true" askable="none"/>
  <rel name="case has disclosure gap" subject="Support Case" object="Disclosure Item" plural="true" askable="none"/>
  <rel name="case delivers article 55A statement" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case has charging compliant" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case has disclosure complete" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case is within perimeter" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case is within cobs 9b scope" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case has lawful initiation" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case has marketing permission" subject="Support Case" object="Flag" askable="none"/>

  <!-- Derived: signposting and next steps -->
  <rel name="case requires signpost" subject="Support Case" object="Signpost" plural="true" askable="none"/>
  <rel name="case requires next step" subject="Support Case" object="Next Step" plural="true" askable="none"/>

  <!-- Derived: outcomes -->
  <rel name="case has candidate outcome" subject="Support Case" object="Outcome" plural="true" askable="none"/>
  <rel name="case has final outcome" subject="Support Case" object="Outcome" askable="none"/>
  <rel name="outcome has precedence" subject="Outcome" object="Priority" askable="none"/>
  <rel name="case has candidate precedence" subject="Support Case" object="Priority" plural="true" askable="none"/>
  <rel name="case has top precedence" subject="Support Case" object="Priority" askable="none"/>

  <!-- Derived: supervisory file, evidence, MI, versioning -->
  <rel name="case has supervisory file entry" subject="Support Case" object="Rationale" plural="true" askable="none"/>
  <rel name="case has contributing evidence" subject="Support Case" object="Evidence" plural="true" askable="none"/>
  <rel name="case has mi field" subject="Support Case" object="MI Field" plural="true" askable="none"/>
  <rel name="case has automated decision status" subject="Support Case" object="Automated Decision Status" askable="none"/>
  <rel name="case requires human review" subject="Support Case" object="Flag" askable="none"/>
  <rel name="case has reporting classification" subject="Support Case" object="Reporting Classification" askable="none"/>

  <!-- ======================= Concept Instances ====================== -->
  <!-- Consumers, Support Cases, Pension Pots, Investment Holdings and   -->
  <!-- Data Records are NOT declared here. They arrive per case by       -->
  <!-- injection or datasource and are auto instantiated by the engine.  -->

  <concinst name="Kesterly Wealth" type="Firm"/>
  <concinst name="Brindle Financial" type="Firm"/>
  <concinst name="Oakhurst Appointed" type="Firm"/>
  <concinst name="Kesterly Targeted Support Policy" type="Policy"/>

  <concinst name="Providing Targeted Support" type="Permission"/>
  <concinst name="Advising On Investments" type="Permission"/>
  <concinst name="Pension" type="Domain"/>
  <concinst name="Retail Investment" type="Domain"/>
  <concinst name="Pure Protection" type="Domain"/>
  <concinst name="United Kingdom" type="Jurisdiction"/>
  <concinst name="Outside United Kingdom" type="Jurisdiction"/>
  <concinst name="Policy Version 2026 04 A" type="Version Tag"/>
  <concinst name="Model Version 1 0 0" type="Version Tag"/>

  <!-- Situations. Eight firm defined situations across both domains. -->
  <concinst name="Investing Excess Cash" type="Situation"/>
  <concinst name="Improving Portfolio Diversification" type="Situation"/>
  <concinst name="Selecting A Tax Wrapper" type="Situation"/>
  <concinst name="Reducing Investment Costs" type="Situation"/>
  <concinst name="Increasing Pension Contributions" type="Situation"/>
  <concinst name="Choosing How To Access A Pension" type="Situation"/>
  <concinst name="Setting A Sustainable Withdrawal Rate" type="Situation"/>
  <concinst name="Dealing With Multiple Small Pots" type="Situation"/>

  <!-- Segments. Eleven compliant plus three deliberately defective. -->
  <concinst name="Cash Heavy Younger Accumulator" type="Segment"/>
  <concinst name="Cash Heavy Pre Retiree" type="Segment"/>
  <concinst name="Concentrated Single Holding Investor" type="Segment"/>
  <concinst name="Unwrapped Investor" type="Segment"/>
  <concinst name="High Cost Legacy Fund Holder" type="Segment"/>
  <concinst name="Workplace Under Saver Early Career" type="Segment"/>
  <concinst name="Workplace Under Saver Mid Career" type="Segment"/>
  <concinst name="Approaching Retirement Access Decision" type="Segment"/>
  <concinst name="Annuity Interest Approaching Retirement" type="Segment"/>
  <concinst name="Unsustainable Drawdown Segment" type="Segment"/>
  <concinst name="Multiple Small Pots Non Consolidation" type="Segment"/>
  <concinst name="Cash Segment Without Exclusions" type="Segment"/>
  <concinst name="Over Individualised Drawdown Segment" type="Segment"/>
  <concinst name="Small Pot Consolidation Segment" type="Segment"/>

  <!-- Characteristics. Including and excluding vocabulary. -->
  <concinst name="Aged 25 To 39" type="Characteristic"/>
  <concinst name="Aged 30 To 44" type="Characteristic"/>
  <concinst name="Aged 40 To 54" type="Characteristic"/>
  <concinst name="Aged 55 To 64" type="Characteristic"/>
  <concinst name="Excess Cash Above Emergency Buffer" type="Characteristic"/>
  <concinst name="Has Emergency Fund" type="Characteristic"/>
  <concinst name="No Emergency Fund" type="Characteristic"/>
  <concinst name="No Problem Debt" type="Characteristic"/>
  <concinst name="Problem Debt Present" type="Characteristic"/>
  <concinst name="Accepts Investment Risk Over Medium Term" type="Characteristic"/>
  <concinst name="Cannot Tolerate Capital Loss" type="Characteristic"/>
  <concinst name="Single Holding Concentration Above Limit" type="Characteristic"/>
  <concinst name="Portfolio Above Minimum Value" type="Characteristic"/>
  <concinst name="Holds Unwrapped Investments" type="Characteristic"/>
  <concinst name="ISA Allowance Unused" type="Characteristic"/>
  <concinst name="Holds Above Median Cost Fund" type="Characteristic"/>
  <concinst name="Contribution Below Adequacy Target" type="Characteristic"/>
  <concinst name="Defined Contribution Only" type="Characteristic"/>
  <concinst name="Safeguarded Benefits Held" type="Characteristic"/>
  <concinst name="Approaching Retirement" type="Characteristic"/>
  <concinst name="Access Intent Stated" type="Characteristic"/>
  <concinst name="Guaranteed Income Preference Stated" type="Characteristic"/>
  <concinst name="Total Pension Provision Above Minimum" type="Characteristic"/>
  <concinst name="Withdrawal Rate Above Sustainable" type="Characteristic"/>
  <concinst name="In Drawdown" type="Characteristic"/>
  <concinst name="Holds Multiple Small Pots" type="Characteristic"/>
  <concinst name="Significant Health Issue Affecting Life Expectancy" type="Characteristic"/>
  <concinst name="Capacity Not Established" type="Characteristic"/>
  <concinst name="Under Eighteen" type="Characteristic"/>
  <concinst name="Third Party Represented" type="Characteristic"/>
  <concinst name="Higher Rate Taxpayer" type="Characteristic"/>
  <concinst name="Basic Rate Taxpayer" type="Characteristic"/>
  <concinst name="Partner Income Above Threshold" type="Characteristic"/>
  <concinst name="Repays Credit Card In Full Monthly" type="Characteristic"/>
  <concinst name="Mortgage Repayment Cost Above Threshold" type="Characteristic"/>
  <concinst name="Inheritance Windfall Received" type="Characteristic"/>

  <!-- Age bands as INSTANCES with edge facts. Never compose a           -->
  <!-- characteristic name that must match a declared instance, because  -->
  <!-- one formatting difference would silently kill alignment.          -->
  <concinst name="Band 25 To 39" type="Age Band"/>
  <concinst name="Band 30 To 44" type="Age Band"/>
  <concinst name="Band 40 To 54" type="Age Band"/>
  <concinst name="Band 55 To 64" type="Age Band"/>

  <!-- Data items. Two are marked not readily accessible. -->
  <concinst name="Age Data" type="Data Item"/>
  <concinst name="Cash Balance Data" type="Data Item"/>
  <concinst name="Monthly Essential Expenditure Data" type="Data Item"/>
  <concinst name="Investment Holdings Data" type="Data Item"/>
  <concinst name="Pension Pots Data" type="Data Item"/>
  <concinst name="Contribution Rate Data" type="Data Item"/>
  <concinst name="Pensionable Salary Data" type="Data Item"/>
  <concinst name="Target Retirement Age Data" type="Data Item"/>
  <concinst name="Withdrawal Amount Data" type="Data Item"/>
  <concinst name="Drawdown Fund Value Data" type="Data Item"/>
  <concinst name="ISA Subscription Data" type="Data Item"/>
  <concinst name="Debt Status Data" type="Data Item"/>
  <concinst name="Risk Band Data" type="Data Item"/>
  <concinst name="Benefit Structure Data" type="Data Item"/>
  <concinst name="Taxable Income Data" type="Data Item"/>
  <concinst name="Credit Card History Data" type="Data Item"/>
  <concinst name="Transaction Pattern Data" type="Data Item"/>

  <concinst name="Platform System Of Record" type="Provenance"/>
  <concinst name="Open Finance Feed" type="Provenance"/>
  <concinst name="Client Stated" type="Provenance"/>
  <concinst name="Third Party Feed" type="Provenance"/>
  <concinst name="Firm Inference" type="Provenance"/>

  <concinst name="Cash Savers Want Inflation Beating Returns" type="Assumption"/>
  <concinst name="Population Life Expectancy Data Applies" type="Assumption"/>
  <concinst name="Emergency Fund Is Present" type="Assumption"/>
  <concinst name="Market Consensus Evidence" type="Evidence Basis"/>
  <concinst name="Industry Practice Evidence" type="Evidence Basis"/>
  <concinst name="Firm Research Evidence" type="Evidence Basis"/>

  <!-- Suggestions. Exactly one per segment. -->
  <concinst name="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" type="Suggestion"/>
  <concinst name="Invest Excess Cash Into Lower Volatility Multi Asset Fund" type="Suggestion"/>
  <concinst name="Diversify Into Global Multi Asset Index Fund" type="Suggestion"/>
  <concinst name="Use Stocks And Shares ISA Allowance For New Contributions" type="Suggestion"/>
  <concinst name="Switch To Lower Cost Equivalent Index Fund" type="Suggestion"/>
  <concinst name="Increase Personal Contribution Rate Towards Adequacy Target" type="Suggestion"/>
  <concinst name="Increase Personal Contribution Rate And Review Annually" type="Suggestion"/>
  <concinst name="Take Tax Free Cash Then Phased UFPLS" type="Suggestion"/>
  <concinst name="Consider Annuity Features Including Inflation Linking" type="Suggestion"/>
  <concinst name="Reduce Annual Withdrawal Towards Sustainable Rate" type="Suggestion"/>
  <concinst name="Review Small Pot Charges And Check For Lost Pots" type="Suggestion"/>
  <concinst name="Invest Excess Cash Without Exclusion Checks" type="Suggestion"/>
  <concinst name="Reduce Withdrawal Using Detailed Personal Circumstances" type="Suggestion"/>
  <concinst name="Consolidate Small Pots Into Single Arrangement" type="Suggestion"/>

  <concinst name="Kesterly Global Multi Asset Index Fund" type="Product"/>
  <concinst name="Kesterly Lower Volatility Multi Asset Fund" type="Product"/>
  <concinst name="Kesterly Stocks And Shares ISA" type="Product"/>
  <concinst name="Kesterly Workplace Pension" type="Product"/>
  <concinst name="Meridian Low Cost Index Fund" type="Product"/>
  <concinst name="Thornbury Unlisted Growth Fund" type="Product"/>
  <concinst name="Halcyon Mini Bond" type="Product"/>
  <concinst name="Vellum Leveraged Equity Fund" type="Product"/>

  <concinst name="Mainstream Packaged Product" type="Product Category"/>
  <concinst name="Mainstream Wrapper" type="Product Category"/>
  <concinst name="Non Mass Market Investment" type="Product Category"/>
  <concinst name="Restricted Mass Market Investment" type="Product Category"/>

  <concinst name="Phased UFPLS" type="Access Method"/>
  <concinst name="Annuity Features" type="Access Method"/>
  <concinst name="Reduced Drawdown" type="Access Method"/>

  <concinst name="Defined Contribution" type="Benefit Structure"/>
  <concinst name="Defined Benefit Safeguarded" type="Benefit Structure"/>
  <concinst name="Guaranteed Annuity Rate" type="Benefit Structure"/>

  <concinst name="Contract Based Personal Pension" type="Scheme Type"/>
  <concinst name="Trust Based Occupational Scheme" type="Scheme Type"/>

  <concinst name="Retail Client" type="Client Category"/>
  <concinst name="Professional Client" type="Client Category"/>
  <concinst name="Eligible Counterparty" type="Client Category"/>

  <concinst name="Digital Self Service" type="Channel"/>
  <concinst name="In App Message" type="Channel"/>
  <concinst name="Website Message" type="Channel"/>
  <concinst name="Electronic Mail" type="Channel"/>
  <concinst name="Telephone" type="Channel"/>
  <concinst name="Face To Face" type="Channel"/>
  <concinst name="Inbound Call Recording" type="Channel"/>

  <concinst name="Ready Made Suggestion" type="Message Type"/>
  <concinst name="Awareness Message" type="Message Type"/>
  <concinst name="Service Message" type="Message Type"/>

  <concinst name="Opted In To Electronic Marketing" type="Marketing Preference"/>
  <concinst name="Not Opted Out Of Direct Marketing" type="Marketing Preference"/>
  <concinst name="Objected To Direct Marketing" type="Marketing Preference"/>

  <concinst name="Express Client Request" type="Initiation Basis"/>
  <concinst name="Reasonable Grounds Situation Identified" type="Initiation Basis"/>
  <concinst name="Firm Initiated Without Basis" type="Initiation Basis"/>
  <concinst name="Service Availability Notice Only" type="Initiation Basis"/>

  <concinst name="Client Payment" type="Benefit Type"/>
  <concinst name="Affiliate Cost Reimbursement" type="Benefit Type"/>
  <concinst name="Minor Non Monetary Benefit" type="Benefit Type"/>
  <concinst name="Annuity Brokerage Referral Fee" type="Benefit Type"/>
  <concinst name="Product Provider Commission" type="Benefit Type"/>
  <concinst name="Platform Rebate" type="Benefit Type"/>

  <concinst name="No Charge Cross Subsidised" type="Charge Basis"/>
  <concinst name="Explicit Client Fee" type="Charge Basis"/>
  <concinst name="Facilitated From Investment" type="Charge Basis"/>

  <concinst name="Consent" type="Lawful Basis"/>
  <concinst name="Legitimate Interests" type="Lawful Basis"/>

  <concinst name="Make Cash Work Harder" type="Objective"/>
  <concinst name="Reduce Investment Risk Concentration" type="Objective"/>
  <concinst name="Improve Tax Efficiency" type="Objective"/>
  <concinst name="Reduce Investment Costs" type="Objective"/>
  <concinst name="Save More For Retirement" type="Objective"/>
  <concinst name="Take Pension Income" type="Objective"/>
  <concinst name="Secure Guaranteed Income" type="Objective"/>
  <concinst name="Make Pension Last" type="Objective"/>
  <concinst name="Tidy Up Small Pots" type="Objective"/>

  <concinst name="No Investment Risk Accepted" type="Risk Band"/>
  <concinst name="Low Investment Risk Accepted" type="Risk Band"/>
  <concinst name="Medium Investment Risk Accepted" type="Risk Band"/>
  <concinst name="High Investment Risk Accepted" type="Risk Band"/>
  <concinst name="Cannot Absorb Any Loss" type="Risk Band"/>
  <concinst name="Can Absorb Small Loss" type="Risk Band"/>
  <concinst name="Can Absorb Moderate Loss" type="Risk Band"/>

  <concinst name="Terminate Journey" type="Volunteered Route"/>
  <concinst name="Continue Suitability Unaffected" type="Volunteered Route"/>
  <concinst name="Seek Clarification Then Realign" type="Volunteered Route"/>

  <!-- FG21/1 four drivers of vulnerability -->
  <concinst name="Health" type="Vulnerability Driver"/>
  <concinst name="Life Events" type="Vulnerability Driver"/>
  <concinst name="Resilience" type="Vulnerability Driver"/>
  <concinst name="Capability" type="Vulnerability Driver"/>

  <concinst name="Recent Bereavement" type="Vulnerability Indicator"/>
  <concinst name="Terminal Illness Diagnosis" type="Vulnerability Indicator"/>
  <concinst name="Cognitive Impairment" type="Vulnerability Indicator"/>
  <concinst name="Domestic Abuse Disclosure" type="Vulnerability Indicator"/>
  <concinst name="Recent Income Shock" type="Vulnerability Indicator"/>
  <concinst name="Low Financial Capability" type="Vulnerability Indicator"/>
  <concinst name="Poor Digital Skills" type="Vulnerability Indicator"/>
  <concinst name="Hearing Impairment" type="Vulnerability Indicator"/>
  <concinst name="Caring Responsibilities" type="Vulnerability Indicator"/>
  <concinst name="No Vulnerability Indicator Recorded" type="Vulnerability Indicator"/>

  <concinst name="Intends To Withdraw Whole Portfolio Within Twelve Months" type="Contra Indication"/>
  <concinst name="Pending Divorce Settlement Affecting Assets" type="Contra Indication"/>
  <concinst name="Imminent Property Purchase Requiring Cash" type="Contra Indication"/>
  <concinst name="No Contra Indication Recorded" type="Contra Indication"/>

  <concinst name="No Excluding Characteristics Defined" type="Design Defect"/>
  <concinst name="No Including Characteristics Defined" type="Design Defect"/>
  <concinst name="No Required Data Items Defined" type="Design Defect"/>
  <concinst name="No Situation Assigned" type="Design Defect"/>
  <concinst name="Suggestion Count Not Exactly One" type="Design Defect"/>
  <concinst name="Insufficient Granularity" type="Design Defect"/>
  <concinst name="Excessive Granularity" type="Design Defect"/>
  <concinst name="Relies On Material Assumption" type="Design Defect"/>
  <concinst name="Assumption Without Evidence Basis" type="Design Defect"/>
  <concinst name="Uses Poor Practice Characteristic" type="Design Defect"/>
  <concinst name="No Better Position Definition" type="Design Defect"/>
  <concinst name="Characteristic Not Relevant To Suggestion" type="Design Defect"/>
  <concinst name="Duplicate Record Ordinal" type="Design Defect"/>
  <concinst name="No Prevalence Rationale" type="Design Defect"/>
  <concinst name="Requires Data Not Readily Accessible" type="Design Defect"/>
  <concinst name="Protected Characteristic Without Equality Justification" type="Design Defect"/>
  <concinst name="Segment Design Compliant" type="Design Defect"/>

  <concinst name="Prohibited Third Party Benefit Received" type="Compliance Defect"/>
  <concinst name="Charged Without Fair Value Assessment" type="Compliance Defect"/>
  <concinst name="Charge Not Disclosed In Cash Terms" type="Compliance Defect"/>
  <concinst name="Charge Not Agreed Before Service" type="Compliance Defect"/>
  <concinst name="Charge Not In Durable Medium" type="Compliance Defect"/>
  <concinst name="Differential Cost Not Disclosed" type="Compliance Defect"/>
  <concinst name="Remuneration Not Fair Value Consistent" type="Compliance Defect"/>
  <concinst name="Liability Disclaimer Present" type="Compliance Defect"/>
  <concinst name="Disclosures Not Tested" type="Compliance Defect"/>
  <concinst name="Durable Medium Not Provided At Delivery" type="Compliance Defect"/>
  <concinst name="Systems And Controls Absent" type="Compliance Defect"/>
  <concinst name="Outcome Monitoring Absent" type="Compliance Defect"/>
  <concinst name="Review Frequency Absent" type="Compliance Defect"/>
  <concinst name="Annuity Referral Benefit On Non Annuity Case" type="Compliance Defect"/>
  <concinst name="Special Category Condition Absent" type="Compliance Defect"/>
  <concinst name="Charging And Disclosure Compliant" type="Compliance Defect"/>
  <concinst name="Advice Distinction Not Confirmed" type="Compliance Defect"/>

  <concinst name="Prohibited Product Category" type="Delivery Block"/>
  <concinst name="Leveraged Or Illiquid Product" type="Delivery Block"/>
  <concinst name="Consolidation Recommendation" type="Delivery Block"/>
  <concinst name="Annuity Names Particular Product" type="Delivery Block"/>
  <concinst name="Annuity Includes Quote" type="Delivery Block"/>
  <concinst name="Annuity Beyond Features" type="Delivery Block"/>
  <concinst name="Missing Cost Consideration Record" type="Delivery Block"/>
  <concinst name="Missing Target Market Confirmation" type="Delivery Block"/>
  <concinst name="Missing Provider Strength Record" type="Delivery Block"/>
  <concinst name="Product Adaptation Unreviewed" type="Delivery Block"/>
  <concinst name="Suggestion Not Presented On Group Basis" type="Delivery Block"/>
  <concinst name="Target Market Mismatch" type="Delivery Block"/>
  <concinst name="No Delivery Block Found" type="Delivery Block"/>

  <concinst name="Targeted Support Service Label" type="Disclosure Item"/>
  <concinst name="Nature And Limitations Of Service" type="Disclosure Item"/>
  <concinst name="Segment Common Characteristics" type="Disclosure Item"/>
  <concinst name="Designed For Segment Statement" type="Disclosure Item"/>
  <concinst name="Product Scope Limitations" type="Disclosure Item"/>
  <concinst name="Article 55A Group Basis Statement" type="Disclosure Item"/>
  <concinst name="Assumptions Used" type="Disclosure Item"/>
  <concinst name="Availability Of Regulated Advice" type="Disclosure Item"/>
  <concinst name="Encouragement To Compare Market" type="Disclosure Item"/>
  <concinst name="Time Limited Suitability Statement" type="Disclosure Item"/>
  <concinst name="Liability Disclaimer Wording" type="Disclosure Item"/>

  <concinst name="Initial Contact" type="Disclosure Stage"/>
  <concinst name="Requesting Alignment Information" type="Disclosure Stage"/>
  <concinst name="Delivering Suggestion" type="Disclosure Stage"/>

  <concinst name="MoneyHelper General Guidance" type="Signpost"/>
  <concinst name="MoneyHelper Annuity Comparison" type="Signpost"/>
  <concinst name="Pension Wise" type="Signpost"/>
  <concinst name="Regulated Investment Advice" type="Signpost"/>
  <concinst name="Debt Advice" type="Signpost"/>
  <concinst name="Whole Of Market Annuity Brokerage" type="Signpost"/>
  <concinst name="Firm Tools And Modellers" type="Signpost"/>
  <concinst name="Vulnerability Support Team" type="Signpost"/>
  <concinst name="Other Support Available" type="Signpost"/>

  <concinst name="Out Of Perimeter" type="Outcome"/>
  <concinst name="Out Of COBS 9B Scope Apply Advising Rules" type="Outcome"/>
  <concinst name="Stop Client Declined Service" type="Outcome"/>
  <concinst name="Stop Safeguarded Benefits Refer To Advice" type="Outcome"/>
  <concinst name="Stop Article 53 Breach Risk Statement Not Delivered" type="Outcome"/>
  <concinst name="Stop Unlawful Initiation" type="Outcome"/>
  <concinst name="Stop Marketing Permission Absent" type="Outcome"/>
  <concinst name="Stop Service Not Deliverable Design Defect" type="Outcome"/>
  <concinst name="Stop Signpost Debt Advice" type="Outcome"/>
  <concinst name="Stop Vulnerability Referral" type="Outcome"/>
  <concinst name="Stop Contra Indication Signpost Alternative Support" type="Outcome"/>
  <concinst name="Stop Charging Non Compliant" type="Outcome"/>
  <concinst name="Stop Product Scope Breach" type="Outcome"/>
  <concinst name="Stop Data Insufficient Data Request Issued" type="Outcome"/>
  <concinst name="Stop No Segment Alignment Signpost" type="Outcome"/>
  <concinst name="Stop Disclosure Set Incomplete" type="Outcome"/>
  <concinst name="Withhold Suggestion Segment Suitability Not Established" type="Outcome"/>
  <concinst name="Withhold Suggestion Better Position Not Established" type="Outcome"/>
  <concinst name="Deliver Targeted Support Suggestion With Adjusted Delivery" type="Outcome"/>
  <concinst name="Deliver Targeted Support Suggestion" type="Outcome"/>
  <concinst name="Request Further Data" type="Outcome"/>

  <concinst name="Issue Data Request To Consumer" type="Next Step"/>
  <concinst name="Verify Information With Consumer" type="Next Step"/>
  <concinst name="Refer To Regulated Advice" type="Next Step"/>
  <concinst name="Refer To Debt Advice" type="Next Step"/>
  <concinst name="Refer To Vulnerability Specialist" type="Next Step"/>
  <concinst name="Escalate Segment Design To Governance" type="Next Step"/>
  <concinst name="Deliver Suggestion In Durable Medium" type="Next Step"/>
  <concinst name="End Interaction And Note Separate Sales Journey" type="Next Step"/>
  <concinst name="Record Deferred Situation For Later Interaction" type="Next Step"/>
  <concinst name="Route For Human Review" type="Next Step"/>
  <concinst name="Explain Advice Distinction To Consumer" type="Next Step"/>
  <concinst name="Review Charging Arrangements" type="Next Step"/>
  <concinst name="Complete Disclosure Set" type="Next Step"/>
  <concinst name="Process Client Directed Transaction Outside Targeted Support" type="Next Step"/>

  <concinst name="Projected Net Financial Improvement" type="Metric"/>
  <concinst name="Projected Retirement Income Improvement" type="Metric"/>
  <concinst name="Projected Sustainability Improvement" type="Metric"/>

  <concinst name="Better Position Cash Heavy Younger" type="Better Position Definition"/>
  <concinst name="Better Position Cash Heavy Pre Retiree" type="Better Position Definition"/>
  <concinst name="Better Position Concentration" type="Better Position Definition"/>
  <concinst name="Better Position Wrapper" type="Better Position Definition"/>
  <concinst name="Better Position Cost" type="Better Position Definition"/>
  <concinst name="Better Position Under Saver Early" type="Better Position Definition"/>
  <concinst name="Better Position Under Saver Mid" type="Better Position Definition"/>
  <concinst name="Better Position Access Decision" type="Better Position Definition"/>
  <concinst name="Better Position Annuity Interest" type="Better Position Definition"/>
  <concinst name="Better Position Drawdown" type="Better Position Definition"/>
  <concinst name="Better Position Small Pots" type="Better Position Definition"/>

  <concinst name="Projection Cash Heavy Younger" type="Projection"/>
  <concinst name="Projection Cash Heavy Pre Retiree" type="Projection"/>
  <concinst name="Projection Concentration" type="Projection"/>
  <concinst name="Projection Wrapper" type="Projection"/>
  <concinst name="Projection Cost" type="Projection"/>
  <concinst name="Projection Under Saver Early" type="Projection"/>
  <concinst name="Projection Under Saver Mid" type="Projection"/>
  <concinst name="Projection Access Decision" type="Projection"/>
  <concinst name="Projection Annuity Interest" type="Projection"/>
  <concinst name="Projection Drawdown" type="Projection"/>
  <concinst name="Projection Small Pots" type="Projection"/>

  <concinst name="Legitimate Aim Proportionate Means Recorded" type="Equality Justification"/>
  <concinst name="Solely Automated With Significant Effect" type="Automated Decision Status"/>
  <concinst name="Automated With Human Review" type="Automated Decision Status"/>
  <concinst name="Not Solely Automated" type="Automated Decision Status"/>
  <concinst name="Non Advised Targeted Support" type="Reporting Classification"/>
  <concinst name="Retirement Income Targeted Support" type="Reporting Classification"/>

  <!-- ==================== Policy parameter facts ==================== -->
  <!-- FIRM POLICY, not FCA figures. The FCA publishes no thresholds for  -->
  <!-- any of these situations. Recalibrate here, never in rules.         -->

  <relinst type="policy has emergency fund months" subject="Kesterly Targeted Support Policy" object="3"/>
  <relinst type="policy has excess cash floor amount" subject="Kesterly Targeted Support Policy" object="10000"/>
  <relinst type="policy has concentration limit percent" subject="Kesterly Targeted Support Policy" object="25"/>
  <relinst type="policy has portfolio minimum value" subject="Kesterly Targeted Support Policy" object="20000"/>
  <relinst type="policy has sustainable withdrawal percent" subject="Kesterly Targeted Support Policy" object="4"/>
  <relinst type="policy has contribution adequacy target percent" subject="Kesterly Targeted Support Policy" object="12"/>
  <relinst type="policy has retirement proximity years" subject="Kesterly Targeted Support Policy" object="10"/>
  <relinst type="policy has small pot value ceiling" subject="Kesterly Targeted Support Policy" object="10000"/>
  <relinst type="policy has small pot count threshold" subject="Kesterly Targeted Support Policy" object="2"/>
  <relinst type="policy has better position materiality percent" subject="Kesterly Targeted Support Policy" object="5"/>
  <relinst type="policy has minimum projection horizon years" subject="Kesterly Targeted Support Policy" object="5"/>
  <relinst type="policy has minimum adult age" subject="Kesterly Targeted Support Policy" object="18"/>
  <relinst type="policy has isa annual allowance" subject="Kesterly Targeted Support Policy" object="20000"/>
  <relinst type="policy has regime commencement date" subject="Kesterly Targeted Support Policy" object="2026-04-06"/>
  <relinst type="policy has version tag" subject="Kesterly Targeted Support Policy" object="Policy Version 2026 04 A"/>
  <relinst type="policy has median fund charge percent" subject="Kesterly Targeted Support Policy" object="0.35"/>
  <relinst type="policy has higher rate threshold amount" subject="Kesterly Targeted Support Policy" object="50270"/>
  <relinst type="policy has minimum pension provision amount" subject="Kesterly Targeted Support Policy" object="30000"/>

  <!-- ======================= Firm configuration ===================== -->

  <relinst type="firm holds permission" subject="Kesterly Wealth" object="Providing Targeted Support"/>
  <relinst type="firm holds permission" subject="Kesterly Wealth" object="Advising On Investments"/>
  <relinst type="firm is appointed representative" subject="Kesterly Wealth" object="false"/>
  <relinst type="firm has systems and controls" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has trained staff" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has tested disclosures" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has outcome monitoring" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has differential outcome monitoring" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has review frequency months" subject="Kesterly Wealth" object="12"/>
  <relinst type="firm has root cause process" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has governing body report" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has accountable senior manager" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has minimum capital met" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has vulnerable customer evaluation" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm charges for targeted support" subject="Kesterly Wealth" object="false"/>
  <relinst type="firm has charge basis" subject="Kesterly Wealth" object="No Charge Cross Subsidised"/>
  <relinst type="firm has fair value assessment" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm receives benefit" subject="Kesterly Wealth" object="Affiliate Cost Reimbursement"/>
  <relinst type="firm discloses differential cost" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm provides durable medium at delivery" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has lawful basis" subject="Kesterly Wealth" object="Legitimate Interests"/>
  <relinst type="firm has special category condition" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has granular marketing consent record" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm separates marketing and service records" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm has human review point" subject="Kesterly Wealth" object="true"/>
  <relinst type="firm provides data subject explanation" subject="Kesterly Wealth" object="true"/>

  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Targeted Support Service Label"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Nature And Limitations Of Service"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Segment Common Characteristics"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Designed For Segment Statement"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Product Scope Limitations"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Article 55A Group Basis Statement"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Assumptions Used"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Availability Of Regulated Advice"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Encouragement To Compare Market"/>
  <relinst type="firm provides disclosure item" subject="Kesterly Wealth" object="Time Limited Suitability Statement"/>

  <!-- Brindle Financial holds advising permission only. Perimeter fail. -->
  <relinst type="firm holds permission" subject="Brindle Financial" object="Advising On Investments"/>
  <relinst type="firm is appointed representative" subject="Brindle Financial" object="false"/>
  <relinst type="firm has systems and controls" subject="Brindle Financial" object="true"/>

  <!-- Oakhurst is an appointed representative. COBS 9B.2.4G bar. -->
  <relinst type="firm holds permission" subject="Oakhurst Appointed" object="Providing Targeted Support"/>
  <relinst type="firm is appointed representative" subject="Oakhurst Appointed" object="true"/>
  <relinst type="firm has systems and controls" subject="Oakhurst Appointed" object="true"/>

  <!-- Situations offered by Kesterly Wealth -->
  <relinst type="firm offers situation" subject="Kesterly Wealth" object="Investing Excess Cash"/>
  <relinst type="firm offers situation" subject="Kesterly Wealth" object="Improving Portfolio Diversification"/>
  <relinst type="firm offers situation" subject="Kesterly Wealth" object="Selecting A Tax Wrapper"/>
  <relinst type="firm offers situation" subject="Kesterly Wealth" object="Reducing Investment Costs"/>
  <relinst type="firm offers situation" subject="Kesterly Wealth" object="Increasing Pension Contributions"/>
  <relinst type="firm offers situation" subject="Kesterly Wealth" object="Choosing How To Access A Pension"/>
  <relinst type="firm offers situation" subject="Kesterly Wealth" object="Setting A Sustainable Withdrawal Rate"/>
  <relinst type="firm offers situation" subject="Kesterly Wealth" object="Dealing With Multiple Small Pots"/>
  <relinst type="firm offers situation" subject="Brindle Financial" object="Investing Excess Cash"/>
  <relinst type="firm offers situation" subject="Oakhurst Appointed" object="Investing Excess Cash"/>

  <!-- Situation granularity floor and ceiling, scaled to complexity -->
  <relinst type="situation requires minimum characteristics" subject="Investing Excess Cash" object="2"/>
  <relinst type="situation permits maximum characteristics" subject="Investing Excess Cash" object="6"/>
  <relinst type="situation has priority" subject="Investing Excess Cash" object="50"/>
  <relinst type="situation belongs to domain" subject="Investing Excess Cash" object="Retail Investment"/>
  <relinst type="situation requires minimum characteristics" subject="Improving Portfolio Diversification" object="2"/>
  <relinst type="situation permits maximum characteristics" subject="Improving Portfolio Diversification" object="6"/>
  <relinst type="situation has priority" subject="Improving Portfolio Diversification" object="40"/>
  <relinst type="situation belongs to domain" subject="Improving Portfolio Diversification" object="Retail Investment"/>
  <relinst type="situation requires minimum characteristics" subject="Selecting A Tax Wrapper" object="2"/>
  <relinst type="situation permits maximum characteristics" subject="Selecting A Tax Wrapper" object="6"/>
  <relinst type="situation has priority" subject="Selecting A Tax Wrapper" object="30"/>
  <relinst type="situation belongs to domain" subject="Selecting A Tax Wrapper" object="Retail Investment"/>
  <relinst type="situation requires minimum characteristics" subject="Reducing Investment Costs" object="2"/>
  <relinst type="situation permits maximum characteristics" subject="Reducing Investment Costs" object="6"/>
  <relinst type="situation has priority" subject="Reducing Investment Costs" object="20"/>
  <relinst type="situation belongs to domain" subject="Reducing Investment Costs" object="Retail Investment"/>
  <relinst type="situation requires minimum characteristics" subject="Increasing Pension Contributions" object="3"/>
  <relinst type="situation permits maximum characteristics" subject="Increasing Pension Contributions" object="7"/>
  <relinst type="situation has priority" subject="Increasing Pension Contributions" object="60"/>
  <relinst type="situation belongs to domain" subject="Increasing Pension Contributions" object="Pension"/>
  <relinst type="situation requires minimum characteristics" subject="Choosing How To Access A Pension" object="4"/>
  <relinst type="situation permits maximum characteristics" subject="Choosing How To Access A Pension" object="8"/>
  <relinst type="situation has priority" subject="Choosing How To Access A Pension" object="70"/>
  <relinst type="situation belongs to domain" subject="Choosing How To Access A Pension" object="Pension"/>
  <relinst type="situation requires minimum characteristics" subject="Setting A Sustainable Withdrawal Rate" object="4"/>
  <relinst type="situation permits maximum characteristics" subject="Setting A Sustainable Withdrawal Rate" object="8"/>
  <relinst type="situation has priority" subject="Setting A Sustainable Withdrawal Rate" object="90"/>
  <relinst type="situation belongs to domain" subject="Setting A Sustainable Withdrawal Rate" object="Pension"/>
  <relinst type="situation requires minimum characteristics" subject="Dealing With Multiple Small Pots" object="3"/>
  <relinst type="situation permits maximum characteristics" subject="Dealing With Multiple Small Pots" object="7"/>
  <relinst type="situation has priority" subject="Dealing With Multiple Small Pots" object="80"/>
  <relinst type="situation belongs to domain" subject="Dealing With Multiple Small Pots" object="Pension"/>

  <!-- Poor practice characteristics per situation, per FCA good and     -->
  <!-- poor practice guidance of 23 March 2026.                          -->
  <relinst type="situation flags poor practice characteristic" subject="Investing Excess Cash" object="Partner Income Above Threshold"/>
  <relinst type="situation flags poor practice characteristic" subject="Investing Excess Cash" object="Repays Credit Card In Full Monthly"/>
  <relinst type="situation has trigger characteristic" subject="Investing Excess Cash" object="Excess Cash Above Emergency Buffer"/>
  <relinst type="situation has trigger characteristic" subject="Improving Portfolio Diversification" object="Single Holding Concentration Above Limit"/>
  <relinst type="situation has trigger characteristic" subject="Selecting A Tax Wrapper" object="Holds Unwrapped Investments"/>
  <relinst type="situation has trigger characteristic" subject="Reducing Investment Costs" object="Holds Above Median Cost Fund"/>
  <relinst type="situation has trigger characteristic" subject="Increasing Pension Contributions" object="Contribution Below Adequacy Target"/>
  <relinst type="situation has trigger characteristic" subject="Choosing How To Access A Pension" object="Approaching Retirement"/>
  <relinst type="situation has trigger characteristic" subject="Setting A Sustainable Withdrawal Rate" object="Withdrawal Rate Above Sustainable"/>
  <relinst type="situation has trigger characteristic" subject="Dealing With Multiple Small Pots" object="Holds Multiple Small Pots"/>

  <relinst type="situation flags poor practice characteristic" subject="Setting A Sustainable Withdrawal Rate" object="Mortgage Repayment Cost Above Threshold"/>
  <relinst type="situation flags poor practice characteristic" subject="Setting A Sustainable Withdrawal Rate" object="Inheritance Windfall Received"/>

  <!-- ==================== The segment registry ======================= -->
  <!-- COBS 9B.4.4R to 4.19R make segments FIRM DEFINED CONFIGURATION.   -->
  <!-- A new segment is a set of facts here. No rule ever changes.        -->
  <!-- Each segment carries a situation, including characteristics,       -->
  <!-- EXCLUDING characteristics (mandatory, COBS 9B.4.16R(1)), the       -->
  <!-- information required to establish alignment (COBS 9B.4.17R),       -->
  <!-- exactly one ready made suggestion (COBS 9B.4.5R), and a better     -->
  <!-- position definition.                                              -->

  <!-- S1 Cash Heavy Younger Accumulator -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Cash Heavy Younger Accumulator"/>
  <relinst type="segment addresses situation" subject="Cash Heavy Younger Accumulator" object="Investing Excess Cash"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Younger Accumulator" object="Aged 30 To 44"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Younger Accumulator" object="Excess Cash Above Emergency Buffer"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Younger Accumulator" object="Has Emergency Fund"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Younger Accumulator" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Younger Accumulator" object="Accepts Investment Risk Over Medium Term"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Younger Accumulator" object="No Emergency Fund"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Younger Accumulator" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Younger Accumulator" object="Cannot Tolerate Capital Loss"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Younger Accumulator" object="Capacity Not Established"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Younger Accumulator" object="Under Eighteen"/>
  <relinst type="segment requires data item" subject="Cash Heavy Younger Accumulator" object="Age Data"/>
  <relinst type="segment requires data item" subject="Cash Heavy Younger Accumulator" object="Cash Balance Data"/>
  <relinst type="segment requires data item" subject="Cash Heavy Younger Accumulator" object="Monthly Essential Expenditure Data"/>
  <relinst type="segment requires data item" subject="Cash Heavy Younger Accumulator" object="Debt Status Data"/>
  <relinst type="segment requires data item" subject="Cash Heavy Younger Accumulator" object="Risk Band Data"/>
  <relinst type="segment has suggestion" subject="Cash Heavy Younger Accumulator" object="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund"/>
  <relinst type="segment relies on assumption" subject="Cash Heavy Younger Accumulator" object="Cash Savers Want Inflation Beating Returns"/>
  <relinst type="segment has better position definition" subject="Cash Heavy Younger Accumulator" object="Better Position Cash Heavy Younger"/>
  <relinst type="segment has prevalence rationale" subject="Cash Heavy Younger Accumulator" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Younger Accumulator" object="Aged 30 To 44"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Younger Accumulator" object="Excess Cash Above Emergency Buffer"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Younger Accumulator" object="Has Emergency Fund"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Younger Accumulator" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Younger Accumulator" object="Accepts Investment Risk Over Medium Term"/>

  <!-- S2 Cash Heavy Pre Retiree. Same situation as S1, mutually          -->
  <!-- exclusive by age band, which is lawful under COBS 9B.4.14G.        -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Cash Heavy Pre Retiree"/>
  <relinst type="segment addresses situation" subject="Cash Heavy Pre Retiree" object="Investing Excess Cash"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Pre Retiree" object="Aged 55 To 64"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Pre Retiree" object="Excess Cash Above Emergency Buffer"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Pre Retiree" object="Has Emergency Fund"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Pre Retiree" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="Cash Heavy Pre Retiree" object="Accepts Investment Risk Over Medium Term"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Pre Retiree" object="No Emergency Fund"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Pre Retiree" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Pre Retiree" object="Cannot Tolerate Capital Loss"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Pre Retiree" object="Significant Health Issue Affecting Life Expectancy"/>
  <relinst type="segment excludes characteristic" subject="Cash Heavy Pre Retiree" object="Capacity Not Established"/>
  <relinst type="segment requires data item" subject="Cash Heavy Pre Retiree" object="Age Data"/>
  <relinst type="segment requires data item" subject="Cash Heavy Pre Retiree" object="Cash Balance Data"/>
  <relinst type="segment requires data item" subject="Cash Heavy Pre Retiree" object="Monthly Essential Expenditure Data"/>
  <relinst type="segment requires data item" subject="Cash Heavy Pre Retiree" object="Debt Status Data"/>
  <relinst type="segment requires data item" subject="Cash Heavy Pre Retiree" object="Risk Band Data"/>
  <relinst type="segment has suggestion" subject="Cash Heavy Pre Retiree" object="Invest Excess Cash Into Lower Volatility Multi Asset Fund"/>
  <relinst type="segment relies on assumption" subject="Cash Heavy Pre Retiree" object="Cash Savers Want Inflation Beating Returns"/>
  <relinst type="segment has better position definition" subject="Cash Heavy Pre Retiree" object="Better Position Cash Heavy Pre Retiree"/>
  <relinst type="segment has prevalence rationale" subject="Cash Heavy Pre Retiree" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Pre Retiree" object="Aged 55 To 64"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Pre Retiree" object="Excess Cash Above Emergency Buffer"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Pre Retiree" object="Has Emergency Fund"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Pre Retiree" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Heavy Pre Retiree" object="Accepts Investment Risk Over Medium Term"/>

  <!-- S3 Concentrated Single Holding Investor -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Concentrated Single Holding Investor"/>
  <relinst type="segment addresses situation" subject="Concentrated Single Holding Investor" object="Improving Portfolio Diversification"/>
  <relinst type="segment requires characteristic" subject="Concentrated Single Holding Investor" object="Single Holding Concentration Above Limit"/>
  <relinst type="segment requires characteristic" subject="Concentrated Single Holding Investor" object="Portfolio Above Minimum Value"/>
  <relinst type="segment requires characteristic" subject="Concentrated Single Holding Investor" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="Concentrated Single Holding Investor" object="Accepts Investment Risk Over Medium Term"/>
  <relinst type="segment excludes characteristic" subject="Concentrated Single Holding Investor" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Concentrated Single Holding Investor" object="Cannot Tolerate Capital Loss"/>
  <relinst type="segment excludes characteristic" subject="Concentrated Single Holding Investor" object="Capacity Not Established"/>
  <relinst type="segment requires data item" subject="Concentrated Single Holding Investor" object="Investment Holdings Data"/>
  <relinst type="segment requires data item" subject="Concentrated Single Holding Investor" object="Debt Status Data"/>
  <relinst type="segment requires data item" subject="Concentrated Single Holding Investor" object="Risk Band Data"/>
  <relinst type="segment has suggestion" subject="Concentrated Single Holding Investor" object="Diversify Into Global Multi Asset Index Fund"/>
  <relinst type="segment has better position definition" subject="Concentrated Single Holding Investor" object="Better Position Concentration"/>
  <relinst type="segment has prevalence rationale" subject="Concentrated Single Holding Investor" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Concentrated Single Holding Investor" object="Single Holding Concentration Above Limit"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Concentrated Single Holding Investor" object="Portfolio Above Minimum Value"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Concentrated Single Holding Investor" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Concentrated Single Holding Investor" object="Accepts Investment Risk Over Medium Term"/>

  <!-- S4 Unwrapped Investor -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Unwrapped Investor"/>
  <relinst type="segment addresses situation" subject="Unwrapped Investor" object="Selecting A Tax Wrapper"/>
  <relinst type="segment requires characteristic" subject="Unwrapped Investor" object="Holds Unwrapped Investments"/>
  <relinst type="segment requires characteristic" subject="Unwrapped Investor" object="ISA Allowance Unused"/>
  <relinst type="segment requires characteristic" subject="Unwrapped Investor" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="Unwrapped Investor" object="Accepts Investment Risk Over Medium Term"/>
  <relinst type="segment excludes characteristic" subject="Unwrapped Investor" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Unwrapped Investor" object="Cannot Tolerate Capital Loss"/>
  <relinst type="segment requires data item" subject="Unwrapped Investor" object="Investment Holdings Data"/>
  <relinst type="segment requires data item" subject="Unwrapped Investor" object="ISA Subscription Data"/>
  <relinst type="segment requires data item" subject="Unwrapped Investor" object="Debt Status Data"/>
  <relinst type="segment requires data item" subject="Unwrapped Investor" object="Risk Band Data"/>
  <relinst type="segment has suggestion" subject="Unwrapped Investor" object="Use Stocks And Shares ISA Allowance For New Contributions"/>
  <relinst type="segment has better position definition" subject="Unwrapped Investor" object="Better Position Wrapper"/>
  <relinst type="segment has prevalence rationale" subject="Unwrapped Investor" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Unwrapped Investor" object="Holds Unwrapped Investments"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Unwrapped Investor" object="ISA Allowance Unused"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Unwrapped Investor" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Unwrapped Investor" object="Accepts Investment Risk Over Medium Term"/>

  <!-- S5 High Cost Legacy Fund Holder -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="High Cost Legacy Fund Holder"/>
  <relinst type="segment addresses situation" subject="High Cost Legacy Fund Holder" object="Reducing Investment Costs"/>
  <relinst type="segment requires characteristic" subject="High Cost Legacy Fund Holder" object="Holds Above Median Cost Fund"/>
  <relinst type="segment requires characteristic" subject="High Cost Legacy Fund Holder" object="Portfolio Above Minimum Value"/>
  <relinst type="segment requires characteristic" subject="High Cost Legacy Fund Holder" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="High Cost Legacy Fund Holder" object="Accepts Investment Risk Over Medium Term"/>
  <relinst type="segment excludes characteristic" subject="High Cost Legacy Fund Holder" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="High Cost Legacy Fund Holder" object="Cannot Tolerate Capital Loss"/>
  <relinst type="segment requires data item" subject="High Cost Legacy Fund Holder" object="Investment Holdings Data"/>
  <relinst type="segment requires data item" subject="High Cost Legacy Fund Holder" object="Debt Status Data"/>
  <relinst type="segment requires data item" subject="High Cost Legacy Fund Holder" object="Risk Band Data"/>
  <relinst type="segment has suggestion" subject="High Cost Legacy Fund Holder" object="Switch To Lower Cost Equivalent Index Fund"/>
  <relinst type="segment has better position definition" subject="High Cost Legacy Fund Holder" object="Better Position Cost"/>
  <relinst type="segment has prevalence rationale" subject="High Cost Legacy Fund Holder" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="High Cost Legacy Fund Holder" object="Holds Above Median Cost Fund"/>
  <relinst type="segment characteristic relevant to suggestion" subject="High Cost Legacy Fund Holder" object="Portfolio Above Minimum Value"/>
  <relinst type="segment characteristic relevant to suggestion" subject="High Cost Legacy Fund Holder" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="High Cost Legacy Fund Holder" object="Accepts Investment Risk Over Medium Term"/>

  <!-- S6 Workplace Under Saver Early Career -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Workplace Under Saver Early Career"/>
  <relinst type="segment addresses situation" subject="Workplace Under Saver Early Career" object="Increasing Pension Contributions"/>
  <relinst type="segment requires characteristic" subject="Workplace Under Saver Early Career" object="Aged 25 To 39"/>
  <relinst type="segment requires characteristic" subject="Workplace Under Saver Early Career" object="Contribution Below Adequacy Target"/>
  <relinst type="segment requires characteristic" subject="Workplace Under Saver Early Career" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="Workplace Under Saver Early Career" object="Defined Contribution Only"/>
  <relinst type="segment excludes characteristic" subject="Workplace Under Saver Early Career" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Workplace Under Saver Early Career" object="Safeguarded Benefits Held"/>
  <relinst type="segment excludes characteristic" subject="Workplace Under Saver Early Career" object="Capacity Not Established"/>
  <relinst type="segment excludes characteristic" subject="Workplace Under Saver Early Career" object="Under Eighteen"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Early Career" object="Age Data"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Early Career" object="Contribution Rate Data"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Early Career" object="Pensionable Salary Data"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Early Career" object="Debt Status Data"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Early Career" object="Benefit Structure Data"/>
  <relinst type="segment has suggestion" subject="Workplace Under Saver Early Career" object="Increase Personal Contribution Rate Towards Adequacy Target"/>
  <relinst type="segment has better position definition" subject="Workplace Under Saver Early Career" object="Better Position Under Saver Early"/>
  <relinst type="segment has prevalence rationale" subject="Workplace Under Saver Early Career" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Workplace Under Saver Early Career" object="Aged 25 To 39"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Workplace Under Saver Early Career" object="Contribution Below Adequacy Target"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Workplace Under Saver Early Career" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Workplace Under Saver Early Career" object="Defined Contribution Only"/>

  <!-- S7 Workplace Under Saver Mid Career -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Workplace Under Saver Mid Career"/>
  <relinst type="segment addresses situation" subject="Workplace Under Saver Mid Career" object="Increasing Pension Contributions"/>
  <relinst type="segment requires characteristic" subject="Workplace Under Saver Mid Career" object="Aged 40 To 54"/>
  <relinst type="segment requires characteristic" subject="Workplace Under Saver Mid Career" object="Contribution Below Adequacy Target"/>
  <relinst type="segment requires characteristic" subject="Workplace Under Saver Mid Career" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="Workplace Under Saver Mid Career" object="Defined Contribution Only"/>
  <relinst type="segment excludes characteristic" subject="Workplace Under Saver Mid Career" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Workplace Under Saver Mid Career" object="Safeguarded Benefits Held"/>
  <relinst type="segment excludes characteristic" subject="Workplace Under Saver Mid Career" object="Capacity Not Established"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Mid Career" object="Age Data"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Mid Career" object="Contribution Rate Data"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Mid Career" object="Pensionable Salary Data"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Mid Career" object="Debt Status Data"/>
  <relinst type="segment requires data item" subject="Workplace Under Saver Mid Career" object="Benefit Structure Data"/>
  <relinst type="segment has suggestion" subject="Workplace Under Saver Mid Career" object="Increase Personal Contribution Rate And Review Annually"/>
  <relinst type="segment has better position definition" subject="Workplace Under Saver Mid Career" object="Better Position Under Saver Mid"/>
  <relinst type="segment has prevalence rationale" subject="Workplace Under Saver Mid Career" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Workplace Under Saver Mid Career" object="Aged 40 To 54"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Workplace Under Saver Mid Career" object="Contribution Below Adequacy Target"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Workplace Under Saver Mid Career" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Workplace Under Saver Mid Career" object="Defined Contribution Only"/>

  <!-- S8 Approaching Retirement Access Decision. The suggestion is       -->
  <!-- PHASED ACCESS, not a computed tax optimisation. A full marginal    -->
  <!-- rate optimisation would need other income, state pension date and  -->
  <!-- PCLS history, pushing the segment past the COBS 9B.4.9R(2)         -->
  <!-- comprehensive consideration ceiling.                               -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Approaching Retirement Access Decision"/>
  <relinst type="segment addresses situation" subject="Approaching Retirement Access Decision" object="Choosing How To Access A Pension"/>
  <relinst type="segment requires characteristic" subject="Approaching Retirement Access Decision" object="Approaching Retirement"/>
  <relinst type="segment requires characteristic" subject="Approaching Retirement Access Decision" object="Defined Contribution Only"/>
  <relinst type="segment requires characteristic" subject="Approaching Retirement Access Decision" object="Access Intent Stated"/>
  <relinst type="segment requires characteristic" subject="Approaching Retirement Access Decision" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="Approaching Retirement Access Decision" object="Total Pension Provision Above Minimum"/>
  <relinst type="segment excludes characteristic" subject="Approaching Retirement Access Decision" object="Safeguarded Benefits Held"/>
  <relinst type="segment excludes characteristic" subject="Approaching Retirement Access Decision" object="Significant Health Issue Affecting Life Expectancy"/>
  <relinst type="segment excludes characteristic" subject="Approaching Retirement Access Decision" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Approaching Retirement Access Decision" object="Capacity Not Established"/>
  <relinst type="segment requires data item" subject="Approaching Retirement Access Decision" object="Age Data"/>
  <relinst type="segment requires data item" subject="Approaching Retirement Access Decision" object="Target Retirement Age Data"/>
  <relinst type="segment requires data item" subject="Approaching Retirement Access Decision" object="Pension Pots Data"/>
  <relinst type="segment requires data item" subject="Approaching Retirement Access Decision" object="Benefit Structure Data"/>
  <relinst type="segment requires data item" subject="Approaching Retirement Access Decision" object="Debt Status Data"/>
  <relinst type="segment has suggestion" subject="Approaching Retirement Access Decision" object="Take Tax Free Cash Then Phased UFPLS"/>
  <relinst type="segment has better position definition" subject="Approaching Retirement Access Decision" object="Better Position Access Decision"/>
  <relinst type="segment has prevalence rationale" subject="Approaching Retirement Access Decision" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Approaching Retirement Access Decision" object="Approaching Retirement"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Approaching Retirement Access Decision" object="Defined Contribution Only"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Approaching Retirement Access Decision" object="Access Intent Stated"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Approaching Retirement Access Decision" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Approaching Retirement Access Decision" object="Total Pension Provision Above Minimum"/>

  <!-- S9 Annuity Interest Approaching Retirement. Same situation as S8,  -->
  <!-- mutually exclusive by the stated income preference. Note that      -->
  <!-- assuming a flexible over fixed income preference is PROHIBITED     -->
  <!-- (FCA poor practice), so this is a stated characteristic.           -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Annuity Interest Approaching Retirement"/>
  <relinst type="segment addresses situation" subject="Annuity Interest Approaching Retirement" object="Choosing How To Access A Pension"/>
  <relinst type="segment requires characteristic" subject="Annuity Interest Approaching Retirement" object="Approaching Retirement"/>
  <relinst type="segment requires characteristic" subject="Annuity Interest Approaching Retirement" object="Defined Contribution Only"/>
  <relinst type="segment requires characteristic" subject="Annuity Interest Approaching Retirement" object="Guaranteed Income Preference Stated"/>
  <relinst type="segment requires characteristic" subject="Annuity Interest Approaching Retirement" object="Total Pension Provision Above Minimum"/>
  <relinst type="segment excludes characteristic" subject="Annuity Interest Approaching Retirement" object="Safeguarded Benefits Held"/>
  <relinst type="segment excludes characteristic" subject="Annuity Interest Approaching Retirement" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Annuity Interest Approaching Retirement" object="Capacity Not Established"/>
  <relinst type="segment requires data item" subject="Annuity Interest Approaching Retirement" object="Age Data"/>
  <relinst type="segment requires data item" subject="Annuity Interest Approaching Retirement" object="Target Retirement Age Data"/>
  <relinst type="segment requires data item" subject="Annuity Interest Approaching Retirement" object="Pension Pots Data"/>
  <relinst type="segment requires data item" subject="Annuity Interest Approaching Retirement" object="Benefit Structure Data"/>
  <relinst type="segment has suggestion" subject="Annuity Interest Approaching Retirement" object="Consider Annuity Features Including Inflation Linking"/>
  <relinst type="segment has better position definition" subject="Annuity Interest Approaching Retirement" object="Better Position Annuity Interest"/>
  <relinst type="segment has prevalence rationale" subject="Annuity Interest Approaching Retirement" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Annuity Interest Approaching Retirement" object="Approaching Retirement"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Annuity Interest Approaching Retirement" object="Defined Contribution Only"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Annuity Interest Approaching Retirement" object="Guaranteed Income Preference Stated"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Annuity Interest Approaching Retirement" object="Total Pension Provision Above Minimum"/>

  <!-- S10 Unsustainable Drawdown Segment -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Unsustainable Drawdown Segment"/>
  <relinst type="segment addresses situation" subject="Unsustainable Drawdown Segment" object="Setting A Sustainable Withdrawal Rate"/>
  <relinst type="segment requires characteristic" subject="Unsustainable Drawdown Segment" object="Withdrawal Rate Above Sustainable"/>
  <relinst type="segment requires characteristic" subject="Unsustainable Drawdown Segment" object="In Drawdown"/>
  <relinst type="segment requires characteristic" subject="Unsustainable Drawdown Segment" object="Defined Contribution Only"/>
  <relinst type="segment requires characteristic" subject="Unsustainable Drawdown Segment" object="Total Pension Provision Above Minimum"/>
  <relinst type="segment excludes characteristic" subject="Unsustainable Drawdown Segment" object="Safeguarded Benefits Held"/>
  <relinst type="segment excludes characteristic" subject="Unsustainable Drawdown Segment" object="Significant Health Issue Affecting Life Expectancy"/>
  <relinst type="segment excludes characteristic" subject="Unsustainable Drawdown Segment" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Unsustainable Drawdown Segment" object="Capacity Not Established"/>
  <relinst type="segment requires data item" subject="Unsustainable Drawdown Segment" object="Withdrawal Amount Data"/>
  <relinst type="segment requires data item" subject="Unsustainable Drawdown Segment" object="Drawdown Fund Value Data"/>
  <relinst type="segment requires data item" subject="Unsustainable Drawdown Segment" object="Age Data"/>
  <relinst type="segment requires data item" subject="Unsustainable Drawdown Segment" object="Benefit Structure Data"/>
  <relinst type="segment has suggestion" subject="Unsustainable Drawdown Segment" object="Reduce Annual Withdrawal Towards Sustainable Rate"/>
  <relinst type="segment relies on assumption" subject="Unsustainable Drawdown Segment" object="Population Life Expectancy Data Applies"/>
  <relinst type="segment has better position definition" subject="Unsustainable Drawdown Segment" object="Better Position Drawdown"/>
  <relinst type="segment has prevalence rationale" subject="Unsustainable Drawdown Segment" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Unsustainable Drawdown Segment" object="Withdrawal Rate Above Sustainable"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Unsustainable Drawdown Segment" object="In Drawdown"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Unsustainable Drawdown Segment" object="Defined Contribution Only"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Unsustainable Drawdown Segment" object="Total Pension Provision Above Minimum"/>

  <!-- S11 Multiple Small Pots Non Consolidation. Demonstrates            -->
  <!-- COBS 9B.4.41G: multi pot support IS permitted for decisions that   -->
  <!-- do not require consolidation. The suggestion carries NO            -->
  <!-- consolidation recommendation. Excludes higher rate taxpayers so it -->
  <!-- does not overlap S14 within the same situation (COBS 9B.4.7R).     -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Multiple Small Pots Non Consolidation"/>
  <relinst type="segment addresses situation" subject="Multiple Small Pots Non Consolidation" object="Dealing With Multiple Small Pots"/>
  <relinst type="segment requires characteristic" subject="Multiple Small Pots Non Consolidation" object="Holds Multiple Small Pots"/>
  <relinst type="segment requires characteristic" subject="Multiple Small Pots Non Consolidation" object="Defined Contribution Only"/>
  <relinst type="segment requires characteristic" subject="Multiple Small Pots Non Consolidation" object="No Problem Debt"/>
  <relinst type="segment excludes characteristic" subject="Multiple Small Pots Non Consolidation" object="Safeguarded Benefits Held"/>
  <relinst type="segment excludes characteristic" subject="Multiple Small Pots Non Consolidation" object="Problem Debt Present"/>
  <relinst type="segment excludes characteristic" subject="Multiple Small Pots Non Consolidation" object="Higher Rate Taxpayer"/>
  <relinst type="segment requires data item" subject="Multiple Small Pots Non Consolidation" object="Pension Pots Data"/>
  <relinst type="segment requires data item" subject="Multiple Small Pots Non Consolidation" object="Benefit Structure Data"/>
  <relinst type="segment requires data item" subject="Multiple Small Pots Non Consolidation" object="Debt Status Data"/>
  <relinst type="segment has suggestion" subject="Multiple Small Pots Non Consolidation" object="Review Small Pot Charges And Check For Lost Pots"/>
  <relinst type="segment has better position definition" subject="Multiple Small Pots Non Consolidation" object="Better Position Small Pots"/>
  <relinst type="segment has prevalence rationale" subject="Multiple Small Pots Non Consolidation" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Multiple Small Pots Non Consolidation" object="Holds Multiple Small Pots"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Multiple Small Pots Non Consolidation" object="Defined Contribution Only"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Multiple Small Pots Non Consolidation" object="No Problem Debt"/>

  <!-- S12 DELIBERATELY DEFECTIVE. No excluding characteristics defined,  -->
  <!-- no better position definition, and it relies on the PROHIBITED     -->
  <!-- assumption that an emergency fund is present, which has no         -->
  <!-- evidence basis. Four design defects. Must never deliver.           -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Cash Segment Without Exclusions"/>
  <relinst type="segment addresses situation" subject="Cash Segment Without Exclusions" object="Investing Excess Cash"/>
  <relinst type="segment requires characteristic" subject="Cash Segment Without Exclusions" object="Excess Cash Above Emergency Buffer"/>
  <relinst type="segment requires characteristic" subject="Cash Segment Without Exclusions" object="Accepts Investment Risk Over Medium Term"/>
  <relinst type="segment requires data item" subject="Cash Segment Without Exclusions" object="Cash Balance Data"/>
  <relinst type="segment requires data item" subject="Cash Segment Without Exclusions" object="Monthly Essential Expenditure Data"/>
  <relinst type="segment has suggestion" subject="Cash Segment Without Exclusions" object="Invest Excess Cash Without Exclusion Checks"/>
  <relinst type="segment relies on assumption" subject="Cash Segment Without Exclusions" object="Emergency Fund Is Present"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Segment Without Exclusions" object="Excess Cash Above Emergency Buffer"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Cash Segment Without Exclusions" object="Accepts Investment Risk Over Medium Term"/>

  <!-- S13 DELIBERATELY DEFECTIVE. Nine including characteristics against -->
  <!-- a ceiling of eight, and two of them are FCA poor practice for this -->
  <!-- situation. Also two characteristics are not recorded as relevant   -->
  <!-- to the suggestion, breaching the COBS 9B.4.16R(2) two limb test.   -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Over Individualised Drawdown Segment"/>
  <relinst type="segment addresses situation" subject="Over Individualised Drawdown Segment" object="Setting A Sustainable Withdrawal Rate"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="Withdrawal Rate Above Sustainable"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="In Drawdown"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="Defined Contribution Only"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="Total Pension Provision Above Minimum"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="Mortgage Repayment Cost Above Threshold"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="Inheritance Windfall Received"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="Higher Rate Taxpayer"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="Approaching Retirement"/>
  <relinst type="segment requires characteristic" subject="Over Individualised Drawdown Segment" object="Has Emergency Fund"/>
  <relinst type="segment excludes characteristic" subject="Over Individualised Drawdown Segment" object="Safeguarded Benefits Held"/>
  <relinst type="segment requires data item" subject="Over Individualised Drawdown Segment" object="Withdrawal Amount Data"/>
  <relinst type="segment requires data item" subject="Over Individualised Drawdown Segment" object="Drawdown Fund Value Data"/>
  <relinst type="segment has suggestion" subject="Over Individualised Drawdown Segment" object="Reduce Withdrawal Using Detailed Personal Circumstances"/>
  <relinst type="segment has better position definition" subject="Over Individualised Drawdown Segment" object="Better Position Drawdown"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Over Individualised Drawdown Segment" object="Withdrawal Rate Above Sustainable"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Over Individualised Drawdown Segment" object="In Drawdown"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Over Individualised Drawdown Segment" object="Defined Contribution Only"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Over Individualised Drawdown Segment" object="Total Pension Provision Above Minimum"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Over Individualised Drawdown Segment" object="Higher Rate Taxpayer"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Over Individualised Drawdown Segment" object="Approaching Retirement"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Over Individualised Drawdown Segment" object="Has Emergency Fund"/>

  <!-- S14 Design compliant but its SUGGESTION is a consolidation         -->
  <!-- recommendation, which COBS 9B.4.38R prohibits. Exercises the       -->
  <!-- delivery block layer rather than the design defect layer.          -->
  <relinst type="firm defines segment" subject="Kesterly Wealth" object="Small Pot Consolidation Segment"/>
  <relinst type="segment addresses situation" subject="Small Pot Consolidation Segment" object="Dealing With Multiple Small Pots"/>
  <relinst type="segment requires characteristic" subject="Small Pot Consolidation Segment" object="Holds Multiple Small Pots"/>
  <relinst type="segment requires characteristic" subject="Small Pot Consolidation Segment" object="Defined Contribution Only"/>
  <relinst type="segment requires characteristic" subject="Small Pot Consolidation Segment" object="No Problem Debt"/>
  <relinst type="segment requires characteristic" subject="Small Pot Consolidation Segment" object="Higher Rate Taxpayer"/>
  <relinst type="segment excludes characteristic" subject="Small Pot Consolidation Segment" object="Safeguarded Benefits Held"/>
  <relinst type="segment excludes characteristic" subject="Small Pot Consolidation Segment" object="Problem Debt Present"/>
  <relinst type="segment requires data item" subject="Small Pot Consolidation Segment" object="Pension Pots Data"/>
  <relinst type="segment requires data item" subject="Small Pot Consolidation Segment" object="Benefit Structure Data"/>
  <relinst type="segment requires data item" subject="Small Pot Consolidation Segment" object="Debt Status Data"/>
  <relinst type="segment requires data item" subject="Small Pot Consolidation Segment" object="Taxable Income Data"/>
  <relinst type="segment has suggestion" subject="Small Pot Consolidation Segment" object="Consolidate Small Pots Into Single Arrangement"/>
  <relinst type="segment has better position definition" subject="Small Pot Consolidation Segment" object="Better Position Small Pots"/>
  <relinst type="segment has prevalence rationale" subject="Small Pot Consolidation Segment" object="true"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Small Pot Consolidation Segment" object="Holds Multiple Small Pots"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Small Pot Consolidation Segment" object="Defined Contribution Only"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Small Pot Consolidation Segment" object="No Problem Debt"/>
  <relinst type="segment characteristic relevant to suggestion" subject="Small Pot Consolidation Segment" object="Higher Rate Taxpayer"/>

  <relinst type="segment has alternative vulnerable segment" subject="Cash Heavy Younger Accumulator" object="Cash Heavy Pre Retiree"/>
  <relinst type="segment has documented vulnerability rationale" subject="Concentrated Single Holding Investor" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Unwrapped Investor" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="High Cost Legacy Fund Holder" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Workplace Under Saver Early Career" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Workplace Under Saver Mid Career" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Approaching Retirement Access Decision" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Annuity Interest Approaching Retirement" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Unsustainable Drawdown Segment" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Multiple Small Pots Non Consolidation" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Cash Heavy Pre Retiree" object="true"/>
  <relinst type="segment has documented vulnerability rationale" subject="Small Pot Consolidation Segment" object="true"/>

  <!-- ================= Suggestion catalogue facts ==================== -->
  <!-- Every suggestion must be PRESENTED ON A GROUP BASIS. If it is      -->
  <!-- presented as suitable for the individual, the article 55A(2)       -->
  <!-- carve out fails and the firm has carried on article 53 advising     -->
  <!-- without permission.                                                -->

  <relinst type="suggestion references product" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="Kesterly Stocks And Shares ISA"/>
  <relinst type="suggestion references product" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="Kesterly Global Multi Asset Index Fund"/>
  <relinst type="suggestion presents group basis" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="true"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="Imminent Property Purchase Requiring Cash"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="Intends To Withdraw Whole Portfolio Within Twelve Months"/>
  <relinst type="suggestion is contraindicated by characteristic" subject="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund" object="Cannot Tolerate Capital Loss"/>

  <relinst type="suggestion references product" subject="Invest Excess Cash Into Lower Volatility Multi Asset Fund" object="Kesterly Lower Volatility Multi Asset Fund"/>
  <relinst type="suggestion references product" subject="Invest Excess Cash Into Lower Volatility Multi Asset Fund" object="Kesterly Stocks And Shares ISA"/>
  <relinst type="suggestion presents group basis" subject="Invest Excess Cash Into Lower Volatility Multi Asset Fund" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Invest Excess Cash Into Lower Volatility Multi Asset Fund" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Invest Excess Cash Into Lower Volatility Multi Asset Fund" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Invest Excess Cash Into Lower Volatility Multi Asset Fund" object="true"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Invest Excess Cash Into Lower Volatility Multi Asset Fund" object="Imminent Property Purchase Requiring Cash"/>
  <relinst type="suggestion is contraindicated by characteristic" subject="Invest Excess Cash Into Lower Volatility Multi Asset Fund" object="Cannot Tolerate Capital Loss"/>

  <relinst type="suggestion references product" subject="Diversify Into Global Multi Asset Index Fund" object="Kesterly Global Multi Asset Index Fund"/>
  <relinst type="suggestion presents group basis" subject="Diversify Into Global Multi Asset Index Fund" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Diversify Into Global Multi Asset Index Fund" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Diversify Into Global Multi Asset Index Fund" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Diversify Into Global Multi Asset Index Fund" object="true"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Diversify Into Global Multi Asset Index Fund" object="Intends To Withdraw Whole Portfolio Within Twelve Months"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Diversify Into Global Multi Asset Index Fund" object="Imminent Property Purchase Requiring Cash"/>
  <relinst type="suggestion is contraindicated by characteristic" subject="Diversify Into Global Multi Asset Index Fund" object="Cannot Tolerate Capital Loss"/>

  <relinst type="suggestion references product" subject="Use Stocks And Shares ISA Allowance For New Contributions" object="Kesterly Stocks And Shares ISA"/>
  <relinst type="suggestion presents group basis" subject="Use Stocks And Shares ISA Allowance For New Contributions" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Use Stocks And Shares ISA Allowance For New Contributions" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Use Stocks And Shares ISA Allowance For New Contributions" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Use Stocks And Shares ISA Allowance For New Contributions" object="true"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Use Stocks And Shares ISA Allowance For New Contributions" object="Imminent Property Purchase Requiring Cash"/>

  <relinst type="suggestion references product" subject="Switch To Lower Cost Equivalent Index Fund" object="Meridian Low Cost Index Fund"/>
  <relinst type="suggestion presents group basis" subject="Switch To Lower Cost Equivalent Index Fund" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Switch To Lower Cost Equivalent Index Fund" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Switch To Lower Cost Equivalent Index Fund" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Switch To Lower Cost Equivalent Index Fund" object="true"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Switch To Lower Cost Equivalent Index Fund" object="Intends To Withdraw Whole Portfolio Within Twelve Months"/>

  <relinst type="suggestion references product" subject="Increase Personal Contribution Rate Towards Adequacy Target" object="Kesterly Workplace Pension"/>
  <relinst type="suggestion presents group basis" subject="Increase Personal Contribution Rate Towards Adequacy Target" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Increase Personal Contribution Rate Towards Adequacy Target" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Increase Personal Contribution Rate Towards Adequacy Target" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Increase Personal Contribution Rate Towards Adequacy Target" object="true"/>

  <relinst type="suggestion references product" subject="Increase Personal Contribution Rate And Review Annually" object="Kesterly Workplace Pension"/>
  <relinst type="suggestion presents group basis" subject="Increase Personal Contribution Rate And Review Annually" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Increase Personal Contribution Rate And Review Annually" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Increase Personal Contribution Rate And Review Annually" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Increase Personal Contribution Rate And Review Annually" object="true"/>

  <relinst type="suggestion references product" subject="Take Tax Free Cash Then Phased UFPLS" object="Kesterly Workplace Pension"/>
  <relinst type="suggestion presents group basis" subject="Take Tax Free Cash Then Phased UFPLS" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Take Tax Free Cash Then Phased UFPLS" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Take Tax Free Cash Then Phased UFPLS" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Take Tax Free Cash Then Phased UFPLS" object="true"/>
  <relinst type="suggestion suggests access method" subject="Take Tax Free Cash Then Phased UFPLS" object="Phased UFPLS"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Take Tax Free Cash Then Phased UFPLS" object="Pending Divorce Settlement Affecting Assets"/>

  <!-- The annuity suggestion. Features only, no particular annuity, no    -->
  <!-- quote, MoneyHelper comparison signpost, interaction then ends.      -->
  <relinst type="suggestion presents group basis" subject="Consider Annuity Features Including Inflation Linking" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Consider Annuity Features Including Inflation Linking" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Consider Annuity Features Including Inflation Linking" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Consider Annuity Features Including Inflation Linking" object="true"/>
  <relinst type="suggestion concerns annuity" subject="Consider Annuity Features Including Inflation Linking" object="true"/>
  <relinst type="suggestion limited to annuity features" subject="Consider Annuity Features Including Inflation Linking" object="true"/>
  <relinst type="suggestion names particular annuity" subject="Consider Annuity Features Including Inflation Linking" object="false"/>
  <relinst type="suggestion includes annuity quote" subject="Consider Annuity Features Including Inflation Linking" object="false"/>
  <relinst type="suggestion suggests access method" subject="Consider Annuity Features Including Inflation Linking" object="Annuity Features"/>
  <relinst type="suggestion relies on life expectancy assumption" subject="Consider Annuity Features Including Inflation Linking" object="true"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Consider Annuity Features Including Inflation Linking" object="Pending Divorce Settlement Affecting Assets"/>

  <relinst type="suggestion references product" subject="Reduce Annual Withdrawal Towards Sustainable Rate" object="Kesterly Workplace Pension"/>
  <relinst type="suggestion presents group basis" subject="Reduce Annual Withdrawal Towards Sustainable Rate" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Reduce Annual Withdrawal Towards Sustainable Rate" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Reduce Annual Withdrawal Towards Sustainable Rate" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Reduce Annual Withdrawal Towards Sustainable Rate" object="true"/>
  <relinst type="suggestion suggests access method" subject="Reduce Annual Withdrawal Towards Sustainable Rate" object="Reduced Drawdown"/>
  <relinst type="suggestion relies on life expectancy assumption" subject="Reduce Annual Withdrawal Towards Sustainable Rate" object="true"/>
  <relinst type="suggestion is contraindicated by indicator" subject="Reduce Annual Withdrawal Towards Sustainable Rate" object="Pending Divorce Settlement Affecting Assets"/>

  <relinst type="suggestion presents group basis" subject="Review Small Pot Charges And Check For Lost Pots" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Review Small Pot Charges And Check For Lost Pots" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Review Small Pot Charges And Check For Lost Pots" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Review Small Pot Charges And Check For Lost Pots" object="true"/>
  <relinst type="suggestion is consolidation recommendation" subject="Review Small Pot Charges And Check For Lost Pots" object="false"/>

  <relinst type="suggestion references product" subject="Invest Excess Cash Without Exclusion Checks" object="Kesterly Global Multi Asset Index Fund"/>
  <relinst type="suggestion presents group basis" subject="Invest Excess Cash Without Exclusion Checks" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Invest Excess Cash Without Exclusion Checks" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Invest Excess Cash Without Exclusion Checks" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Invest Excess Cash Without Exclusion Checks" object="true"/>

  <relinst type="suggestion references product" subject="Reduce Withdrawal Using Detailed Personal Circumstances" object="Kesterly Workplace Pension"/>
  <relinst type="suggestion presents group basis" subject="Reduce Withdrawal Using Detailed Personal Circumstances" object="true"/>
  <relinst type="suggestion relies on life expectancy assumption" subject="Reduce Withdrawal Using Detailed Personal Circumstances" object="true"/>

  <!-- COBS 9B.4.38R prohibited consolidation recommendation -->
  <relinst type="suggestion references product" subject="Consolidate Small Pots Into Single Arrangement" object="Kesterly Workplace Pension"/>
  <relinst type="suggestion presents group basis" subject="Consolidate Small Pots Into Single Arrangement" object="true"/>
  <relinst type="suggestion has cost consideration record" subject="Consolidate Small Pots Into Single Arrangement" object="true"/>
  <relinst type="suggestion has target market confirmation" subject="Consolidate Small Pots Into Single Arrangement" object="true"/>
  <relinst type="suggestion has provider strength record" subject="Consolidate Small Pots Into Single Arrangement" object="true"/>
  <relinst type="suggestion is consolidation recommendation" subject="Consolidate Small Pots Into Single Arrangement" object="true"/>
  <relinst type="suggestion transfers multiple arrangements" subject="Consolidate Small Pots Into Single Arrangement" object="true"/>

  <!-- ======================= Product catalogue ======================= -->

  <relinst type="product has category" subject="Kesterly Global Multi Asset Index Fund" object="Mainstream Packaged Product"/>
  <relinst type="product is packaged" subject="Kesterly Global Multi Asset Index Fund" object="true"/>
  <relinst type="product is leveraged or illiquid" subject="Kesterly Global Multi Asset Index Fund" object="false"/>
  <relinst type="product adaptation reviewed" subject="Kesterly Global Multi Asset Index Fund" object="true"/>
  <relinst type="product target market includes segment" subject="Kesterly Global Multi Asset Index Fund" object="Cash Heavy Younger Accumulator"/>
  <relinst type="product target market includes segment" subject="Kesterly Global Multi Asset Index Fund" object="Concentrated Single Holding Investor"/>
  <relinst type="product target market includes segment" subject="Kesterly Global Multi Asset Index Fund" object="Cash Segment Without Exclusions"/>

  <relinst type="product has category" subject="Kesterly Lower Volatility Multi Asset Fund" object="Mainstream Packaged Product"/>
  <relinst type="product is packaged" subject="Kesterly Lower Volatility Multi Asset Fund" object="true"/>
  <relinst type="product is leveraged or illiquid" subject="Kesterly Lower Volatility Multi Asset Fund" object="false"/>
  <relinst type="product adaptation reviewed" subject="Kesterly Lower Volatility Multi Asset Fund" object="true"/>
  <relinst type="product target market includes segment" subject="Kesterly Lower Volatility Multi Asset Fund" object="Cash Heavy Pre Retiree"/>

  <relinst type="product has category" subject="Kesterly Stocks And Shares ISA" object="Mainstream Wrapper"/>
  <relinst type="product is packaged" subject="Kesterly Stocks And Shares ISA" object="false"/>
  <relinst type="product is leveraged or illiquid" subject="Kesterly Stocks And Shares ISA" object="false"/>
  <relinst type="product adaptation reviewed" subject="Kesterly Stocks And Shares ISA" object="true"/>
  <relinst type="product has differential cost through targeted support" subject="Kesterly Stocks And Shares ISA" object="true"/>
  <relinst type="product target market includes segment" subject="Kesterly Stocks And Shares ISA" object="Cash Heavy Younger Accumulator"/>
  <relinst type="product target market includes segment" subject="Kesterly Stocks And Shares ISA" object="Cash Heavy Pre Retiree"/>
  <relinst type="product target market includes segment" subject="Kesterly Stocks And Shares ISA" object="Unwrapped Investor"/>

  <relinst type="product has category" subject="Kesterly Workplace Pension" object="Mainstream Wrapper"/>
  <relinst type="product is packaged" subject="Kesterly Workplace Pension" object="false"/>
  <relinst type="product is leveraged or illiquid" subject="Kesterly Workplace Pension" object="false"/>
  <relinst type="product adaptation reviewed" subject="Kesterly Workplace Pension" object="true"/>
  <relinst type="product target market includes segment" subject="Kesterly Workplace Pension" object="Workplace Under Saver Early Career"/>
  <relinst type="product target market includes segment" subject="Kesterly Workplace Pension" object="Workplace Under Saver Mid Career"/>
  <relinst type="product target market includes segment" subject="Kesterly Workplace Pension" object="Approaching Retirement Access Decision"/>
  <relinst type="product target market includes segment" subject="Kesterly Workplace Pension" object="Unsustainable Drawdown Segment"/>
  <relinst type="product target market includes segment" subject="Kesterly Workplace Pension" object="Small Pot Consolidation Segment"/>
  <relinst type="product target market includes segment" subject="Kesterly Workplace Pension" object="Over Individualised Drawdown Segment"/>

  <relinst type="product has category" subject="Meridian Low Cost Index Fund" object="Mainstream Packaged Product"/>
  <relinst type="product is packaged" subject="Meridian Low Cost Index Fund" object="true"/>
  <relinst type="product is leveraged or illiquid" subject="Meridian Low Cost Index Fund" object="false"/>
  <relinst type="product adaptation reviewed" subject="Meridian Low Cost Index Fund" object="true"/>
  <relinst type="product target market includes segment" subject="Meridian Low Cost Index Fund" object="High Cost Legacy Fund Holder"/>

  <relinst type="product has category" subject="Thornbury Unlisted Growth Fund" object="Non Mass Market Investment"/>
  <relinst type="product is packaged" subject="Thornbury Unlisted Growth Fund" object="false"/>
  <relinst type="product is leveraged or illiquid" subject="Thornbury Unlisted Growth Fund" object="true"/>
  <relinst type="product has category" subject="Halcyon Mini Bond" object="Restricted Mass Market Investment"/>
  <relinst type="product is packaged" subject="Halcyon Mini Bond" object="false"/>
  <relinst type="product has category" subject="Vellum Leveraged Equity Fund" object="Mainstream Packaged Product"/>
  <relinst type="product is packaged" subject="Vellum Leveraged Equity Fund" object="false"/>
  <relinst type="product is leveraged or illiquid" subject="Vellum Leveraged Equity Fund" object="true"/>

  <relinst type="category is prohibited" subject="Non Mass Market Investment" object="true"/>
  <relinst type="category is prohibited" subject="Restricted Mass Market Investment" object="true"/>
  <relinst type="category is prohibited" subject="Mainstream Packaged Product" object="false"/>
  <relinst type="category is prohibited" subject="Mainstream Wrapper" object="false"/>

  <!-- ================= Assumptions and evidence bases ================ -->
  <!-- An assumption must be reasonable, referable to evidence, and       -->
  <!-- IMMATERIAL to suitability. Emergency Fund Is Present is material   -->
  <!-- and has no evidence basis, so it is a design defect wherever used.  -->

  <relinst type="assumption is material to suitability" subject="Cash Savers Want Inflation Beating Returns" object="false"/>
  <relinst type="assumption has evidence basis" subject="Cash Savers Want Inflation Beating Returns" object="Market Consensus Evidence"/>
  <relinst type="assumption is permitted" subject="Cash Savers Want Inflation Beating Returns" object="true"/>
  <relinst type="assumption is material to suitability" subject="Population Life Expectancy Data Applies" object="false"/>
  <relinst type="assumption has evidence basis" subject="Population Life Expectancy Data Applies" object="Industry Practice Evidence"/>
  <relinst type="assumption is permitted" subject="Population Life Expectancy Data Applies" object="true"/>
  <relinst type="assumption is material to suitability" subject="Emergency Fund Is Present" object="true"/>
  <relinst type="assumption is permitted" subject="Emergency Fund Is Present" object="false"/>

  <!-- ============ FG21/1 four drivers of vulnerability =============== -->
  <!-- Severity is CATEGORICAL, not encoded in certainty, so a mild       -->
  <!-- indicator cannot be mistaken for a severe one by a count gate.     -->

  <relinst type="vulnerability indicator belongs to driver" subject="Recent Bereavement" object="Life Events"/>
  <relinst type="vulnerability indicator requires referral" subject="Recent Bereavement" object="true"/>
  <relinst type="vulnerability indicator belongs to driver" subject="Terminal Illness Diagnosis" object="Health"/>
  <relinst type="vulnerability indicator requires referral" subject="Terminal Illness Diagnosis" object="true"/>
  <relinst type="vulnerability indicator belongs to driver" subject="Cognitive Impairment" object="Health"/>
  <relinst type="vulnerability indicator requires referral" subject="Cognitive Impairment" object="true"/>
  <relinst type="vulnerability indicator belongs to driver" subject="Domestic Abuse Disclosure" object="Life Events"/>
  <relinst type="vulnerability indicator requires referral" subject="Domestic Abuse Disclosure" object="true"/>
  <relinst type="vulnerability indicator belongs to driver" subject="Recent Income Shock" object="Resilience"/>
  <relinst type="vulnerability indicator requires adjusted delivery" subject="Recent Income Shock" object="true"/>
  <relinst type="vulnerability indicator belongs to driver" subject="Low Financial Capability" object="Capability"/>
  <relinst type="vulnerability indicator requires adjusted delivery" subject="Low Financial Capability" object="true"/>
  <relinst type="vulnerability indicator belongs to driver" subject="Poor Digital Skills" object="Capability"/>
  <relinst type="vulnerability indicator requires adjusted delivery" subject="Poor Digital Skills" object="true"/>
  <relinst type="vulnerability indicator belongs to driver" subject="Hearing Impairment" object="Health"/>
  <relinst type="vulnerability indicator requires adjusted delivery" subject="Hearing Impairment" object="true"/>
  <relinst type="vulnerability indicator belongs to driver" subject="Caring Responsibilities" object="Life Events"/>
  <relinst type="vulnerability indicator requires adjusted delivery" subject="Caring Responsibilities" object="true"/>
  <relinst type="vulnerability indicator requires referral" subject="No Vulnerability Indicator Recorded" object="false"/>
  <relinst type="vulnerability indicator requires adjusted delivery" subject="No Vulnerability Indicator Recorded" object="false"/>

  <!-- Contra indications. Only those the firm holds and that are         -->
  <!-- READILY ACCESSIBLE engage COBS 9B.5.11R.                           -->
  <relinst type="contra indication is readily accessible" subject="Intends To Withdraw Whole Portfolio Within Twelve Months" object="true"/>
  <relinst type="contra indication is readily accessible" subject="Pending Divorce Settlement Affecting Assets" object="true"/>
  <relinst type="contra indication is readily accessible" subject="Imminent Property Purchase Requiring Cash" object="true"/>
  <relinst type="contra indication is readily accessible" subject="No Contra Indication Recorded" object="false"/>

  <!-- ================== Data item configuration ====================== -->
  <!-- Staleness windows are PER ITEM. Age, income, withdrawal rate and   -->
  <!-- cash balance decay at wholly different rates.                      -->
  <!-- Credit card history and transaction pattern analysis are NOT        -->
  <!-- readily accessible, per FCA poor practice, so they can never be     -->
  <!-- required for alignment.                                             -->

  <relinst type="data item is readily accessible" subject="Age Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Age Data" object="3650"/>
  <relinst type="data item is readily accessible" subject="Cash Balance Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Cash Balance Data" object="90"/>
  <relinst type="data item is readily accessible" subject="Monthly Essential Expenditure Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Monthly Essential Expenditure Data" object="180"/>
  <relinst type="data item is readily accessible" subject="Investment Holdings Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Investment Holdings Data" object="30"/>
  <relinst type="data item is readily accessible" subject="Pension Pots Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Pension Pots Data" object="90"/>
  <relinst type="data item is readily accessible" subject="Contribution Rate Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Contribution Rate Data" object="180"/>
  <relinst type="data item is readily accessible" subject="Pensionable Salary Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Pensionable Salary Data" object="365"/>
  <relinst type="data item is readily accessible" subject="Target Retirement Age Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Target Retirement Age Data" object="730"/>
  <relinst type="data item is readily accessible" subject="Withdrawal Amount Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Withdrawal Amount Data" object="90"/>
  <relinst type="data item is readily accessible" subject="Drawdown Fund Value Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Drawdown Fund Value Data" object="30"/>
  <relinst type="data item is readily accessible" subject="ISA Subscription Data" object="true"/>
  <relinst type="data item has staleness window days" subject="ISA Subscription Data" object="90"/>
  <relinst type="data item is readily accessible" subject="Debt Status Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Debt Status Data" object="180"/>
  <relinst type="data item is readily accessible" subject="Risk Band Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Risk Band Data" object="365"/>
  <relinst type="data item is readily accessible" subject="Benefit Structure Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Benefit Structure Data" object="730"/>
  <relinst type="data item is readily accessible" subject="Taxable Income Data" object="true"/>
  <relinst type="data item has staleness window days" subject="Taxable Income Data" object="365"/>
  <relinst type="data item is readily accessible" subject="Credit Card History Data" object="false"/>
  <relinst type="data item is readily accessible" subject="Transaction Pattern Data" object="false"/>

  <!-- Provenance strength. Weak provenance may support an excluding        -->
  <!-- characteristic but may not establish an including one. Data driven   -->
  <!-- so a new feed is a data edit, never a rule change.                   -->
  <relinst type="provenance is weak" subject="Firm Inference" object="true"/>
  <relinst type="provenance is weak" subject="Third Party Feed" object="true"/>
  <relinst type="provenance is weak" subject="Platform System Of Record" object="false"/>
  <relinst type="provenance is weak" subject="Open Finance Feed" object="false"/>
  <relinst type="provenance is weak" subject="Client Stated" object="false"/>

  <!-- Characteristic to data item provenance links. Including            -->
  <!-- characteristics may not be established on weak provenance;         -->
  <!-- excluding characteristics may be, which is the safe asymmetry.     -->
  <relinst type="characteristic derives from data item" subject="Excess Cash Above Emergency Buffer" object="Cash Balance Data"/>
  <relinst type="characteristic derives from data item" subject="Excess Cash Above Emergency Buffer" object="Monthly Essential Expenditure Data"/>
  <relinst type="characteristic derives from data item" subject="Has Emergency Fund" object="Cash Balance Data"/>
  <relinst type="characteristic derives from data item" subject="Has Emergency Fund" object="Monthly Essential Expenditure Data"/>
  <relinst type="characteristic derives from data item" subject="Single Holding Concentration Above Limit" object="Investment Holdings Data"/>
  <relinst type="characteristic derives from data item" subject="Portfolio Above Minimum Value" object="Investment Holdings Data"/>
  <relinst type="characteristic derives from data item" subject="Contribution Below Adequacy Target" object="Contribution Rate Data"/>
  <relinst type="characteristic derives from data item" subject="Withdrawal Rate Above Sustainable" object="Withdrawal Amount Data"/>
  <relinst type="characteristic derives from data item" subject="Withdrawal Rate Above Sustainable" object="Drawdown Fund Value Data"/>
  <relinst type="characteristic derives from data item" subject="Holds Multiple Small Pots" object="Pension Pots Data"/>
  <relinst type="characteristic derives from data item" subject="Total Pension Provision Above Minimum" object="Pension Pots Data"/>
  <relinst type="characteristic derives from data item" subject="Holds Above Median Cost Fund" object="Investment Holdings Data"/>
  <relinst type="characteristic derives from data item" subject="Holds Unwrapped Investments" object="Investment Holdings Data"/>
  <relinst type="characteristic derives from data item" subject="ISA Allowance Unused" object="ISA Subscription Data"/>

  <relinst type="characteristic engages protected characteristic" subject="Significant Health Issue Affecting Life Expectancy" object="true"/>
  <relinst type="characteristic has equality justification" subject="Significant Health Issue Affecting Life Expectancy" object="Legitimate Aim Proportionate Means Recorded"/>
  <relinst type="characteristic engages protected characteristic" subject="Aged 25 To 39" object="true"/>
  <relinst type="characteristic has equality justification" subject="Aged 25 To 39" object="Legitimate Aim Proportionate Means Recorded"/>
  <relinst type="characteristic engages protected characteristic" subject="Aged 30 To 44" object="true"/>
  <relinst type="characteristic has equality justification" subject="Aged 30 To 44" object="Legitimate Aim Proportionate Means Recorded"/>
  <relinst type="characteristic engages protected characteristic" subject="Aged 40 To 54" object="true"/>
  <relinst type="characteristic has equality justification" subject="Aged 40 To 54" object="Legitimate Aim Proportionate Means Recorded"/>
  <relinst type="characteristic engages protected characteristic" subject="Aged 55 To 64" object="true"/>
  <relinst type="characteristic has equality justification" subject="Aged 55 To 64" object="Legitimate Aim Proportionate Means Recorded"/>

  <!-- Age bands as instances with edge facts -->
  <relinst type="age band has lower edge" subject="Band 25 To 39" object="25"/>
  <relinst type="age band has upper edge" subject="Band 25 To 39" object="39"/>
  <relinst type="age band has characteristic" subject="Band 25 To 39" object="Aged 25 To 39"/>
  <relinst type="age band has lower edge" subject="Band 30 To 44" object="30"/>
  <relinst type="age band has upper edge" subject="Band 30 To 44" object="44"/>
  <relinst type="age band has characteristic" subject="Band 30 To 44" object="Aged 30 To 44"/>
  <relinst type="age band has lower edge" subject="Band 40 To 54" object="40"/>
  <relinst type="age band has upper edge" subject="Band 40 To 54" object="54"/>
  <relinst type="age band has characteristic" subject="Band 40 To 54" object="Aged 40 To 54"/>
  <relinst type="age band has lower edge" subject="Band 55 To 64" object="55"/>
  <relinst type="age band has upper edge" subject="Band 55 To 64" object="64"/>
  <relinst type="age band has characteristic" subject="Band 55 To 64" object="Aged 55 To 64"/>

  <!-- ============= Disclosure set and stage requirements ============= -->
  <relinst type="disclosure item required at stage" subject="Targeted Support Service Label" object="Delivering Suggestion"/>
  <relinst type="disclosure item required at stage" subject="Nature And Limitations Of Service" object="Initial Contact"/>
  <relinst type="disclosure item required at stage" subject="Segment Common Characteristics" object="Delivering Suggestion"/>
  <relinst type="disclosure item required at stage" subject="Designed For Segment Statement" object="Delivering Suggestion"/>
  <relinst type="disclosure item required at stage" subject="Product Scope Limitations" object="Delivering Suggestion"/>
  <relinst type="disclosure item required at stage" subject="Article 55A Group Basis Statement" object="Delivering Suggestion"/>
  <relinst type="disclosure item required at stage" subject="Assumptions Used" object="Delivering Suggestion"/>
  <relinst type="disclosure item required at stage" subject="Availability Of Regulated Advice" object="Initial Contact"/>
  <relinst type="disclosure item required at stage" subject="Encouragement To Compare Market" object="Delivering Suggestion"/>
  <relinst type="disclosure item required at stage" subject="Time Limited Suitability Statement" object="Delivering Suggestion"/>
  <relinst type="disclosure item is liability disclaimer" subject="Liability Disclaimer Wording" object="true"/>
  <relinst type="disclosure item is liability disclaimer" subject="Nature And Limitations Of Service" object="false"/>

  <!-- ============ Permitted and prohibited benefit types ============= -->
  <relinst type="benefit type is permitted" subject="Client Payment" object="true"/>
  <relinst type="benefit type is permitted" subject="Affiliate Cost Reimbursement" object="true"/>
  <relinst type="benefit type is permitted" subject="Minor Non Monetary Benefit" object="true"/>
  <relinst type="benefit type is permitted" subject="Annuity Brokerage Referral Fee" object="true"/>
  <relinst type="benefit type is annuity referral only" subject="Annuity Brokerage Referral Fee" object="true"/>
  <relinst type="benefit type is permitted" subject="Product Provider Commission" object="false"/>
  <relinst type="benefit type is permitted" subject="Platform Rebate" object="false"/>

  <!-- ============ Better position definitions and projections ======== -->
  <!-- The better position test is GUIDANCE at COBS 9B.1.1G and 9B.1.2G.  -->
  <!-- The FCA prescribed NO evidence methodology, so the quantified      -->
  <!-- projection below is FIRM POLICY METHOD, not a rule derived test.   -->

  <relinst type="better position definition has metric" subject="Better Position Cash Heavy Younger" object="Projected Net Financial Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Cash Heavy Younger" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Cash Heavy Pre Retiree" object="Projected Net Financial Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Cash Heavy Pre Retiree" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Concentration" object="Projected Net Financial Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Concentration" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Wrapper" object="Projected Net Financial Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Wrapper" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Cost" object="Projected Net Financial Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Cost" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Under Saver Early" object="Projected Retirement Income Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Under Saver Early" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Under Saver Mid" object="Projected Retirement Income Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Under Saver Mid" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Access Decision" object="Projected Retirement Income Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Access Decision" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Annuity Interest" object="Projected Retirement Income Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Annuity Interest" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Drawdown" object="Projected Sustainability Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Drawdown" object="500"/>
  <relinst type="better position definition has metric" subject="Better Position Small Pots" object="Projected Net Financial Improvement"/>
  <relinst type="better position definition has threshold" subject="Better Position Small Pots" object="500"/>

  <relinst type="projection assesses segment" subject="Projection Cash Heavy Younger" object="Cash Heavy Younger Accumulator"/>
  <relinst type="projection assesses suggestion" subject="Projection Cash Heavy Younger" object="Invest Excess Cash Into Stocks And Shares ISA Multi Asset Fund"/>
  <relinst type="projection has baseline value" subject="Projection Cash Heavy Younger" object="10000"/>
  <relinst type="projection has supported value" subject="Projection Cash Heavy Younger" object="13200"/>
  <relinst type="projection has cost of acting" subject="Projection Cash Heavy Younger" object="120"/>
  <relinst type="projection has horizon years" subject="Projection Cash Heavy Younger" object="10"/>
  <relinst type="projection has detriment risk" subject="Projection Cash Heavy Younger" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Cash Heavy Younger" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Cash Heavy Pre Retiree" object="Cash Heavy Pre Retiree"/>
  <relinst type="projection assesses suggestion" subject="Projection Cash Heavy Pre Retiree" object="Invest Excess Cash Into Lower Volatility Multi Asset Fund"/>
  <relinst type="projection has baseline value" subject="Projection Cash Heavy Pre Retiree" object="25000"/>
  <relinst type="projection has supported value" subject="Projection Cash Heavy Pre Retiree" object="27500"/>
  <relinst type="projection has cost of acting" subject="Projection Cash Heavy Pre Retiree" object="150"/>
  <relinst type="projection has horizon years" subject="Projection Cash Heavy Pre Retiree" object="7"/>
  <relinst type="projection has detriment risk" subject="Projection Cash Heavy Pre Retiree" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Cash Heavy Pre Retiree" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Concentration" object="Concentrated Single Holding Investor"/>
  <relinst type="projection assesses suggestion" subject="Projection Concentration" object="Diversify Into Global Multi Asset Index Fund"/>
  <relinst type="projection has baseline value" subject="Projection Concentration" object="60000"/>
  <relinst type="projection has supported value" subject="Projection Concentration" object="63600"/>
  <relinst type="projection has cost of acting" subject="Projection Concentration" object="300"/>
  <relinst type="projection has horizon years" subject="Projection Concentration" object="10"/>
  <relinst type="projection has detriment risk" subject="Projection Concentration" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Concentration" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Wrapper" object="Unwrapped Investor"/>
  <relinst type="projection assesses suggestion" subject="Projection Wrapper" object="Use Stocks And Shares ISA Allowance For New Contributions"/>
  <relinst type="projection has baseline value" subject="Projection Wrapper" object="20000"/>
  <relinst type="projection has supported value" subject="Projection Wrapper" object="21400"/>
  <relinst type="projection has cost of acting" subject="Projection Wrapper" object="90"/>
  <relinst type="projection has horizon years" subject="Projection Wrapper" object="10"/>
  <relinst type="projection has detriment risk" subject="Projection Wrapper" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Wrapper" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Cost" object="High Cost Legacy Fund Holder"/>
  <relinst type="projection assesses suggestion" subject="Projection Cost" object="Switch To Lower Cost Equivalent Index Fund"/>
  <relinst type="projection has baseline value" subject="Projection Cost" object="45000"/>
  <relinst type="projection has supported value" subject="Projection Cost" object="48200"/>
  <relinst type="projection has cost of acting" subject="Projection Cost" object="200"/>
  <relinst type="projection has horizon years" subject="Projection Cost" object="10"/>
  <relinst type="projection has detriment risk" subject="Projection Cost" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Cost" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Under Saver Early" object="Workplace Under Saver Early Career"/>
  <relinst type="projection assesses suggestion" subject="Projection Under Saver Early" object="Increase Personal Contribution Rate Towards Adequacy Target"/>
  <relinst type="projection has baseline value" subject="Projection Under Saver Early" object="180000"/>
  <relinst type="projection has supported value" subject="Projection Under Saver Early" object="214000"/>
  <relinst type="projection has cost of acting" subject="Projection Under Saver Early" object="0"/>
  <relinst type="projection has horizon years" subject="Projection Under Saver Early" object="25"/>
  <relinst type="projection has detriment risk" subject="Projection Under Saver Early" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Under Saver Early" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Under Saver Mid" object="Workplace Under Saver Mid Career"/>
  <relinst type="projection assesses suggestion" subject="Projection Under Saver Mid" object="Increase Personal Contribution Rate And Review Annually"/>
  <relinst type="projection has baseline value" subject="Projection Under Saver Mid" object="210000"/>
  <relinst type="projection has supported value" subject="Projection Under Saver Mid" object="236000"/>
  <relinst type="projection has cost of acting" subject="Projection Under Saver Mid" object="0"/>
  <relinst type="projection has horizon years" subject="Projection Under Saver Mid" object="18"/>
  <relinst type="projection has detriment risk" subject="Projection Under Saver Mid" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Under Saver Mid" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Access Decision" object="Approaching Retirement Access Decision"/>
  <relinst type="projection assesses suggestion" subject="Projection Access Decision" object="Take Tax Free Cash Then Phased UFPLS"/>
  <relinst type="projection has baseline value" subject="Projection Access Decision" object="96000"/>
  <relinst type="projection has supported value" subject="Projection Access Decision" object="101800"/>
  <relinst type="projection has cost of acting" subject="Projection Access Decision" object="400"/>
  <relinst type="projection has horizon years" subject="Projection Access Decision" object="12"/>
  <relinst type="projection has detriment risk" subject="Projection Access Decision" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Access Decision" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Annuity Interest" object="Annuity Interest Approaching Retirement"/>
  <relinst type="projection assesses suggestion" subject="Projection Annuity Interest" object="Consider Annuity Features Including Inflation Linking"/>
  <relinst type="projection has baseline value" subject="Projection Annuity Interest" object="88000"/>
  <relinst type="projection has supported value" subject="Projection Annuity Interest" object="93800"/>
  <relinst type="projection has cost of acting" subject="Projection Annuity Interest" object="250"/>
  <relinst type="projection has horizon years" subject="Projection Annuity Interest" object="15"/>
  <relinst type="projection has detriment risk" subject="Projection Annuity Interest" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Annuity Interest" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Drawdown" object="Unsustainable Drawdown Segment"/>
  <relinst type="projection assesses suggestion" subject="Projection Drawdown" object="Reduce Annual Withdrawal Towards Sustainable Rate"/>
  <relinst type="projection has baseline value" subject="Projection Drawdown" object="140000"/>
  <relinst type="projection has supported value" subject="Projection Drawdown" object="147500"/>
  <relinst type="projection has cost of acting" subject="Projection Drawdown" object="350"/>
  <relinst type="projection has horizon years" subject="Projection Drawdown" object="20"/>
  <relinst type="projection has detriment risk" subject="Projection Drawdown" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Drawdown" object="Firm Research Evidence"/>

  <relinst type="projection assesses segment" subject="Projection Small Pots" object="Multiple Small Pots Non Consolidation"/>
  <relinst type="projection assesses suggestion" subject="Projection Small Pots" object="Review Small Pot Charges And Check For Lost Pots"/>
  <relinst type="projection has baseline value" subject="Projection Small Pots" object="18000"/>
  <relinst type="projection has supported value" subject="Projection Small Pots" object="19800"/>
  <relinst type="projection has cost of acting" subject="Projection Small Pots" object="40"/>
  <relinst type="projection has horizon years" subject="Projection Small Pots" object="10"/>
  <relinst type="projection has detriment risk" subject="Projection Small Pots" object="false"/>
  <relinst type="projection has evidence basis" subject="Projection Small Pots" object="Firm Research Evidence"/>

  <!-- ================================================================ -->
  <!-- LAYER 1 - PERIMETER, PERMISSION AND CLIENT STATUS                 -->
  <!-- TSM-101 to TSM-116. Every gate is a POSITIVE determination, so    -->
  <!-- missing data can never place a case inside the perimeter.         -->
  <!-- ================================================================ -->

  <relinst type="case is within perimeter" object="true" cf="100" name="TSM-101 TSM-102 TSM-112 TSM-113 TSM-114 TSM-115 Perimeter cleared on positive determinations">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm holds permission" subject="%F" object="Providing Targeted Support"/>
    <condition rel="firm is appointed representative" subject="%F" object="false"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer is natural person" subject="%C" object="true"/>
    <condition rel="consumer has residence" subject="%C" object="United Kingdom"/>
    <condition expression="countRelationshipInstances(%C,'consumer has scheme type','Trust Based Occupational Scheme') is equal to 0" weight="1" alt="The consumer is not a member of a trust based occupational scheme whose rights fall outside the FCA perimeter"/>
    <condition rel="case has assessment date" subject="%S" object="%AD"/>
    <condition rel="case applies policy" subject="%S" object="%P" weight="1"/>
    <condition rel="policy has regime commencement date" subject="%P" object="%RD" weight="1"/>
    <condition expression="isBeforeDate(%AD,%RD) is equal to false" weight="1" alt="The assessment date {{%AD}} is on or after the regime commencement date {{%RD}}"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Out Of Perimeter" cf="100" name="TSM-101 Firm does not hold the targeted support permission">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm holds permission','Providing Targeted Support') is equal to 0" alt="The firm does not hold Part 4A permission for providing targeted support, so an article 53 advising permission would not authorise this activity"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Out Of Perimeter" cf="100" name="TSM-102 Appointed representatives may not provide targeted support">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm is appointed representative" subject="%F" object="true"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Out Of Perimeter" cf="100" name="TSM-113 Client is not a natural person">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer is natural person" subject="%C" object="false"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Out Of Perimeter" cf="100" name="TSM-114 Trust based occupational scheme rights are not specified investments">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has scheme type" subject="%C" object="Trust Based Occupational Scheme"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Out Of Perimeter" cf="100" name="TSM-115 Consumer is outside the territorial scope of COBS">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has residence" subject="%C" object="Outside United Kingdom"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Out Of Perimeter" cf="100" name="TSM-112 Case predates the 6 April 2026 regime commencement">
    <condition rel="case has assessment date" subject="%S" object="%AD"/>
    <condition rel="case applies policy" subject="%S" object="%P" weight="1"/>
    <condition rel="policy has regime commencement date" subject="%P" object="%RD" weight="1"/>
    <condition expression="isBeforeDate(%AD,%RD)" alt="The assessment date {{%AD}} falls before the regime commenced on {{%RD}}, so neither COBS 9B nor the article 55A activity was in force"/>
  </relinst>

  <relinst type="case is within cobs 9b scope" object="true" cf="100" name="TSM-103 Subject matter is a designated investment or structured deposit in COBS 9B scope">
    <condition rel="case concerns domain" subject="%S" object="%D"/>
    <condition expression="(%D is equal to 'Pension') or (%D is equal to 'Retail Investment')" alt="The subject matter falls in the {{%D}} domain, which is within the COBS 9B.2.1R scope of designated investments other than pure protection contracts"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Out Of COBS 9B Scope Apply Advising Rules" cf="100" name="TSM-104 Within article 55A but outside COBS 9B so the advising rules apply">
    <condition rel="case concerns domain" subject="%S" object="Pure Protection"/>
  </relinst>

  <!-- TSM-107. The client is a retail client for this service whatever    -->
  <!-- their normal categorisation, so a professional client              -->
  <!-- categorisation must never change the outcome. Recorded positively.  -->
  <relinst type="case has supervisory file entry" cf="100" name="TSM-107 TSM-108 Client treated as retail and no individual suitability asserted">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has client categorisation" subject="%C" object="%CAT"/>
    <condition expression="'CLIENT-STATUS;COBS 9B.3.4R;Client treated as a retail client for the targeted support service. Recorded categorisation was ' + %CAT + '. COBS 9 and COBS 9A suitability do not apply. Principle 9 does apply. No individual suitability determination has been made.;Clean'" value="%O"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 2 - INITIATION, CONSENT AND MARKETING                       -->
  <!-- TSM-201 to TSM-210, TSM-131 to TSM-134. The ICO and PECR layer.   -->
  <!-- ================================================================ -->

  <relinst type="case has lawful initiation" object="true" cf="100" name="TSM-201 Initiation on an express client request">
    <condition rel="case has initiation basis" subject="%S" object="Express Client Request"/>
  </relinst>

  <relinst type="case has lawful initiation" object="true" cf="100" name="TSM-201 Initiation on reasonable grounds that the client is in an addressed situation">
    <condition rel="case has initiation basis" subject="%S" object="Reasonable Grounds Situation Identified"/>
    <condition expression="countRelationshipInstances(%S,'case is in situation',*) is greater than or equal to 1" weight="1" alt="The firm identified at least one situation its service addresses, which is the reasonable grounds COBS 9B.5.3R requires"/>
  </relinst>

  <relinst type="case has lawful initiation" object="true" cf="100" name="TSM-202 A service availability notice is not initiation">
    <condition rel="case has initiation basis" subject="%S" object="Service Availability Notice Only"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Unlawful Initiation" cf="100" name="TSM-201 Firm initiated with no express request and no reasonable grounds">
    <condition rel="case has initiation basis" subject="%S" object="Firm Initiated Without Basis"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Unlawful Initiation" cf="100" name="TSM-201 Reasonable grounds claimed but no addressed situation identified">
    <condition rel="case has initiation basis" subject="%S" object="Reasonable Grounds Situation Identified"/>
    <condition expression="countRelationshipInstances(%S,'case is in situation',*) is equal to 0" alt="The firm relied on reasonable grounds but no situation its service addresses was identified for this consumer"/>
  </relinst>

  <!-- TSM-205. Broadcast channels are NOT direct marketing under PECR     -->
  <!-- because they are not directed to a particular individual, so they   -->
  <!-- may be shown to everyone including those who have opted out.        -->
  <relinst type="case has marketing permission" object="true" cf="100" name="TSM-205 Broadcast channel is not direct marketing so no consent is needed">
    <condition rel="case has delivery channel" subject="%S" object="%CH"/>
    <condition expression="(%CH is equal to 'Website Message') or (%CH is equal to 'In App Message') or (%CH is equal to 'Inbound Call Recording')" alt="The {{%CH}} channel broadcasts to all customers rather than being directed to a particular individual, so the PECR direct marketing rules are not engaged"/>
  </relinst>

  <relinst type="case has marketing permission" object="true" cf="100" name="TSM-205 Non electronic channels are outside the PECR electronic mail rules">
    <condition rel="case has delivery channel" subject="%S" object="%CH"/>
    <condition expression="(%CH is equal to 'Telephone') or (%CH is equal to 'Face To Face') or (%CH is equal to 'Digital Self Service')" alt="The {{%CH}} channel is not electronic mail, so the PECR consent or soft opt in requirement does not apply"/>
  </relinst>

  <!-- TSM-204 and TSM-132. Electronic mail needs consent that is         -->
  <!-- granular and unbundled, not generic marketing consent.             -->
  <relinst type="case has marketing permission" object="true" cf="100" name="TSM-204 TSM-132 Electronic mail with granular consent">
    <condition rel="case has delivery channel" subject="%S" object="Electronic Mail"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has consented to electronic marketing" subject="%C" object="true"/>
    <condition rel="case is delivered by firm" subject="%S" object="%F" weight="1"/>
    <condition rel="firm has granular marketing consent record" subject="%F" object="true" weight="1"/>
  </relinst>

  <!-- TSM-208. The STANDARD PECR regulation 22(3) soft opt in: existing    -->
  <!-- customer, similar products, opt out offered at collection and in     -->
  <!-- every message. The determination that those limbs are met is firm    -->
  <!-- CRM data. The right to object is absolute, so an objection defeats   -->
  <!-- the soft opt in.                                                     -->
  <relinst type="case has marketing permission" object="true" cf="100" name="TSM-208 Standard PECR soft opt in for an existing customer">
    <condition rel="case has delivery channel" subject="%S" object="Electronic Mail"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer meets standard soft opt in" subject="%C" object="true"/>
    <condition rel="consumer has marketing preference" subject="%C" object="Not Opted Out Of Direct Marketing"/>
  </relinst>

  <!-- TSM-208. The WORKPLACE PENSION soft opt in extension is PENDING      -->
  <!-- legislation. HM Treasury committed to the SI in December 2025 but    -->
  <!-- it has not been laid as of this model version, so the route cannot   -->
  <!-- authorise electronic mail marketing and is recorded, never used.     -->
  <relinst type="case has supervisory file entry" cf="100" name="TSM-208 Workplace pension soft opt in route is pending legislation and is not relied on">
    <condition rel="case has delivery channel" subject="%S" object="Electronic Mail"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer is workplace pension member" subject="%C" object="true"/>
    <condition expression="countRelationshipInstances(%C,'consumer has consented to electronic marketing','true') is equal to 0" weight="1" alt="No electronic marketing consent is recorded, so the pending workplace route would have been the only basis for this message"/>
    <condition expression="'MARKETING;PECR regulation 22 with the FCA and ICO joint statement of 11 December 2025;The workplace pension soft opt in depends on secondary legislation HM Treasury committed to but had not laid as of this model version, so it cannot authorise electronic mail marketing. Consent or the standard regulation 22(3) soft opt in is required.;Information'" value="%O"/>
  </relinst>

  <!-- TSM-207. Service and important messages continue regardless of     -->
  <!-- marketing preference. -->
  <relinst type="case has marketing permission" object="true" cf="100" name="TSM-207 Service and important messages are not direct marketing">
    <condition rel="case has message type" subject="%S" object="Service Message"/>
  </relinst>

  <!-- TSM-206. A factual neutral awareness message may go to a consumer   -->
  <!-- without electronic marketing permission provided it does not        -->
  <!-- encourage a course of action. It therefore cannot carry a           -->
  <!-- ready made suggestion. -->
  <relinst type="case has marketing permission" object="true" cf="100" name="TSM-206 Neutral awareness message permitted without marketing permission">
    <condition rel="case has message type" subject="%S" object="Awareness Message"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Marketing Permission Absent" cf="100" name="TSM-204 Electronic mail suggestion without consent or soft opt in">
    <condition rel="case has delivery channel" subject="%S" object="Electronic Mail"/>
    <condition rel="case has message type" subject="%S" object="Ready Made Suggestion"/>
    <condition expression="countRelationshipInstances(%S,'case has marketing permission',*) is equal to 0" alt="A suggestion directed to this individual by electronic mail is direct marketing, and neither consent nor the soft opt in has been established"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Marketing Permission Absent" cf="100" name="TSM-131 Consumer has objected to direct marketing and the channel is electronic mail">
    <condition rel="case has delivery channel" subject="%S" object="Electronic Mail"/>
    <condition rel="case has message type" subject="%S" object="Ready Made Suggestion"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has marketing preference" subject="%C" object="Objected To Direct Marketing"/>
  </relinst>

  <!-- TSM-209. The cross regime tension recorded explicitly: a message    -->
  <!-- engineered to be NOT direct marketing may still be a financial      -->
  <!-- promotion, which by definition invites or induces. Both tests must   -->
  <!-- pass simultaneously. -->
  <relinst type="case has supervisory file entry" cf="100" name="TSM-209 TSM-210 Cross regime record for the promotion and marketing tests">
    <condition rel="case has message type" subject="%S" object="%MT"/>
    <condition rel="case has delivery channel" subject="%S" object="%CH"/>
    <condition expression="'PROMOTION;COBS 9B.6.15G and COBS 4.2.1R with PECR;A ready made suggestion contains a financial promotion and must be fair clear and not misleading. Message type ' + %MT + ' delivered by ' + %CH + '. Note the cross regime tension that a message engineered to be neutral for PECR may still invite or induce for COBS 4.;Information'" value="%O"/>
  </relinst>

  <!-- TSM-203. The election not to receive the service is an absolute     -->
  <!-- stop and is distinct from the ICO right to object to marketing.     -->
  <relinst type="case has candidate outcome" object="Stop Client Declined Service" cf="100" name="TSM-203 Client elected not to receive a targeted support service">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has declined targeted support" subject="%C" object="true"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 3 - DATA QUALITY: CURRENCY, PROVENANCE, CONTRADICTION       -->
  <!-- TSM-301 to TSM-311, TSM-1901 to TSM-1904.                        -->
  <!-- ================================================================ -->

  <!-- Record currency is measured against the CASE ASSESSMENT DATE, the   -->
  <!-- date the firm gives the suggestion, never against the wall clock,   -->
  <!-- so a filed decision replays identically whenever it is re-run.      -->
  <relinst type="case has current data item" cf="100" name="TSM-302 TSM-303 Data item is present and within its staleness window at the assessment date">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has data record" subject="%C" object="%R"/>
    <condition rel="record covers data item" subject="%R" object="%O"/>
    <condition rel="record has as at date" subject="%R" object="%ASAT"/>
    <condition rel="data item has staleness window days" subject="%O" object="%WINDOW" weight="1"/>
    <condition rel="case has assessment date" subject="%S" object="%AD" weight="1"/>
    <condition expression="daysBetween(%ASAT,%AD)" value="%AGEDAYS" weight="1" alt="The record is {{%AGEDAYS}} days old at the assessment date {{%AD}}, the date the firm gives the suggestion"/>
    <condition expression="%AGEDAYS is less than or equal to %WINDOW" weight="1" alt="A record age of {{%AGEDAYS}} days is within the {{%WINDOW}} day currency window for this data item"/>
  </relinst>

  <!-- TSM-303 second limb. COBS 9B.5.7R requires possibly out of date       -->
  <!-- information to be verified with the client BEFORE alignment is        -->
  <!-- confirmed. Once the client confirms it, the firm may rely on it, so   -->
  <!-- a verified stale record counts as current for the data gap test.      -->
  <!-- Pre existing defect fixed in this build: verification cleared the     -->
  <!-- stale block but the gap rule still counted the item as missing, so    -->
  <!-- client verification could never actually restore alignment.          -->
  <relinst type="case has current data item" cf="100" name="TSM-303 COBS 9B.5.7R client verification restores reliance on a stale record">
    <condition rel="case has stale data item" subject="%S" object="%O" weight="1"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer confirms verified stale data" subject="%C" object="true"/>
  </relinst>

  <relinst type="case has stale data item" cf="100" name="TSM-303 Data item is present but beyond its staleness window at the assessment date">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has data record" subject="%C" object="%R"/>
    <condition rel="record covers data item" subject="%R" object="%O"/>
    <condition rel="record has as at date" subject="%R" object="%ASAT"/>
    <condition rel="data item has staleness window days" subject="%O" object="%WINDOW" weight="1"/>
    <condition rel="case has assessment date" subject="%S" object="%AD" weight="1"/>
    <condition expression="daysBetween(%ASAT,%AD)" value="%AGEDAYS" weight="1" alt="The record is {{%AGEDAYS}} days old at the assessment date {{%AD}}, the date the firm gives the suggestion"/>
    <condition expression="%AGEDAYS is greater than %WINDOW" alt="A record age of {{%AGEDAYS}} days exceeds the {{%WINDOW}} day currency window, so COBS 9B.5.7R requires the firm to verify it with the client before confirming alignment"/>
  </relinst>

  <!-- Contradiction detection. Ordinal symmetry breaking so each          -->
  <!-- unordered pair fires exactly once and self pairs are impossible.    -->
  <!-- Values are compared as TYPED numbers, not as text, so 30000 and     -->
  <!-- 30000.00 are not treated as a conflict.                            -->
  <relinst type="consumer has contradictory data item" cf="100" name="TSM-304 Two current records give materially different numeric values">
    <condition rel="consumer has data record" subject="%S" object="%R1"/>
    <condition rel="consumer has data record" subject="%S" object="%R2"/>
    <condition rel="record has ordinal" subject="%R1" object="%N1"/>
    <condition rel="record has ordinal" subject="%R2" object="%N2"/>
    <condition expression="%N1 is greater than %N2" weight="1" alt="Each unordered pair of records is compared once, ordinal {{%N1}} against ordinal {{%N2}}"/>
    <condition rel="record covers data item" subject="%R1" object="%O"/>
    <condition rel="record covers data item" subject="%R2" object="%O"/>
    <condition rel="record states number value" subject="%R1" object="%V1"/>
    <condition rel="record states number value" subject="%R2" object="%V2"/>
    <condition expression="%V1 - %V2" value="%DIFF" weight="1" alt="The two records differ by {{%DIFF}}"/>
    <condition expression="abs(%DIFF)" value="%ABSDIFF" weight="1" alt="The absolute difference between the two recorded values is {{%ABSDIFF}}"/>
    <condition expression="%ABSDIFF is greater than 1" alt="An absolute difference of {{%ABSDIFF}} is more than a rounding artefact, so the two records materially contradict each other"/>
  </relinst>

  <relinst type="consumer has contradictory data item" cf="100" name="TSM-304 Two current records give different text values">
    <condition rel="consumer has data record" subject="%S" object="%R1"/>
    <condition rel="consumer has data record" subject="%S" object="%R2"/>
    <condition rel="record has ordinal" subject="%R1" object="%N1"/>
    <condition rel="record has ordinal" subject="%R2" object="%N2"/>
    <condition expression="%N1 is greater than %N2" weight="1" alt="Each unordered pair of records is compared once, ordinal {{%N1}} against ordinal {{%N2}}"/>
    <condition rel="record covers data item" subject="%R1" object="%O"/>
    <condition rel="record covers data item" subject="%R2" object="%O"/>
    <condition rel="record states text value" subject="%R1" object="%V1"/>
    <condition rel="record states text value" subject="%R2" object="%V2"/>
    <condition expression="%V1 is not equal to %V2" alt="The two records state different values for the same data item, so they contradict each other"/>
  </relinst>

  <!-- TSM-1902 the provenance asymmetry. Weak provenance may SUPPORT an   -->
  <!-- excluding characteristic, which protects the consumer, but may not  -->
  <!-- ESTABLISH an including characteristic, which would qualify them.    -->
  <relinst type="consumer has weakly evidenced characteristic" cf="100" name="TSM-1901 TSM-1902 Characteristic rests only on weak provenance">
    <condition rel="consumer has characteristic" subject="%S" object="%O"/>
    <condition rel="characteristic derives from data item" subject="%O" object="%DI"/>
    <condition expression="countRelationshipInstances(%S,'consumer has data record',*) is greater than or equal to 1" weight="1" alt="The consumer has at least one data record to assess provenance against"/>
    <condition rel="consumer has data record" subject="%S" object="%R"/>
    <condition rel="record covers data item" subject="%R" object="%DI"/>
    <condition rel="record has provenance" subject="%R" object="%PROV"/>
    <condition rel="provenance is weak" subject="%PROV" object="true"/>
  </relinst>

  <relinst type="consumer has characteristic provenance record" cf="100" name="TSM-305 Record which provenance supported each characteristic">
    <condition rel="consumer has characteristic" subject="%S" object="%CH"/>
    <condition rel="characteristic derives from data item" subject="%CH" object="%DI"/>
    <condition rel="consumer has data record" subject="%S" object="%R"/>
    <condition rel="record covers data item" subject="%R" object="%DI"/>
    <condition rel="record has provenance" subject="%R" object="%PROV"/>
    <condition expression="%CH + ' evidenced by ' + %PROV" value="%O"/>
  </relinst>

  <!-- TSM-306 and TSM-307. Data that is not readily accessible can never  -->
  <!-- be required for alignment. This is a segment design defect, not a   -->
  <!-- consumer problem. -->
  <relinst type="segment has design defect" object="No Required Data Items Defined" cf="100" name="TSM-301 Segment specifies no information set for alignment">
    <condition expression="countRelationshipInstances(%S,'segment requires data item',*) is equal to 0" alt="COBS 9B.4.17R requires the firm to specify the information it needs to establish alignment, and this segment specifies none"/>
  </relinst>

  <!-- The ordinal mark is projected onto the CONSUMER, because string      -->
  <!-- objects dedupe per subject: two records sharing ordinal 3 leave ONE  -->
  <!-- mark on the consumer, so the distinct count genuinely detects        -->
  <!-- duplicates, and the count is scoped per consumer so several          -->
  <!-- consumers can share a session.                                       -->
  <relinst type="consumer has record integrity defect" object="Duplicate Record Ordinal" cf="100" name="TSM-304 Record ordinals are duplicated or missing so contradiction detection is unreliable">
    <condition expression="countRelationshipInstances(%S,'consumer has data record',*)" value="%RECORDS" weight="1" alt="The consumer has {{%RECORDS}} data records"/>
    <condition expression="countRelationshipInstances(%S,'consumer has data record',*) is greater than or equal to 1" weight="1" alt="There is at least one data record to check"/>
    <condition expression="countRelationshipInstances(%S,'consumer has ordinal mark',*)" value="%MARKS" weight="1" alt="{{%MARKS}} distinct record ordinals were found for this consumer"/>
    <condition expression="%MARKS is less than %RECORDS" alt="Only {{%MARKS}} distinct ordinals exist across {{%RECORDS}} records, so a duplicate or missing ordinal would silently disable contradiction detection"/>
  </relinst>

  <relinst type="consumer has ordinal mark" cf="100" name="TSM-304 Mirror each record ordinal as a per consumer string mark so distinct counting works">
    <condition rel="consumer has data record" subject="%S" object="%R"/>
    <condition rel="record has ordinal" subject="%R" object="%N"/>
    <condition expression="'Ordinal ' + %N" value="%O"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Data Insufficient Data Request Issued" cf="100" name="TSM-304 A record integrity defect makes contradiction detection unreliable">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition expression="countRelationshipInstances(%C,'consumer has record integrity defect',*) is greater than or equal to 1" alt="The consumer record set carries an integrity defect, so its contents cannot be relied on and a corrected data set must be requested"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 4A - AGGREGATE PROJECTIONS                                  -->
  <!-- Count functions cannot traverse two hops, so per item values are   -->
  <!-- projected onto the consumer BEFORE any aggregation. Number objects -->
  <!-- do not dedupe, which is what makes the projected sums exact.       -->
  <!-- Every min max sum is count guarded, because an aggregation over an -->
  <!-- empty set asserts a NULL that compares like positive infinity.     -->
  <!-- ================================================================ -->

  <relinst type="consumer has pot value" cf="100" name="TSM-1404 Project each pension pot value onto the consumer">
    <condition rel="consumer has pension pot" subject="%S" object="%POT"/>
    <condition rel="pot has value" subject="%POT" object="%O"/>
  </relinst>

  <relinst type="consumer has holding value" cf="100" name="TSM-1406 Project each investment holding value onto the consumer">
    <condition rel="consumer has investment holding" subject="%S" object="%H"/>
    <condition rel="holding has value" subject="%H" object="%O"/>
  </relinst>

  <!-- Diversified funds are EXCLUDED from the concentration numerator so  -->
  <!-- a single large multi asset fund is not mis flagged as concentrated. -->
  <relinst type="consumer has non diversified holding value" cf="100" name="TSM-1406 Project only non diversified holding values for the concentration test">
    <condition rel="consumer has investment holding" subject="%S" object="%H"/>
    <condition rel="holding is diversified fund" subject="%H" object="false"/>
    <condition rel="holding has value" subject="%H" object="%O"/>
  </relinst>

  <relinst type="consumer has holding charge percent" cf="100" name="TSM-1407 Project each holding ongoing charge onto the consumer">
    <condition rel="consumer has investment holding" subject="%S" object="%H"/>
    <condition rel="holding has ongoing charge percent" subject="%H" object="%O"/>
  </relinst>

  <relinst type="consumer has total pension provision" cf="100" name="TSM-412 Total pension provision uses the total not per pension features">
    <condition expression="countRelationshipInstances(%S,'consumer has pot value',*) is greater than or equal to 1" weight="1" alt="The consumer has at least one pension pot to total"/>
    <condition expression="sumObjects(%S,'consumer has pot value',*)" value="%O" alt="Total pension provision across all pots is {{%O}} pounds"/>
  </relinst>

  <relinst type="consumer has portfolio value" cf="100" name="TSM-1406 Total portfolio value across all investment holdings">
    <condition expression="countRelationshipInstances(%S,'consumer has holding value',*) is greater than or equal to 1" weight="1" alt="The consumer has at least one investment holding to total"/>
    <condition expression="sumObjects(%S,'consumer has holding value',*)" value="%O" alt="Total portfolio value across all holdings is {{%O}} pounds"/>
  </relinst>

  <relinst type="consumer has largest single holding value" cf="100" name="TSM-1406 Largest non diversified single holding">
    <condition expression="countRelationshipInstances(%S,'consumer has non diversified holding value',*) is greater than or equal to 1" weight="1" alt="The consumer holds at least one non diversified investment"/>
    <condition expression="maxObjects(%S,'consumer has non diversified holding value',*)" value="%O" alt="The largest single non diversified holding is {{%O}} pounds"/>
  </relinst>

  <relinst type="consumer has highest ongoing charge percent" cf="100" name="TSM-1407 Highest ongoing charge across holdings">
    <condition expression="countRelationshipInstances(%S,'consumer has holding charge percent',*) is greater than or equal to 1" weight="1" alt="The consumer holds at least one investment with a recorded ongoing charge"/>
    <condition expression="maxObjects(%S,'consumer has holding charge percent',*)" value="%O" alt="The highest ongoing charge across the portfolio is {{%O}} percent"/>
  </relinst>

  <!-- Concentration. Guarded against a ZERO DIVISOR as well as an empty   -->
  <!-- set, because a zero total would otherwise assert concentration on a -->
  <!-- consumer with nothing invested. Arithmetic is decomposed into two   -->
  <!-- single operator steps, since expressions have no operator           -->
  <!-- precedence and a fused step garbles the narrative.                  -->
  <relinst type="consumer has concentration percent" cf="100" name="TSM-1406 Concentration of the largest non diversified holding">
    <condition expression="countRelationshipInstances(%S,'consumer has holding value',*) is greater than or equal to 1" weight="1" alt="The consumer has at least one investment holding"/>
    <condition rel="consumer has portfolio value" subject="%S" object="%TOTAL"/>
    <condition expression="%TOTAL is greater than 0" weight="1" alt="The portfolio total of {{%TOTAL}} pounds is greater than zero so a concentration share can be computed"/>
    <condition rel="consumer has largest single holding value" subject="%S" object="%MAX"/>
    <condition expression="%MAX / %TOTAL" value="%SHARE" weight="1" alt="The largest holding of {{%MAX}} pounds is a share of {{%SHARE}} of the {{%TOTAL}} pound portfolio"/>
    <condition expression="%SHARE * 100" value="%O" alt="That share expressed as a percentage is {{%O}} percent"/>
  </relinst>

  <relinst type="consumer has small pot" cf="100" name="TSM-1404 Identify each pot below the firm defined small pot ceiling">
    <condition rel="consumer has pension pot" subject="%S" object="%O"/>
    <condition rel="pot has value" subject="%O" object="%V"/>
    <condition rel="consumer has data record" subject="%S" object="%R" weight="1" behaviour="optional"/>
    <condition expression="countRelationshipInstances(%S,'consumer has pension pot',*) is greater than or equal to 1" weight="1" alt="The consumer holds at least one pension pot"/>
    <condition rel="pot has benefit structure" subject="%O" object="Defined Contribution" weight="1"/>
    <condition rel="policy has small pot value ceiling" subject="Kesterly Targeted Support Policy" object="%CEIL" weight="1"/>
    <condition expression="%V is less than %CEIL" alt="A pot value of {{%V}} pounds is below the firm defined small pot ceiling of {{%CEIL}} pounds"/>
  </relinst>

  <relinst type="consumer has small pot count" cf="100" name="TSM-1404 Count the small pots held">
    <condition expression="countRelationshipInstances(%S,'consumer has small pot',*)" value="%O" alt="The consumer holds {{%O}} pots below the small pot ceiling"/>
  </relinst>

  <relinst type="consumer has emergency buffer amount" cf="100" name="TSM-1405 Emergency buffer is monthly essential expenditure times the policy month count">
    <condition rel="consumer has monthly essential expenditure" subject="%S" object="%EXP"/>
    <condition rel="policy has emergency fund months" subject="Kesterly Targeted Support Policy" object="%MONTHS" weight="1"/>
    <condition expression="%EXP * %MONTHS" value="%O" alt="Monthly essential expenditure of {{%EXP}} pounds over the firm defined {{%MONTHS}} month buffer requires {{%O}} pounds"/>
  </relinst>

  <relinst type="consumer has excess cash amount" cf="100" name="TSM-1405 Excess cash is the cash balance less the emergency buffer">
    <condition rel="consumer has cash balance" subject="%S" object="%CASH"/>
    <condition rel="consumer has emergency buffer amount" subject="%S" object="%BUFFER"/>
    <condition expression="%CASH - %BUFFER" value="%O" alt="A cash balance of {{%CASH}} pounds less an emergency buffer of {{%BUFFER}} pounds leaves {{%O}} pounds of excess cash"/>
  </relinst>

  <relinst type="consumer has years to target retirement" cf="100" name="TSM-1402 Years remaining to the target retirement age">
    <condition rel="consumer has age" subject="%S" object="%AGE"/>
    <condition rel="consumer has target retirement age" subject="%S" object="%TRA"/>
    <condition expression="%TRA - %AGE" value="%O" alt="At age {{%AGE}} against a target retirement age of {{%TRA}}, there are {{%O}} years remaining"/>
  </relinst>

  <relinst type="consumer has withdrawal rate percent" cf="100" name="TSM-1403 Withdrawal rate as a percentage of the drawdown fund">
    <condition rel="consumer has annual withdrawal amount" subject="%S" object="%WD"/>
    <condition rel="consumer has drawdown fund value" subject="%S" object="%FUND"/>
    <condition expression="%FUND is greater than 0" weight="1" alt="The drawdown fund value of {{%FUND}} pounds is greater than zero so a withdrawal rate can be computed"/>
    <condition expression="%WD / %FUND" value="%RATE" weight="1" alt="An annual withdrawal of {{%WD}} pounds against a fund of {{%FUND}} pounds is a rate of {{%RATE}}"/>
    <condition expression="%RATE * 100" value="%O" alt="That withdrawal rate expressed as a percentage is {{%O}} percent"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 4B - CHARACTERISTIC DERIVATION, THREE VALUED                -->
  <!-- Positive facts assert consumer has characteristic. EXPLICIT        -->
  <!-- negatives assert consumer lacks characteristic and always require  -->
  <!-- the underlying record to be present, never inferring absence.      -->
  <!-- A characteristic that is neither had nor lacked is UNRESOLVED, and -->
  <!-- an unresolved excluding characteristic blocks qualification.       -->
  <!-- ================================================================ -->

  <relinst type="consumer has characteristic" cf="100" name="TSM-411 Age band characteristics from policy held band edges">
    <condition rel="consumer has age" subject="%S" object="%AGE"/>
    <condition rel="age band has lower edge" subject="%BAND" object="%LOW"/>
    <condition rel="age band has upper edge" subject="%BAND" object="%HIGH"/>
    <condition expression="isWithinRange(%AGE,%LOW,%HIGH)" alt="An age of {{%AGE}} falls within the band from {{%LOW}} to {{%HIGH}}"/>
    <condition rel="age band has characteristic" subject="%BAND" object="%O"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Excess Cash Above Emergency Buffer" cf="100" name="TSM-1405 Excess cash above the emergency buffer and the policy floor">
    <condition rel="consumer has excess cash amount" subject="%S" object="%EXCESS"/>
    <condition rel="policy has excess cash floor amount" subject="Kesterly Targeted Support Policy" object="%FLOOR" weight="1"/>
    <condition expression="%EXCESS is greater than or equal to %FLOOR" alt="Excess cash of {{%EXCESS}} pounds is at or above the firm defined floor of {{%FLOOR}} pounds"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Has Emergency Fund" cf="100" name="TSM-509 Emergency fund present as a CHARACTERISTIC never an assumption">
    <condition rel="consumer has cash balance" subject="%S" object="%CASH"/>
    <condition rel="consumer has emergency buffer amount" subject="%S" object="%BUFFER"/>
    <condition expression="%CASH is greater than or equal to %BUFFER" alt="A cash balance of {{%CASH}} pounds covers the emergency buffer of {{%BUFFER}} pounds"/>
  </relinst>

  <relinst type="consumer has characteristic" object="No Emergency Fund" cf="100" name="TSM-509 TSM-507 No emergency fund is an excluding characteristic">
    <condition rel="consumer has cash balance" subject="%S" object="%CASH"/>
    <condition rel="consumer has emergency buffer amount" subject="%S" object="%BUFFER"/>
    <condition expression="%CASH is less than %BUFFER" alt="A cash balance of {{%CASH}} pounds does not cover the emergency buffer of {{%BUFFER}} pounds"/>
  </relinst>

  <relinst type="consumer lacks characteristic" object="No Emergency Fund" cf="100" name="TSM-1902 Explicit negative for the no emergency fund exclusion">
    <condition rel="consumer has cash balance" subject="%S" object="%CASH"/>
    <condition rel="consumer has emergency buffer amount" subject="%S" object="%BUFFER"/>
    <condition expression="%CASH is greater than or equal to %BUFFER" alt="The complete cash and expenditure record shows {{%CASH}} pounds against a buffer of {{%BUFFER}} pounds, so the exclusion is positively resolved as absent"/>
  </relinst>

  <relinst type="consumer has characteristic" object="No Problem Debt" cf="100" name="TSM-507 No problem debt recorded">
    <condition rel="consumer has problem debt" subject="%S" object="false"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Problem Debt Present" cf="100" name="TSM-507 Problem debt is an indicator of low financial resilience">
    <condition rel="consumer has problem debt" subject="%S" object="true"/>
  </relinst>

  <relinst type="consumer lacks characteristic" object="Problem Debt Present" cf="100" name="TSM-1902 Explicit negative for the problem debt exclusion">
    <condition rel="consumer has problem debt" subject="%S" object="false"/>
  </relinst>

  <!-- Risk characteristics. Banded and client stated, never assumed.     -->
  <!-- The permitted assumption that cash savers want inflation beating   -->
  <!-- returns is NOT an assumption about risk capacity.                  -->
  <relinst type="consumer has characteristic" object="Accepts Investment Risk Over Medium Term" cf="100" name="TSM-317 Risk tolerance and capacity for loss bands both support market exposure">
    <condition rel="consumer has risk tolerance band" subject="%S" object="%RT"/>
    <condition expression="(%RT is equal to 'Medium Investment Risk Accepted') or (%RT is equal to 'High Investment Risk Accepted')" alt="The client states a risk tolerance band of {{%RT}}"/>
    <condition rel="consumer has capacity for loss band" subject="%S" object="%CL"/>
    <condition expression="(%CL is equal to 'Can Absorb Small Loss') or (%CL is equal to 'Can Absorb Moderate Loss')" alt="The client states a capacity for loss band of {{%CL}}"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Cannot Tolerate Capital Loss" cf="100" name="TSM-317 No investment risk accepted">
    <condition rel="consumer has risk tolerance band" subject="%S" object="No Investment Risk Accepted"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Cannot Tolerate Capital Loss" cf="100" name="TSM-317 No capacity to absorb any capital loss">
    <condition rel="consumer has capacity for loss band" subject="%S" object="Cannot Absorb Any Loss"/>
  </relinst>

  <relinst type="consumer lacks characteristic" object="Cannot Tolerate Capital Loss" cf="100" name="TSM-1902 Explicit negative for the capital loss exclusion">
    <condition rel="consumer has risk tolerance band" subject="%S" object="%RT"/>
    <condition expression="%RT is not equal to 'No Investment Risk Accepted'" weight="1" alt="The stated risk tolerance band {{%RT}} is not the no risk band"/>
    <condition rel="consumer has capacity for loss band" subject="%S" object="%CL"/>
    <condition expression="%CL is not equal to 'Cannot Absorb Any Loss'" alt="The stated capacity for loss band {{%CL}} is not the cannot absorb any loss band, so both limbs of the exclusion are positively resolved as absent"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Single Holding Concentration Above Limit" cf="100" name="TSM-1406 Single holding concentration above the firm defined limit">
    <condition rel="consumer has concentration percent" subject="%S" object="%PCT"/>
    <condition rel="policy has concentration limit percent" subject="Kesterly Targeted Support Policy" object="%LIMIT" weight="1"/>
    <condition expression="%PCT is greater than %LIMIT" alt="A largest holding concentration of {{%PCT}} percent exceeds the firm defined limit of {{%LIMIT}} percent"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Portfolio Above Minimum Value" cf="100" name="TSM-1406 Portfolio above the firm defined minimum value">
    <condition rel="consumer has portfolio value" subject="%S" object="%PV"/>
    <condition rel="policy has portfolio minimum value" subject="Kesterly Targeted Support Policy" object="%PMIN" weight="1"/>
    <condition expression="%PV is greater than or equal to %PMIN" alt="A portfolio value of {{%PV}} pounds is at or above the firm defined minimum of {{%PMIN}} pounds"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Holds Unwrapped Investments" cf="100" name="TSM-1407 Holds investments outside a tax wrapper">
    <condition rel="consumer has unwrapped holding value" subject="%S" object="%UW"/>
    <condition expression="%UW is greater than 0" alt="The consumer holds {{%UW}} pounds of investments outside a tax wrapper"/>
  </relinst>

  <relinst type="consumer has characteristic" object="ISA Allowance Unused" cf="100" name="TSM-1407 ISA allowance not fully used this tax year">
    <condition rel="consumer has isa subscription used" subject="%S" object="%USED"/>
    <condition rel="policy has isa annual allowance" subject="Kesterly Targeted Support Policy" object="%ALLOW" weight="1"/>
    <condition expression="%USED is less than %ALLOW" alt="ISA subscriptions of {{%USED}} pounds leave part of the {{%ALLOW}} pound annual allowance unused"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Holds Above Median Cost Fund" cf="100" name="TSM-1407 Holds a fund charging above the median">
    <condition rel="consumer has highest ongoing charge percent" subject="%S" object="%CHG"/>
    <condition rel="policy has median fund charge percent" subject="Kesterly Targeted Support Policy" object="%MED" weight="1"/>
    <condition expression="%CHG is greater than %MED" alt="A highest ongoing charge of {{%CHG}} percent is above the firm recorded median of {{%MED}} percent"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Contribution Below Adequacy Target" cf="100" name="TSM-1401 Contribution rate below the firm defined adequacy target">
    <condition rel="consumer has contribution rate percent" subject="%S" object="%RATE"/>
    <condition rel="policy has contribution adequacy target percent" subject="Kesterly Targeted Support Policy" object="%TARGET" weight="1"/>
    <condition expression="%RATE is less than %TARGET" alt="A total contribution rate of {{%RATE}} percent of pensionable salary is below the firm defined adequacy target of {{%TARGET}} percent"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Defined Contribution Only" cf="100" name="TSM-105 Defined contribution benefits only with no safeguarded benefits">
    <condition rel="consumer has benefit structure" subject="%S" object="Defined Contribution"/>
    <condition expression="countRelationshipInstances(%S,'consumer has benefit structure','Defined Benefit Safeguarded') is equal to 0" weight="1" alt="No defined benefit safeguarded rights are recorded"/>
    <condition expression="countRelationshipInstances(%S,'consumer has benefit structure','Guaranteed Annuity Rate') is equal to 0" weight="1" alt="No guaranteed annuity rate is recorded"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Safeguarded Benefits Held" cf="100" name="TSM-105 Defined benefit safeguarded rights held">
    <condition rel="consumer has benefit structure" subject="%S" object="Defined Benefit Safeguarded"/>
  </relinst>

  <!-- TSM-106. A guaranteed annuity rate is treated as a safeguarded      -->
  <!-- benefit indicator. This is a FIRM POLICY reading, because the       -->
  <!-- Handbook glossary perimeter for safeguarded benefits could not be   -->
  <!-- verified and no explicit FCA statement on GARs was located.         -->
  <relinst type="consumer has characteristic" object="Safeguarded Benefits Held" cf="90" name="TSM-106 Guaranteed annuity rate treated as safeguarded firm policy reading">
    <condition rel="consumer has benefit structure" subject="%S" object="Guaranteed Annuity Rate"/>
  </relinst>

  <relinst type="consumer lacks characteristic" object="Safeguarded Benefits Held" cf="100" name="TSM-1907 Explicit negative for safeguarded benefits requires a complete benefit record">
    <condition expression="countRelationshipInstances(%S,'consumer has benefit structure',*) is greater than or equal to 1" weight="1" alt="A benefit structure record exists for this consumer so the screen has actually been run"/>
    <condition expression="countRelationshipInstances(%S,'consumer has benefit structure','Defined Benefit Safeguarded') is equal to 0" weight="1" alt="No defined benefit safeguarded rights are recorded"/>
    <condition expression="countRelationshipInstances(%S,'consumer has benefit structure','Guaranteed Annuity Rate') is equal to 0" alt="No guaranteed annuity rate is recorded, so the safeguarded benefits exclusion is positively resolved as absent"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Approaching Retirement" cf="100" name="TSM-1402 Within the firm defined retirement proximity window">
    <condition rel="consumer has years to target retirement" subject="%S" object="%YRS"/>
    <condition rel="policy has retirement proximity years" subject="Kesterly Targeted Support Policy" object="%PROX" weight="1"/>
    <condition expression="isWithinRange(%YRS,0,%PROX)" alt="With {{%YRS}} years to the target retirement age, the consumer is inside the firm defined {{%PROX}} year proximity window"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Access Intent Stated" cf="100" name="TSM-1402 Client has stated an intention to take pension income">
    <condition rel="consumer has stated objective" subject="%S" object="Take Pension Income"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Guaranteed Income Preference Stated" cf="100" name="TSM-1402 Client has stated a guaranteed income preference never assumed">
    <condition rel="consumer has stated objective" subject="%S" object="Secure Guaranteed Income"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Total Pension Provision Above Minimum" cf="100" name="TSM-412 Total pension provision above the firm defined minimum">
    <condition rel="consumer has total pension provision" subject="%S" object="%TPP"/>
    <condition rel="policy has minimum pension provision amount" subject="Kesterly Targeted Support Policy" object="%TMIN" weight="1"/>
    <condition expression="%TPP is greater than or equal to %TMIN" alt="Total pension provision of {{%TPP}} pounds is at or above the firm defined minimum of {{%TMIN}} pounds"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Withdrawal Rate Above Sustainable" cf="100" name="TSM-1403 Withdrawal rate above the firm defined sustainable rate">
    <condition rel="consumer has withdrawal rate percent" subject="%S" object="%WRP"/>
    <condition rel="policy has sustainable withdrawal percent" subject="Kesterly Targeted Support Policy" object="%SUST" weight="1"/>
    <condition expression="%WRP is greater than %SUST" alt="A withdrawal rate of {{%WRP}} percent exceeds the firm defined sustainable rate of {{%SUST}} percent, which is an industry figure and not an FCA threshold"/>
  </relinst>

  <relinst type="consumer has characteristic" object="In Drawdown" cf="100" name="TSM-1403 Consumer is drawing an income from a pension fund">
    <condition rel="consumer has annual withdrawal amount" subject="%S" object="%WD"/>
    <condition expression="%WD is greater than 0" alt="An annual withdrawal of {{%WD}} pounds shows the consumer is in drawdown"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Holds Multiple Small Pots" cf="100" name="TSM-1404 Small pot count at or above the firm defined threshold">
    <condition rel="consumer has small pot count" subject="%S" object="%SPC"/>
    <condition rel="policy has small pot count threshold" subject="Kesterly Targeted Support Policy" object="%SPT" weight="1"/>
    <condition expression="%SPC is greater than or equal to %SPT" alt="Holding {{%SPC}} small pots meets the firm defined threshold of {{%SPT}}"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Significant Health Issue Affecting Life Expectancy" cf="100" name="TSM-508 Health issue affecting life expectancy from the vulnerability record">
    <condition rel="consumer has crm vulnerability flag" subject="%S" object="Terminal Illness Diagnosis"/>
  </relinst>

  <relinst type="consumer lacks characteristic" object="Significant Health Issue Affecting Life Expectancy" cf="100" name="TSM-1902 Explicit negative requires the vulnerability screen to have been run">
    <condition expression="countRelationshipInstances(%S,'consumer has crm vulnerability flag',*) is greater than or equal to 1" weight="1" alt="A vulnerability screen has been recorded for this consumer, so absence is a finding rather than a gap"/>
    <condition expression="countRelationshipInstances(%S,'consumer has crm vulnerability flag','Terminal Illness Diagnosis') is equal to 0" alt="No terminal illness diagnosis is recorded, so the life expectancy exclusion is positively resolved as absent"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Capacity Not Established" cf="100" name="TSM-512 Mental capacity not established firm policy exclusion">
    <condition rel="consumer has capacity established" subject="%S" object="false"/>
  </relinst>

  <relinst type="consumer lacks characteristic" object="Capacity Not Established" cf="100" name="TSM-1902 Explicit negative for the capacity exclusion">
    <condition rel="consumer has capacity established" subject="%S" object="true"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Under Eighteen" cf="100" name="TSM-512 Below the firm defined minimum adult age">
    <condition rel="consumer has age" subject="%S" object="%AGE"/>
    <condition rel="policy has minimum adult age" subject="Kesterly Targeted Support Policy" object="%MINAGE" weight="1"/>
    <condition expression="%AGE is less than %MINAGE" alt="An age of {{%AGE}} is below the firm defined minimum adult age of {{%MINAGE}}"/>
  </relinst>

  <relinst type="consumer lacks characteristic" object="Under Eighteen" cf="100" name="TSM-1902 Explicit negative for the minimum age exclusion">
    <condition rel="consumer has age" subject="%S" object="%AGE"/>
    <condition rel="policy has minimum adult age" subject="Kesterly Targeted Support Policy" object="%MINAGE" weight="1"/>
    <condition expression="%AGE is greater than or equal to %MINAGE" alt="An age of {{%AGE}} is at or above the firm defined minimum adult age of {{%MINAGE}}, so the exclusion is positively resolved as absent"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Third Party Represented" cf="100" name="TSM-512 Third party or attorney represented firm policy exclusion">
    <condition rel="consumer is third party represented" subject="%S" object="true"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Higher Rate Taxpayer" cf="100" name="TSM-1402 Higher rate taxpayer as a BANDED characteristic">
    <condition rel="consumer has taxable income" subject="%S" object="%INC"/>
    <condition rel="policy has higher rate threshold amount" subject="Kesterly Targeted Support Policy" object="%HRT" weight="1"/>
    <condition expression="%INC is greater than %HRT" alt="Taxable income of {{%INC}} pounds is above the higher rate threshold of {{%HRT}} pounds, so the consumer falls in the higher rate band"/>
  </relinst>

  <relinst type="consumer has characteristic" object="Basic Rate Taxpayer" cf="100" name="TSM-1402 Basic rate taxpayer as a BANDED characteristic">
    <condition rel="consumer has taxable income" subject="%S" object="%INC"/>
    <condition rel="policy has higher rate threshold amount" subject="Kesterly Targeted Support Policy" object="%HRT" weight="1"/>
    <condition expression="%INC is less than or equal to %HRT" alt="Taxable income of {{%INC}} pounds is at or below the higher rate threshold of {{%HRT}} pounds, so the consumer falls in the basic rate band"/>
  </relinst>

  <relinst type="consumer lacks characteristic" object="Higher Rate Taxpayer" cf="100" name="TSM-1902 Explicit negative for the higher rate band exclusion">
    <condition rel="consumer has taxable income" subject="%S" object="%INC"/>
    <condition rel="policy has higher rate threshold amount" subject="Kesterly Targeted Support Policy" object="%HRT" weight="1"/>
    <condition expression="%INC is less than or equal to %HRT" alt="Taxable income of {{%INC}} pounds is at or below the higher rate threshold of {{%HRT}} pounds, so the higher rate exclusion is positively resolved as absent"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 5 - SEGMENT DESIGN VALIDATION                               -->
  <!-- A defective registry can NEVER deliver a suggestion. Each defect   -->
  <!-- names the provision it breaches so governance can act on it.      -->
  <!-- ================================================================ -->

  <relinst type="segment has design defect" object="No Excluding Characteristics Defined" cf="100" name="TSM-403 COBS 9B.4.16R(1) requires both including and excluding characteristics">
    <condition expression="countRelationshipInstances(%S,'segment requires characteristic',*) is greater than or equal to 1" weight="1" alt="The segment does define including characteristics, so the excluding set is genuinely missing rather than the segment being empty"/>
    <condition expression="countRelationshipInstances(%S,'segment excludes characteristic',*) is equal to 0" alt="COBS 9B.4.16R(1) requires common characteristics to include excluding characteristics, and this segment defines none"/>
  </relinst>

  <relinst type="segment has design defect" object="No Including Characteristics Defined" cf="100" name="TSM-408 A segment with no including characteristics would match every consumer">
    <condition expression="countRelationshipInstances(%S,'segment requires characteristic',*) is equal to 0" alt="The segment defines no including characteristics, so any subset test would be vacuously true and it would match every consumer"/>
  </relinst>

  <relinst type="segment has design defect" object="No Situation Assigned" cf="100" name="TSM-401 COBS 9B.4.4R requires a segment to be defined by reference to a situation">
    <condition expression="countRelationshipInstances(%S,'segment addresses situation',*) is equal to 0" alt="COBS 9B.4.4R requires a segment to be defined by reference to a situation involving a shared financial support need, and none is assigned"/>
  </relinst>

  <relinst type="segment has design defect" object="Suggestion Count Not Exactly One" cf="100" name="TSM-402 COBS 9B.4.5R requires exactly one ready made suggestion per segment">
    <condition expression="countRelationshipInstances(%S,'segment has suggestion',*)" value="%N" weight="1" alt="The segment specifies {{%N}} ready made suggestions"/>
    <condition expression="%N is not equal to 1" alt="COBS 9B.4.5R requires exactly one ready made suggestion per segment, and this segment specifies {{%N}}"/>
  </relinst>

  <relinst type="segment has design defect" object="Insufficient Granularity" cf="100" name="TSM-408 COBS 9B.4.9R(1) granularity floor for this situation">
    <condition rel="segment addresses situation" subject="%S" object="%SIT"/>
    <condition rel="situation requires minimum characteristics" subject="%SIT" object="%MIN" weight="1"/>
    <condition expression="countRelationshipInstances(%S,'segment requires characteristic',*)" value="%N" weight="1" alt="The segment defines {{%N}} including characteristics"/>
    <condition expression="%N is less than %MIN" alt="{{%N}} including characteristics is below the {{%MIN}} the firm records as the minimum for this situation, so the segment is not sufficiently granular to support a suitability judgement"/>
  </relinst>

  <relinst type="segment has design defect" object="Excessive Granularity" cf="100" name="TSM-409 COBS 9B.4.9R(2) comprehensive consideration ceiling for this situation">
    <condition rel="segment addresses situation" subject="%S" object="%SIT"/>
    <condition rel="situation permits maximum characteristics" subject="%SIT" object="%MAX" weight="1"/>
    <condition expression="countRelationshipInstances(%S,'segment requires characteristic',*)" value="%N" weight="1" alt="The segment defines {{%N}} including characteristics"/>
    <condition expression="%N is greater than %MAX" alt="{{%N}} including characteristics exceeds the {{%MAX}} ceiling for this situation, so the segment approaches the level of detail associated with comprehensive individualised advice"/>
  </relinst>

  <relinst type="segment has design defect" object="Relies On Material Assumption" cf="100" name="TSM-311 COBS 9B.4.11R assumptions must be immaterial to suitability">
    <condition rel="segment relies on assumption" subject="%S" object="%A"/>
    <condition rel="assumption is material to suitability" subject="%A" object="true"/>
  </relinst>

  <relinst type="segment has design defect" object="Assumption Without Evidence Basis" cf="100" name="TSM-311 COBS 9B.4.11R assumptions must be referable to evidence">
    <condition rel="segment relies on assumption" subject="%S" object="%A"/>
    <condition expression="countRelationshipInstances(%A,'assumption has evidence basis',*) is equal to 0" alt="The segment relies on an assumption that is not referable to any recorded evidence about the type of individuals the segment covers"/>
  </relinst>

  <relinst type="segment has design defect" object="Uses Poor Practice Characteristic" cf="100" name="TSM-413 Characteristic flagged poor practice for this situation by the FCA">
    <condition rel="segment addresses situation" subject="%S" object="%SIT"/>
    <condition rel="situation flags poor practice characteristic" subject="%SIT" object="%CH"/>
    <condition rel="segment requires characteristic" subject="%S" object="%CH"/>
  </relinst>

  <relinst type="segment has design defect" object="No Better Position Definition" cf="100" name="TSM-706 The firm must define what the better position is before asserting it">
    <condition expression="countRelationshipInstances(%S,'segment has better position definition',*) is equal to 0" alt="The firm has not defined in measurable terms what better position this segment is designed to achieve, so better position cannot be asserted for it"/>
  </relinst>

  <relinst type="segment has design defect" object="Characteristic Not Relevant To Suggestion" cf="100" name="TSM-121 COBS 9B.4.16R(2) two limb relevance test">
    <condition rel="segment requires characteristic" subject="%S" object="%CH"/>
    <condition expression="countRelationshipInstances(%S,'segment characteristic relevant to suggestion',%CH) is equal to 0" alt="This including characteristic is not recorded as relevant to the specification of the suggestion, so it fails the second limb of COBS 9B.4.16R(2)"/>
  </relinst>

  <relinst type="segment has design defect" object="Protected Characteristic Without Equality Justification" cf="100" name="TSM-1305 A protected characteristic requires a recorded equality justification">
    <condition rel="segment requires characteristic" subject="%S" object="%CH"/>
    <condition rel="characteristic engages protected characteristic" subject="%CH" object="true"/>
    <condition expression="countRelationshipInstances(%CH,'characteristic has equality justification',*) is equal to 0" alt="This characteristic engages an Equality Act protected characteristic and no equality justification is recorded for its use in segment design"/>
  </relinst>

  <relinst type="segment has design defect" object="Requires Data Not Readily Accessible" cf="100" name="TSM-306 TSM-307 A segment may not require information that is not readily accessible">
    <condition rel="segment requires data item" subject="%S" object="%DI"/>
    <condition rel="data item is readily accessible" subject="%DI" object="false"/>
  </relinst>

  <relinst type="segment has design defect" object="No Prevalence Rationale" cf="100" name="TSM-414 Segment design not referable to evidence about the individuals it covers">
    <condition expression="countRelationshipInstances(%S,'segment requires characteristic',*) is greater than or equal to 1" weight="1" alt="The segment defines including characteristics, so the missing rationale is a genuine gap rather than an empty segment"/>
    <condition expression="countRelationshipInstances(%S,'segment has prevalence rationale',*) is equal to 0" alt="No prevalence rationale is recorded, so the segment design is not referable to evidence about the type of individuals covered, contrary to COBS 9B.4.11R and the FCA good practice on segment design"/>
  </relinst>

  <!-- Paired Clean record. Evaluating the count forces backward chaining  -->
  <!-- through the whole defect family first. Audit grade systems need     -->
  <!-- explicit passes, not silent absence.                               -->
  <relinst type="segment design is compliant" object="true" cf="100" name="TSM-1210 Explicit clean record for a segment with no design defect">
    <condition expression="countRelationshipInstances(%S,'segment has design defect',*) is equal to 0" alt="No design defect was found against this segment across the whole COBS 9B.4 validation family"/>
  </relinst>

  <relinst type="segment is usable" object="true" cf="100" name="TSM-403 A segment may only be used for alignment when it is design compliant">
    <condition rel="segment design is compliant" subject="%S" object="true"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 6 - SITUATION DETECTION AND THE PER SITUATION TALLY         -->
  <!-- ================================================================ -->

  <relinst type="case is in situation" cf="100" name="TSM-401 Situation detected from a trigger characteristic the firm offers support for">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm offers situation" subject="%F" object="%O"/>
    <condition rel="situation has trigger characteristic" subject="%O" object="%CH"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="%CH"/>
  </relinst>

  <relinst type="case is in situation" cf="100" name="TSM-201 Situation taken from the client express request">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm offers situation" subject="%F" object="%O"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has requested support type" subject="%C" object="%O"/>
  </relinst>

  <relinst type="case has situation key" cf="100" name="TSM-406 Compose a per case and per situation key for the single alignment tally">
    <condition rel="case is in situation" subject="%S" object="%SIT"/>
    <condition expression="%S + ' in ' + %SIT" value="%O"/>
  </relinst>

  <relinst type="situation key is for situation" cf="100" name="TSM-406 Recover the situation from the composed key by rebuild and equality">
    <condition rel="case has situation key" subject="%CASE" object="%S"/>
    <condition rel="case is in situation" subject="%CASE" object="%O"/>
    <condition expression="%CASE + ' in ' + %O" value="%REBUILT"/>
    <condition expression="%S is equal to %REBUILT" alt="The rebuilt key matches this situation key, so the key belongs to this situation"/>
  </relinst>

  <relinst type="situation key covers segment" cf="100" name="TSM-406 Attach each qualifying segment to its case and situation key">
    <condition rel="case has situation key" subject="%CASE" object="%S"/>
    <condition rel="case qualifies for segment" subject="%CASE" object="%O"/>
    <condition rel="segment addresses situation" subject="%O" object="%SIT"/>
    <condition expression="%CASE + ' in ' + %SIT" value="%REBUILT"/>
    <condition expression="%S is equal to %REBUILT" alt="The qualifying segment addresses the situation this key represents"/>
  </relinst>

  <relinst type="case has multiple alignment defect" cf="100" name="TSM-406 COBS 9B.4.7R only one segment may be aligned within a situation">
    <condition rel="case has situation key" subject="%S" object="%KEY"/>
    <condition rel="situation key is for situation" subject="%KEY" object="%O"/>
    <condition expression="countRelationshipInstances(%KEY,'situation key covers segment',*)" value="%N" weight="1" alt="{{%N}} segments qualify within this situation"/>
    <condition expression="%N is greater than or equal to 2" alt="COBS 9B.4.7R requires that within a particular situation it is only possible to align with one segment, and {{%N}} qualify here, which is a segment design defect"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 7 - SEGMENT QUALIFICATION, THREE VALUED AND FAIL SAFE       -->
  <!-- Including characteristics must be POSITIVELY confirmed. Excluding  -->
  <!-- characteristics must be positively RESOLVED, either present or     -->
  <!-- explicitly absent. An unresolved exclusion blocks qualification,   -->
  <!-- so unknown can never read as clear.                                -->
  <!-- ================================================================ -->

  <relinst type="case has unmet including requirement" cf="100" name="TSM-404 Including characteristic not positively confirmed">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm defines segment" subject="%F" object="%O"/>
    <condition rel="segment requires characteristic" subject="%O" object="%CH"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition expression="countRelationshipInstances(%C,'consumer has characteristic',%CH) is equal to 0" alt="The consumer is not positively confirmed as holding this including characteristic, so alignment with the segment cannot be established"/>
  </relinst>

  <relinst type="case has unmet including requirement" cf="100" name="TSM-1902 Including characteristic rests only on weak provenance">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm defines segment" subject="%F" object="%O"/>
    <condition rel="segment requires characteristic" subject="%O" object="%CH"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has weakly evidenced characteristic" subject="%C" object="%CH"/>
  </relinst>

  <relinst type="case has excluding characteristic hit" cf="100" name="TSM-405 A single excluding characteristic blocks alignment">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm defines segment" subject="%F" object="%O"/>
    <condition rel="segment excludes characteristic" subject="%O" object="%CH"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="%CH"/>
  </relinst>

  <relinst type="case has unresolved excluding characteristic" cf="100" name="TSM-404 Excluding characteristic neither present nor explicitly absent">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm defines segment" subject="%F" object="%O"/>
    <condition rel="segment excludes characteristic" subject="%O" object="%CH"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition expression="countRelationshipInstances(%C,'consumer has characteristic',%CH) is equal to 0" weight="1" alt="The excluding characteristic is not recorded as present"/>
    <condition expression="countRelationshipInstances(%C,'consumer lacks characteristic',%CH) is equal to 0" alt="Nor is it positively resolved as absent, so COBS 9B.5.5R(2)(c) cannot be satisfied and the absence of the exclusion is unconfirmed"/>
  </relinst>

  <relinst type="case has alignment gap record" cf="100" name="TSM-1204 Name each unconfirmed including characteristic for the supervisory file">
    <condition rel="case has unmet including requirement" subject="%S" object="%SEG"/>
    <condition rel="segment addresses situation" subject="%SEG" object="%SIT" weight="1"/>
    <condition rel="case is in situation" subject="%S" object="%SIT" weight="1"/>
    <condition rel="segment requires characteristic" subject="%SEG" object="%CH"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition expression="countRelationshipInstances(%C,'consumer has characteristic',%CH) is equal to 0" alt="This is the specific including characteristic that could not be positively confirmed for the consumer"/>
    <condition expression="%SEG + ' :: ' + %CH + ' :: including characteristic not confirmed so this segment was considered and not used'" value="%O"/>
  </relinst>

  <relinst type="case has alignment gap record" cf="100" name="TSM-1204 Name each unresolved excluding characteristic for the supervisory file">
    <condition rel="case has unresolved excluding characteristic" subject="%S" object="%SEG"/>
    <condition rel="segment excludes characteristic" subject="%SEG" object="%CH"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition expression="countRelationshipInstances(%C,'consumer lacks characteristic',%CH) is equal to 0" alt="This is the specific excluding characteristic that was neither present nor positively resolved as absent"/>
    <condition expression="%SEG + ' :: ' + %CH + ' :: excluding characteristic not resolved'" value="%O"/>
  </relinst>

  <relinst type="case has candidate segment" cf="100" name="TSM-404 Candidate segment on a confirmed including set">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm defines segment" subject="%F" object="%O"/>
    <condition rel="segment addresses situation" subject="%O" object="%SIT"/>
    <condition rel="case is in situation" subject="%S" object="%SIT"/>
    <condition expression="countRelationshipInstances(%O,'segment requires characteristic',*) is greater than or equal to 1" weight="1" alt="The segment defines at least one including characteristic, so the match is not vacuous"/>
    <condition expression="countRelationshipInstances(%S,'case has unmet including requirement',%O) is equal to 0" alt="Every including characteristic of this segment is positively confirmed for the consumer"/>
  </relinst>

  <relinst type="case has defective matching segment" cf="100" name="TSM-403 The consumer matches a segment that is not design compliant">
    <condition rel="case has candidate segment" subject="%S" object="%O"/>
    <condition expression="countRelationshipInstances(%O,'segment has design defect',*) is greater than or equal to 1" alt="The consumer matches this segment on characteristics, but the segment itself carries a COBS 9B.4 design defect so it must not be used"/>
  </relinst>

  <relinst type="case qualifies for segment" cf="100" name="TSM-404 TSM-405 Qualification requires a usable segment and fully resolved exclusions">
    <condition rel="case has candidate segment" subject="%S" object="%O"/>
    <condition rel="segment is usable" subject="%O" object="true"/>
    <condition expression="countRelationshipInstances(%S,'case has excluding characteristic hit',%O) is equal to 0" weight="1" alt="The consumer holds none of this segment excluding characteristics"/>
    <condition expression="countRelationshipInstances(%S,'case has unresolved excluding characteristic',%O) is equal to 0" weight="1" alt="Every excluding characteristic is positively resolved as absent rather than merely unrecorded"/>
  </relinst>

  <!-- Data sufficiency, scoped to the segments the case actually reaches. -->
  <relinst type="case has data gap for segment" cf="100" name="TSM-302 Required information for this segment is missing or not current">
    <condition rel="case has candidate segment" subject="%S" object="%O"/>
    <condition rel="segment requires data item" subject="%O" object="%DI"/>
    <condition expression="countRelationshipInstances(%S,'case has current data item',%DI) is equal to 0" alt="The information COBS 9B.4.17R specifies for this segment is not held in current form at the assessment date, so alignment cannot be confirmed"/>
  </relinst>

  <relinst type="case has stale data for segment" cf="100" name="TSM-303 Stale alignment data not yet verified with the client">
    <condition rel="case has candidate segment" subject="%S" object="%O"/>
    <condition rel="segment requires data item" subject="%O" object="%DI"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="case has stale data item" subject="%S" object="%DI"/>
    <condition expression="countRelationshipInstances(%C,'consumer confirms verified stale data','true') is equal to 0" alt="COBS 9B.5.7R requires the firm to verify possibly out of date information with the client before confirming alignment, and no confirmation is recorded"/>
  </relinst>

  <relinst type="case has contradictory data for segment" cf="100" name="TSM-304 Contradictory alignment data for this segment">
    <condition rel="case has candidate segment" subject="%S" object="%O"/>
    <condition rel="segment requires data item" subject="%O" object="%DI"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has contradictory data item" subject="%C" object="%DI"/>
  </relinst>

  <relinst type="case has sufficient data for segment" cf="100" name="TSM-302 All required information for this segment is present and current">
    <condition rel="case has candidate segment" subject="%S" object="%O"/>
    <condition expression="countRelationshipInstances(%S,'case has data gap for segment',%O) is equal to 0" alt="Every data item this segment requires is held in current form"/>
  </relinst>

  <!-- The single canonical alignment conjunction. Everything downstream   -->
  <!-- binds ONLY this relationship. -->
  <relinst type="case has confirmed alignment with segment" cf="100" name="TSM-404 Canonical confirmed alignment used by every downstream layer">
    <condition rel="case qualifies for segment" subject="%S" object="%O"/>
    <condition rel="case has sufficient data for segment" subject="%S" object="%O"/>
    <condition expression="countRelationshipInstances(%S,'case has stale data for segment',%O) is equal to 0" weight="1" alt="No required data item is stale and unverified"/>
    <condition expression="countRelationshipInstances(%S,'case has contradictory data for segment',%O) is equal to 0" weight="1" alt="No required data item is contradicted by another current record"/>
  </relinst>

  <!-- TSM-1905. At most ONE suggestion per case. Where a consumer aligns  -->
  <!-- across several situations the firm defined situation priority        -->
  <!-- selects one and the others are recorded as deferred.                -->
  <relinst type="case has aligned situation priority" cf="100" name="TSM-1905 Project the priority of each aligned situation onto the case">
    <condition rel="case has confirmed alignment with segment" subject="%S" object="%SEG"/>
    <condition rel="segment addresses situation" subject="%SEG" object="%SIT"/>
    <condition rel="situation has priority" subject="%SIT" object="%O"/>
  </relinst>

  <relinst type="case has selected segment" cf="100" name="TSM-1905 Select the aligned segment in the highest priority situation">
    <condition rel="case has confirmed alignment with segment" subject="%S" object="%O"/>
    <condition rel="segment addresses situation" subject="%O" object="%SIT"/>
    <condition rel="situation has priority" subject="%SIT" object="%PRI"/>
    <condition expression="countRelationshipInstances(%S,'case has confirmed alignment with segment',*) is greater than or equal to 1" weight="1" alt="At least one segment is confirmed for this case"/>
    <condition expression="maxObjects(%S,'case has aligned situation priority',*)" value="%TOP" weight="1" alt="The highest priority aligned situation scores {{%TOP}}"/>
    <condition expression="%PRI is equal to %TOP" alt="This segment situation priority of {{%PRI}} is the highest among the aligned situations, so it is the one suggestion delivered for this case"/>
  </relinst>

  <relinst type="case has deferred situation" cf="100" name="TSM-1905 Record the situations deferred to a later interaction">
    <condition rel="case has confirmed alignment with segment" subject="%S" object="%SEG"/>
    <condition rel="segment addresses situation" subject="%SEG" object="%O"/>
    <condition rel="situation has priority" subject="%O" object="%PRI"/>
    <condition expression="countRelationshipInstances(%S,'case has aligned situation priority',*) is greater than or equal to 1" weight="1" alt="At least one aligned situation priority is recorded"/>
    <condition expression="maxObjects(%S,'case has aligned situation priority',*)" value="%TOP" weight="1" alt="The highest priority aligned situation scores {{%TOP}}"/>
    <condition expression="%PRI is less than %TOP" alt="This situation priority of {{%PRI}} is below the selected {{%TOP}}, so it is deferred to a later interaction rather than delivered now"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 8 - CONTRA INDICATION AND VULNERABILITY                     -->
  <!-- COBS 9B.5.11R is a SEPARATE gate from an excluding characteristic. -->
  <!-- An excluding characteristic blocks ALIGNMENT with a segment. A      -->
  <!-- contra indication blocks DELIVERY of the selected suggestion even   -->
  <!-- where alignment succeeded. Consistent with the joint FCA and        -->
  <!-- Ombudsman statement that suitability is assessed against segment    -->
  <!-- design, this gate is where individual level information is tested.  -->
  <!-- ================================================================ -->

  <relinst type="case has contra indication" cf="100" name="TSM-501 COBS 9B.5.11R contra indication from a readily accessible record">
    <condition rel="case has confirmed alignment with segment" subject="%S" object="%SEG"/>
    <condition rel="segment has suggestion" subject="%SEG" object="%SUG"/>
    <condition rel="suggestion is contraindicated by indicator" subject="%SUG" object="%O"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has contra indicator" subject="%C" object="%O"/>
    <condition rel="contra indication is readily accessible" subject="%O" object="true"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-123 Record the calibration of the contra indication gate">
    <condition rel="case has confirmed alignment with segment" subject="%S" object="%SEG"/>
    <condition expression="countRelationshipInstances(%S,'case has contra indication',*) is equal to 0" weight="1" alt="No contra indication was found against the aligned suggestion"/>
    <condition expression="'CONTRA-INDICATION;COBS 9B.5.11R with COBS 9B.5.12G;No information readily accessible to this business area indicates the suggestion for segment ' + %SEG + ' may be unsuitable. Firms are not expected to consider all data they hold, and where excluding characteristics are correctly established there should not generally be other unsuitability information.;Clean'" value="%O"/>
  </relinst>

  <!-- FG21/1 four drivers. Severity is CATEGORICAL, so a mild indicator   -->
  <!-- cannot be mistaken for a severe one by a count gate.                -->
  <relinst type="case has vulnerability driver" cf="100" name="TSM-503 FG21/1 driver present from the CRM record">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has crm vulnerability flag" subject="%C" object="%IND"/>
    <condition rel="vulnerability indicator belongs to driver" subject="%IND" object="%O"/>
  </relinst>

  <relinst type="case has vulnerability driver" cf="100" name="TSM-503 FG21/1 driver present from the client own disclosure">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has vulnerability disclosure" subject="%C" object="%IND"/>
    <condition rel="vulnerability indicator belongs to driver" subject="%IND" object="%O"/>
  </relinst>

  <relinst type="case requires vulnerability referral" object="true" cf="100" name="TSM-504 Vulnerability indicator requiring referral from the CRM record">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has crm vulnerability flag" subject="%C" object="%IND"/>
    <condition rel="vulnerability indicator requires referral" subject="%IND" object="true"/>
  </relinst>

  <relinst type="case requires vulnerability referral" object="true" cf="100" name="TSM-504 Vulnerability indicator requiring referral from the client disclosure">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has vulnerability disclosure" subject="%C" object="%IND"/>
    <condition rel="vulnerability indicator requires referral" subject="%IND" object="true"/>
  </relinst>

  <relinst type="case requires adjusted delivery" object="true" cf="100" name="TSM-505 Vulnerability indicator requiring adjusted delivery from the CRM record">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has crm vulnerability flag" subject="%C" object="%IND"/>
    <condition rel="vulnerability indicator requires adjusted delivery" subject="%IND" object="true"/>
  </relinst>

  <relinst type="case requires adjusted delivery" object="true" cf="100" name="TSM-505 Vulnerability indicator requiring adjusted delivery from the client disclosure">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has vulnerability disclosure" subject="%C" object="%IND"/>
    <condition rel="vulnerability indicator requires adjusted delivery" subject="%IND" object="true"/>
  </relinst>

  <!-- TSM-512. A third party or attorney represented consumer is routed    -->
  <!-- to specialist support rather than a ready made digital suggestion,   -->
  <!-- firm policy. This makes the derived characteristic load bearing:     -->
  <!-- it flows into the existing vulnerability referral outcome, signpost  -->
  <!-- and next step.                                                       -->
  <relinst type="case requires vulnerability referral" object="true" cf="100" name="TSM-512 Third party or attorney represented routed to specialist support firm policy">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer is third party represented" subject="%C" object="true"/>
  </relinst>

  <!-- TSM-511. Information the client volunteers during the interaction    -->
  <!-- is information the firm IS aware of, so COBS 9B.5.11R applies to     -->
  <!-- it. The firm must route it, and an unrouted volunteering blocks      -->
  <!-- delivery.                                                            -->
  <relinst type="case has candidate outcome" object="Stop Contra Indication Signpost Alternative Support" cf="100" name="TSM-511 Volunteered information leads the firm to terminate the journey">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has volunteered further information" subject="%C" object="true"/>
    <condition rel="consumer has chosen volunteered information route" subject="%C" object="Terminate Journey"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Data Insufficient Data Request Issued" cf="100" name="TSM-511 Volunteered information requires clarification before realignment">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has volunteered further information" subject="%C" object="true"/>
    <condition rel="consumer has chosen volunteered information route" subject="%C" object="Seek Clarification Then Realign"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Data Insufficient Data Request Issued" cf="90" name="TSM-511 Volunteered information not yet routed by the firm">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has volunteered further information" subject="%C" object="true"/>
    <condition expression="countRelationshipInstances(%C,'consumer has chosen volunteered information route',*) is equal to 0" alt="The client volunteered further information and the firm has not yet decided how to handle it, so the case cannot proceed until it is routed"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-511 Volunteered information handling record">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has volunteered further information" subject="%C" object="true"/>
    <condition rel="consumer has chosen volunteered information route" subject="%C" object="%ROUTE"/>
    <condition expression="'VOLUNTEERED-INFORMATION;COBS 9B.5.11R with 9B.5.12G;The client volunteered further information during the interaction. Information the firm is aware of must be acted on where it indicates the suggestion may be unsuitable. The firm routed it as ' + %ROUTE + '.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-511 Volunteered information item detail">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has volunteered further information" subject="%C" object="true"/>
    <condition rel="consumer has volunteered information item" subject="%C" object="%ITEM"/>
    <condition expression="'VOLUNTEERED-ITEM;COBS 9B.5.11R;The client volunteered: ' + %ITEM + ';Information'" value="%O"/>
  </relinst>

  <!-- TSM-514. A client who asks to transact inconsistently with the       -->
  <!-- suggestion is served outside targeted support as client directed     -->
  <!-- business, firm policy. The suggestion basis is unchanged.            -->
  <relinst type="case requires next step" object="Process Client Directed Transaction Outside Targeted Support" cf="100" name="TSM-514 Client requests a transaction inconsistent with the suggestion">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer requests inconsistent transaction" subject="%C" object="true"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-514 Client directed transaction record">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer requests inconsistent transaction" subject="%C" object="true"/>
    <condition expression="'CLIENT-DIRECTED;Firm policy within the COBS 9B delivery framework;The client asked to transact inconsistently with the ready made suggestion. The transaction is processed outside targeted support as client directed business and the recorded suggestion basis is unchanged.;Information'" value="%O"/>
  </relinst>

  <!-- TSM-510. Concurrent or recent advice is NOT an automatic bar. It     -->
  <!-- creates an obligation to explain the difference, and delivery then   -->
  <!-- requires the client to have confirmed they understand it.            -->
  <relinst type="case requires advice distinction explanation" object="true" cf="100" name="TSM-510 COBS 9B.6.16G client is receiving or recently received advice">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer is receiving investment advice" subject="%C" object="true"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 9 - SUGGESTION SELECTION AND PRODUCT SCOPE                  -->
  <!-- Negative targeting. A block family is consulted by a zero count so  -->
  <!-- there is no mirror rule to drift.                                   -->
  <!-- ================================================================ -->

  <relinst type="case has candidate suggestion" cf="100" name="TSM-601 The one suggestion specified for the selected segment">
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition rel="segment has suggestion" subject="%SEG" object="%O"/>
  </relinst>

  <relinst type="case has delivery block" object="Prohibited Product Category" cf="100" name="TSM-604 COBS 9B.4.42R prohibited investment category">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion references product" subject="%SUG" object="%PROD"/>
    <condition rel="product has category" subject="%PROD" object="%CAT"/>
    <condition rel="category is prohibited" subject="%CAT" object="true"/>
  </relinst>

  <relinst type="case has delivery block" object="Leveraged Or Illiquid Product" cf="100" name="TSM-605 COBS 9B.4.43G complex illiquid or volatile product unsuitable for a limited information service">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion references product" subject="%SUG" object="%PROD"/>
    <condition rel="product is leveraged or illiquid" subject="%PROD" object="true"/>
    <condition rel="product is packaged" subject="%PROD" object="false"/>
  </relinst>

  <relinst type="case has delivery block" object="Consolidation Recommendation" cf="100" name="TSM-606 COBS 9B.4.38R express consolidation recommendation prohibited">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion is consolidation recommendation" subject="%SUG" object="true"/>
  </relinst>

  <!-- TSM-607 and TSM-608. COBS 9B.4.38R itself prohibits express or       -->
  <!-- implied consolidation; 9B.4.39G defines the two implied shapes.      -->
  <!-- A single pot transfer to a NEW provider matches neither shape and    -->
  <!-- raises no block, per 9B.4.40G.                                       -->
  <relinst type="case has delivery block" object="Consolidation Recommendation" cf="100" name="TSM-607 COBS 9B.4.38R implied consolidation by transfer into an existing arrangement per the 9B.4.39G definition">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion transfers into existing arrangement" subject="%SUG" object="true"/>
  </relinst>

  <relinst type="case has delivery block" object="Consolidation Recommendation" cf="100" name="TSM-607 COBS 9B.4.38R implied consolidation by transferring multiple arrangements per the 9B.4.39G definition">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion transfers multiple arrangements" subject="%SUG" object="true"/>
  </relinst>

  <!-- TSM-1307. COBS 9B.4.24G(2) target market consistency tested against  -->
  <!-- the recorded product target market, not just the suggestion flag.    -->
  <relinst type="case has delivery block" object="Target Market Mismatch" cf="100" name="TSM-1307 COBS 9B.4.24G target market of the referenced product does not include the selected segment">
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion references product" subject="%SUG" object="%PROD"/>
    <condition expression="countRelationshipInstances(%PROD,'product target market includes segment',%SEG) is equal to 0" alt="The recorded target market of this product does not include the selected segment, so target market consistency under COBS 9B.4.24G cannot be demonstrated"/>
  </relinst>

  <relinst type="case has delivery block" object="Annuity Names Particular Product" cf="100" name="TSM-610 COBS 9B.4.28R annuity suggestion must not name a particular annuity">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion concerns annuity" subject="%SUG" object="true"/>
    <condition rel="suggestion names particular annuity" subject="%SUG" object="true"/>
  </relinst>

  <relinst type="case has delivery block" object="Annuity Includes Quote" cf="100" name="TSM-610 COBS 9B.4.28R annuity suggestion must not include a quote">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion concerns annuity" subject="%SUG" object="true"/>
    <condition rel="suggestion includes annuity quote" subject="%SUG" object="true"/>
  </relinst>

  <relinst type="case has delivery block" object="Annuity Beyond Features" cf="100" name="TSM-610 COBS 9B.4.28R annuity suggestion must go no further than features">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion concerns annuity" subject="%SUG" object="true"/>
    <condition rel="suggestion limited to annuity features" subject="%SUG" object="false"/>
  </relinst>

  <relinst type="case has delivery block" object="Missing Cost Consideration Record" cf="100" name="TSM-616 COBS 9B.4.24G product costs must be evidenced">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition expression="countRelationshipInstances(%SUG,'suggestion has cost consideration record','true') is equal to 0" alt="The firm cannot demonstrate it considered product costs and charges when specifying this suggestion"/>
  </relinst>

  <relinst type="case has delivery block" object="Missing Target Market Confirmation" cf="100" name="TSM-616 COBS 9B.4.24G target market consistency must be evidenced">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition expression="countRelationshipInstances(%SUG,'suggestion has target market confirmation','true') is equal to 0" alt="The firm cannot demonstrate it considered consistency with the product target market when specifying this suggestion"/>
  </relinst>

  <relinst type="case has delivery block" object="Missing Provider Strength Record" cf="100" name="TSM-616 COBS 9B.4.24G provider financial strength must be evidenced">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition expression="countRelationshipInstances(%SUG,'suggestion has provider strength record','true') is equal to 0" alt="The firm cannot demonstrate it considered the financial strength of the product provider when specifying this suggestion"/>
  </relinst>

  <!-- TSM-618. COBS 9B.10.6R is the DISTRIBUTOR side duty: the firm must   -->
  <!-- have arrangements to review manufacturer information about a         -->
  <!-- significant product adaptation and consider whether the product      -->
  <!-- should still be recommended.                                         -->
  <relinst type="case has delivery block" object="Product Adaptation Unreviewed" cf="100" name="TSM-618 COBS 9B.10.6R manufacturer information on a significant product adaptation not reviewed by the firm">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion references product" subject="%SUG" object="%PROD"/>
    <condition rel="product has significant adaptation notice" subject="%PROD" object="true"/>
    <condition rel="product adaptation reviewed" subject="%PROD" object="false"/>
  </relinst>

  <!-- TSM-111. The presentation limb of article 55A. If the suggestion is  -->
  <!-- not presented as suitable for the GROUP, the article 55A(2) carve    -->
  <!-- out fails and the firm has carried on article 53 advising without    -->
  <!-- permission. -->
  <relinst type="case has delivery block" object="Suggestion Not Presented On Group Basis" cf="100" name="TSM-111 Article 55A(3) presentation limb not satisfied">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition expression="countRelationshipInstances(%SUG,'suggestion presents group basis','true') is equal to 0" alt="The suggestion is not recorded as presented as suitable for the individual on the basis of the individual being in the group, so the article 55A(2) carve out from article 53 advising is not engaged"/>
  </relinst>

  <relinst type="case has deliverable suggestion" cf="100" name="TSM-601 Suggestion clears every product scope and evidencing block">
    <condition rel="case has candidate suggestion" subject="%S" object="%O"/>
    <condition expression="countRelationshipInstances(%S,'case has delivery block',*) is equal to 0" alt="No product scope, consolidation, annuity or evidencing block was raised against this suggestion"/>
  </relinst>

  <relinst type="case has selected suggestion" cf="100" name="TSM-601 The single suggestion to be delivered for this case">
    <condition rel="case has deliverable suggestion" subject="%S" object="%O"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 10 - SEGMENT SUITABILITY AND BETTER POSITION                -->
  <!-- These are DIFFERENT tests and are kept apart deliberately.         -->
  <!-- COBS 9B.4.20R segment level suitability is a RULE and is the        -->
  <!-- binding delivery gate. The better position test at COBS 9B.1.1G     -->
  <!-- and 9B.1.2G is GUIDANCE, assessed ex ante on the notional           -->
  <!-- individual against a no support counterfactual. The FCA prescribed  -->
  <!-- NO evidence methodology, so the quantified projection below is      -->
  <!-- firm policy method, not a rule derived test.                       -->
  <!-- ================================================================ -->

  <relinst type="segment suitability established" object="true" cf="100" name="TSM-704 TSM-705 COBS 9B.4.20R segment level suitability on the shared need and characteristics">
    <condition rel="segment addresses situation" subject="%S" object="%SIT"/>
    <condition expression="countRelationshipInstances(%S,'segment requires characteristic',*) is greater than or equal to 1" weight="1" alt="The segment defines common characteristics against which suitability can be judged"/>
    <condition expression="countRelationshipInstances(%S,'segment has design defect',*) is equal to 0" weight="1" alt="The segment carries no COBS 9B.4 design defect"/>
    <condition expression="countRelationshipInstances(%S,'segment relies on assumption','Emergency Fund Is Present') is equal to 0" alt="Suitability is judged on the shared need for {{%SIT}} and the segment common characteristics, and expressly not on any material assumption"/>
  </relinst>

  <relinst type="segment has projection" cf="100" name="TSM-707 Materialise the projection on the segment so it can be counted">
    <condition rel="projection assesses segment" subject="%O" object="%S"/>
  </relinst>

  <relinst type="projection has gross improvement" cf="100" name="TSM-707 Gross improvement over the no support counterfactual">
    <condition rel="projection has supported value" subject="%S" object="%SUP"/>
    <condition rel="projection has baseline value" subject="%S" object="%BASE"/>
    <condition expression="%SUP - %BASE" value="%O" alt="A supported value of {{%SUP}} pounds against a no support baseline of {{%BASE}} pounds is a gross improvement of {{%O}} pounds"/>
  </relinst>

  <relinst type="projection has net improvement" cf="100" name="TSM-707 Net improvement after the cost of acting">
    <condition rel="projection has gross improvement" subject="%S" object="%GROSS"/>
    <condition rel="projection has cost of acting" subject="%S" object="%COST"/>
    <condition expression="%GROSS - %COST" value="%O" alt="A gross improvement of {{%GROSS}} pounds less a cost of acting of {{%COST}} pounds is a net improvement of {{%O}} pounds"/>
  </relinst>

  <relinst type="projection has improvement percent" cf="100" name="TSM-707 Net improvement as a percentage of the baseline">
    <condition rel="projection has net improvement" subject="%S" object="%NET"/>
    <condition rel="projection has baseline value" subject="%S" object="%BASE"/>
    <condition expression="%BASE is greater than 0" weight="1" alt="The baseline of {{%BASE}} pounds is greater than zero so a percentage can be computed"/>
    <condition expression="%NET / %BASE" value="%SHARE" weight="1" alt="A net improvement of {{%NET}} pounds is a share of {{%SHARE}} of the baseline"/>
    <condition expression="%SHARE * 100" value="%O" alt="That share expressed as a percentage is {{%O}} percent"/>
  </relinst>

  <relinst type="segment has better position established" object="true" cf="100" name="TSM-701 TSM-707 Better position established on a defined and evidenced projection">
    <condition rel="segment has better position definition" subject="%S" object="%BPD"/>
    <condition rel="better position definition has threshold" subject="%BPD" object="%THRESH" weight="1"/>
    <condition rel="segment has projection" subject="%S" object="%P"/>
    <condition rel="projection has net improvement" subject="%P" object="%NET"/>
    <condition expression="%NET is greater than or equal to %THRESH" weight="1" alt="A net improvement of {{%NET}} pounds meets the firm defined materiality threshold of {{%THRESH}} pounds"/>
    <condition rel="projection has improvement percent" subject="%P" object="%PCT"/>
    <condition rel="policy has better position materiality percent" subject="Kesterly Targeted Support Policy" object="%MATPCT" weight="1"/>
    <condition expression="%PCT is greater than or equal to %MATPCT" weight="1" alt="A net improvement of {{%PCT}} percent meets the firm defined materiality percentage of {{%MATPCT}} percent"/>
    <condition rel="projection has horizon years" subject="%P" object="%HZ"/>
    <condition rel="policy has minimum projection horizon years" subject="Kesterly Targeted Support Policy" object="%MINHZ" weight="1"/>
    <condition expression="%HZ is greater than or equal to %MINHZ" weight="1" alt="A projection horizon of {{%HZ}} years meets the firm defined minimum of {{%MINHZ}} years"/>
    <condition rel="projection has detriment risk" subject="%P" object="false"/>
  </relinst>

  <relinst type="segment has better position established" object="false" cf="100" name="TSM-708 Projection exists but the net improvement is immaterial">
    <condition rel="segment has projection" subject="%S" object="%P"/>
    <condition rel="projection has net improvement" subject="%P" object="%NET"/>
    <condition rel="segment has better position definition" subject="%S" object="%BPD" weight="1"/>
    <condition rel="better position definition has threshold" subject="%BPD" object="%THRESH" weight="1"/>
    <condition expression="%NET is less than %THRESH" alt="A net improvement of {{%NET}} pounds falls below the firm defined materiality threshold of {{%THRESH}} pounds, so there are no reasonable grounds to consider the group would be in a better position"/>
  </relinst>

  <relinst type="segment has better position established" object="false" cf="100" name="TSM-708 Projection exists but the percentage limb fails">
    <condition rel="segment has projection" subject="%S" object="%P"/>
    <condition rel="projection has improvement percent" subject="%P" object="%PCT"/>
    <condition rel="policy has better position materiality percent" subject="Kesterly Targeted Support Policy" object="%MATPCT" weight="1"/>
    <condition expression="%PCT is less than %MATPCT" alt="A net improvement of {{%PCT}} percent falls below the firm defined materiality percentage of {{%MATPCT}} percent, so the percentage limb of the better position test fails"/>
  </relinst>

  <relinst type="segment has better position established" object="false" cf="100" name="TSM-708 Projection exists but the horizon is too short">
    <condition rel="segment has projection" subject="%S" object="%P"/>
    <condition rel="projection has horizon years" subject="%P" object="%HZ"/>
    <condition rel="policy has minimum projection horizon years" subject="Kesterly Targeted Support Policy" object="%MINHZ" weight="1"/>
    <condition expression="%HZ is less than %MINHZ" alt="A projection horizon of {{%HZ}} years is below the firm defined minimum of {{%MINHZ}} years, so the projection is not accepted as evidence"/>
  </relinst>

  <relinst type="segment has better position established" object="false" cf="100" name="TSM-708 Projection carries a detriment risk">
    <condition rel="segment has projection" subject="%S" object="%P"/>
    <condition rel="projection has detriment risk" subject="%P" object="true"/>
  </relinst>

  <!-- The third rule the review identified as missing. A false rule that   -->
  <!-- binds a per item record cannot fire when there are NO records, so    -->
  <!-- the commonest failure needs its own zero count rule or the outcome   -->
  <!-- would fall through to the terminal default and be mis reported.      -->
  <relinst type="segment has better position established" object="false" cf="100" name="TSM-708 No projection evidence exists at all">
    <condition expression="countRelationshipInstances(%S,'segment has projection',*) is equal to 0" alt="No projection evidence exists for this segment, so better position cannot be established and is recorded as not established rather than left silent"/>
  </relinst>

  <relinst type="segment lacks better position evidence" object="true" cf="100" name="TSM-708 Explicit mark that better position evidence is absent">
    <condition expression="countRelationshipInstances(%S,'segment has projection',*) is equal to 0" alt="No projection evidence exists for this segment"/>
  </relinst>

  <!-- Project both segment level determinations onto the Case, because a  -->
  <!-- Case subject rule cannot bind a Segment subject fact directly.      -->
  <relinst type="case has segment suitability established" object="true" cf="100" name="TSM-704 Project COBS 9B.4.20R suitability onto the case">
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition rel="segment suitability established" subject="%SEG" object="true"/>
  </relinst>

  <relinst type="case has better position established" object="true" cf="100" name="TSM-701 Project the better position determination onto the case">
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition rel="segment has better position established" subject="%SEG" object="true"/>
  </relinst>

  <relinst type="case has better position established" object="false" cf="100" name="TSM-708 Project a failed better position determination onto the case">
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition rel="segment has better position established" subject="%SEG" object="false"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 11 - CHARGING, REMUNERATION AND DISCLOSURE                  -->
  <!-- ================================================================ -->

  <relinst type="case has compliance defect" object="Prohibited Third Party Benefit Received" cf="100" name="TSM-804 COBS 9B.8.2R third party benefit outside the permitted exceptions">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm receives benefit" subject="%F" object="%B"/>
    <condition rel="benefit type is permitted" subject="%B" object="false"/>
  </relinst>

  <relinst type="case has compliance defect" object="Charged Without Fair Value Assessment" cf="100" name="TSM-802 PRIN 2A.4.2R fair value where a charge is made">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm charges for targeted support" subject="%F" object="true"/>
    <condition expression="countRelationshipInstances(%F,'firm has fair value assessment','true') is equal to 0" alt="The firm charges for targeted support but has no fair value assessment on file"/>
  </relinst>

  <relinst type="case has compliance defect" object="Charge Not Disclosed In Cash Terms" cf="100" name="TSM-802 COBS 9B.8.9R charge must be disclosed in cash terms">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm charges for targeted support" subject="%F" object="true"/>
    <condition expression="countRelationshipInstances(%F,'firm discloses charge in cash terms','true') is equal to 0" alt="The charge is not disclosed in cash terms as COBS 9B.8.9R requires"/>
  </relinst>

  <relinst type="case has compliance defect" object="Charge Not In Durable Medium" cf="100" name="TSM-802 COBS 9B.8.9R charge disclosure must be in a durable medium">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm charges for targeted support" subject="%F" object="true"/>
    <condition expression="countRelationshipInstances(%F,'firm provides charge in durable medium','true') is equal to 0" alt="The charge disclosure is not provided in a durable medium or through a website as COBS 9B.8.9R requires"/>
  </relinst>

  <relinst type="case has compliance defect" object="Charge Not Agreed Before Service" cf="100" name="TSM-802 COBS 9B.8.9R charge must be agreed with the client before the service">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm charges for targeted support" subject="%F" object="true"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition expression="countRelationshipInstances(%C,'consumer agrees to targeted support charge','true') is equal to 0" alt="The client has not agreed the charge, which COBS 9B.8.9R requires, and the firm applies the agreement before the chargeable service is provided as its policy timing"/>
  </relinst>

  <relinst type="case has compliance defect" object="Remuneration Not Fair Value Consistent" cf="100" name="TSM-803 COBS 9B.8.7R fair value where NO charge is made">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm charges for targeted support" subject="%F" object="false"/>
    <condition expression="countRelationshipInstances(%F,'firm has fair value assessment','true') is equal to 0" alt="The firm does not charge, but COBS 9B.8.7R still requires its remuneration arrangements to be consistent with fair value and no assessment is on file"/>
  </relinst>

  <relinst type="case has compliance defect" object="Differential Cost Not Disclosed" cf="100" name="TSM-809 COBS 9B.8.8R differential product cost must be disclosed">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion references product" subject="%SUG" object="%PROD"/>
    <condition rel="product has differential cost through targeted support" subject="%PROD" object="true"/>
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm discloses differential cost','true') is equal to 0" alt="This product costs a different amount when accessed through targeted support and that difference is not disclosed"/>
  </relinst>

  <relinst type="case has compliance defect" object="Disclosures Not Tested" cf="100" name="TSM-908 COBS 9B.6.9R disclosures must be tested for consumer understanding">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm has tested disclosures','true') is equal to 0" alt="COBS 9B.6.9R requires the firm to test its disclosures and take reasonable steps to ensure consumers understand them, and no testing is recorded"/>
  </relinst>

  <relinst type="case has compliance defect" object="Durable Medium Not Provided At Delivery" cf="100" name="TSM-910 COBS 9B.6.17R durable medium at the point of delivery">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm provides durable medium at delivery','true') is equal to 0" alt="COBS 9B.6.17R requires the required information in a durable medium when the suggestion is delivered, and none is recorded"/>
  </relinst>

  <relinst type="case has compliance defect" object="Liability Disclaimer Present" cf="100" name="TSM-118 COBS 9B.1.3G duties and liability must not be excluded or restricted">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm provides disclosure item" subject="%F" object="%DI"/>
    <condition rel="disclosure item is liability disclaimer" subject="%DI" object="true"/>
  </relinst>

  <relinst type="case has compliance defect" object="Systems And Controls Absent" cf="100" name="TSM-1301 COBS 9B.10.1R systems and controls is a governance breach not a perimeter issue">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm has systems and controls','true') is equal to 0" alt="COBS 9B.10.1R requires systems and controls to ensure compliance with the COBS 9B design and delivery requirements, and none are recorded"/>
  </relinst>

  <relinst type="case has compliance defect" object="Outcome Monitoring Absent" cf="100" name="TSM-1302 COBS 9B.10.4G outcomes of the service must be monitored">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm has outcome monitoring','true') is equal to 0" alt="The firm does not monitor the outcomes of its targeted support service, contrary to COBS 9B.10.4G and the Consumer Duty monitoring obligations under PRIN 2A"/>
  </relinst>

  <relinst type="case has compliance defect" object="Review Frequency Absent" cf="100" name="TSM-1302 COBS 9B.10.9R regular review of the targeted support processes">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm has review frequency months',*) is equal to 0" alt="No review frequency is recorded, so the COBS 9B.10.9R obligation to review the processes and the suggestions regularly and with appropriate frequency cannot be evidenced"/>
  </relinst>

  <relinst type="case has compliance defect" object="Annuity Referral Benefit On Non Annuity Case" cf="100" name="TSM-1306 COBS 9B.8.4R annuity referral benefit accepted outside an annuity case">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm receives benefit" subject="%F" object="%B"/>
    <condition rel="benefit type is annuity referral only" subject="%B" object="true"/>
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition expression="countRelationshipInstances(%SUG,'suggestion concerns annuity','true') is equal to 0" alt="The firm accepts a benefit permitted only for compliant annuity brokerage referrals, but the suggestion on this case does not concern an annuity, so the COBS 9B.8.4R exception does not apply"/>
  </relinst>

  <relinst type="case has compliance defect" object="Special Category Condition Absent" cf="100" name="TSM-1309 UK GDPR Article 9 condition required where health data is processed">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has crm vulnerability flag" subject="%C" object="%IND"/>
    <condition rel="vulnerability indicator belongs to driver" subject="%IND" object="Health"/>
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm has special category condition','true') is equal to 0" alt="The case processes health data through the vulnerability screen and the firm records no UK GDPR Article 9 condition, contrary to the FCA and ICO joint statement"/>
  </relinst>

  <relinst type="case has charging compliant" object="true" cf="100" name="TSM-802 TSM-1210 Explicit clean record for charging and remuneration">
    <condition expression="countRelationshipInstances(%S,'case has compliance defect',*) is equal to 0" alt="No charging, remuneration, disclosure or governance defect was raised against this case"/>
  </relinst>

  <!-- Disclosure completeness. Every item the firm must give at the point  -->
  <!-- of delivery must actually be on the firm disclosure list.            -->
  <relinst type="case has disclosure gap" cf="100" name="TSM-904 Required disclosure item not provided by the firm">
    <condition rel="disclosure item required at stage" subject="%O" object="%STAGE"/>
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm provides disclosure item',%O) is equal to 0" alt="This disclosure item is required at the {{%STAGE}} stage but the firm does not provide it"/>
  </relinst>

  <relinst type="case has disclosure complete" object="true" cf="100" name="TSM-904 TSM-1210 Explicit clean record for the disclosure set">
    <condition expression="countRelationshipInstances(%S,'case has disclosure gap',*) is equal to 0" alt="Every disclosure item required by COBS 9B.6 is provided by the firm"/>
  </relinst>

  <!-- TSM-905 and TSM-906. The article 55A statement, contemporaneous     -->
  <!-- with the recommendation. -->
  <relinst type="case delivers article 55A statement" object="true" cf="100" name="TSM-905 TSM-906 Article 55A(4) and (5) statement delivered with the recommendation">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm provides disclosure item" subject="%F" object="Article 55A Group Basis Statement"/>
    <condition rel="firm provides disclosure item" subject="%F" object="Segment Common Characteristics" weight="1"/>
    <condition rel="firm provides disclosure item" subject="%F" object="Designed For Segment Statement" weight="1"/>
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG" weight="1"/>
    <condition rel="suggestion presents group basis" subject="%SUG" object="true" weight="1"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 12 - SIGNPOSTING PAYLOAD                                    -->
  <!-- Signposts are a SEPARATE plural payload layer, not folded into      -->
  <!-- outcome names, so co occurring findings are never discarded.        -->
  <!-- ================================================================ -->

  <relinst type="case requires signpost" object="Debt Advice" cf="100" name="TSM-1003 Problem debt routed to debt advice firm policy precedence">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Problem Debt Present"/>
  </relinst>

  <relinst type="case requires signpost" object="Regulated Investment Advice" cf="100" name="TSM-1004 Safeguarded benefits routed to regulated advice">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Safeguarded Benefits Held"/>
  </relinst>

  <relinst type="case requires signpost" object="Pension Wise" cf="100" name="TSM-1007 COBS 19.7 pensions nudge continues to apply to a targeted support firm">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Approaching Retirement"/>
  </relinst>

  <relinst type="case requires signpost" object="MoneyHelper Annuity Comparison" cf="100" name="TSM-1006 COBS 9B.4.28R(3) the one hard MoneyHelper rule inside COBS 9B">
    <condition rel="case has candidate suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion concerns annuity" subject="%SUG" object="true"/>
  </relinst>

  <relinst type="case requires signpost" object="Whole Of Market Annuity Brokerage" cf="100" name="TSM-613 COBS 9B.4.33R brokerage referral only after the interaction ends">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion concerns annuity" subject="%SUG" object="true"/>
    <condition rel="suggestion limited to annuity features" subject="%SUG" object="true"/>
    <condition rel="suggestion includes annuity quote" subject="%SUG" object="false"/>
  </relinst>

  <relinst type="case requires signpost" object="Vulnerability Support Team" cf="100" name="TSM-1009 Vulnerability referral routed to specialist support">
    <condition rel="case requires vulnerability referral" subject="%S" object="true"/>
  </relinst>

  <relinst type="case requires signpost" object="MoneyHelper General Guidance" cf="100" name="TSM-1005 COBS 9B.4.19G(4) no alignment so signpost guidance services">
    <condition expression="countRelationshipInstances(%S,'case has confirmed alignment with segment',*) is equal to 0" weight="1" alt="No segment could be confirmed for this consumer"/>
    <condition expression="countRelationshipInstances(%S,'case is in situation',*) is greater than or equal to 1" alt="The consumer is in a situation the firm addresses but could not be aligned to a segment, so other support is signposted"/>
  </relinst>

  <relinst type="case requires signpost" object="Other Support Available" cf="100" name="TSM-1002 COBS 9B.7.3G consider and signpost other support including advice from others">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has declined targeted support" subject="%C" object="true"/>
  </relinst>

  <relinst type="case requires signpost" object="Regulated Investment Advice" cf="100" name="TSM-1002 COBS 9B.7.3G contra indication routed to advice from other providers">
    <condition expression="countRelationshipInstances(%S,'case has contra indication',*) is greater than or equal to 1" alt="A contra indication prevents a suggestion, so COBS 9B.7.3G requires the firm to consider what other support is available including investment advice from other providers"/>
  </relinst>

  <relinst type="case requires next step" object="Explain Advice Distinction To Consumer" cf="100" name="TSM-510 COBS 9B.6.16G explain how targeted support differs from advice">
    <condition rel="case requires advice distinction explanation" subject="%S" object="true"/>
  </relinst>

  <relinst type="case requires next step" object="Verify Information With Consumer" cf="100" name="TSM-303 COBS 9B.5.7R verify possibly out of date information before confirming alignment">
    <condition expression="countRelationshipInstances(%S,'case has stale data for segment',*) is greater than or equal to 1" alt="At least one required data item is stale and unverified, so it must be checked with the client before alignment is confirmed"/>
  </relinst>

  <relinst type="case requires next step" object="Issue Data Request To Consumer" cf="100" name="TSM-302 Request the missing information">
    <condition expression="countRelationshipInstances(%S,'case has data gap for segment',*) is greater than or equal to 1" alt="At least one data item required for alignment is missing or not current"/>
  </relinst>

  <relinst type="case requires next step" object="Escalate Segment Design To Governance" cf="100" name="TSM-403 Route a design defect to governance not to the consumer">
    <condition expression="countRelationshipInstances(%S,'case has defective matching segment',*) is greater than or equal to 1" alt="The consumer matched a segment carrying a design defect, which is a governance issue for the firm rather than a consumer problem"/>
  </relinst>

  <relinst type="case requires next step" object="End Interaction And Note Separate Sales Journey" cf="100" name="TSM-612 COBS 9B.4.32R end the interaction after an annuity suggestion">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion concerns annuity" subject="%SUG" object="true"/>
  </relinst>

  <relinst type="case requires next step" object="Record Deferred Situation For Later Interaction" cf="100" name="TSM-1905 Record deferred situations">
    <condition expression="countRelationshipInstances(%S,'case has deferred situation',*) is greater than or equal to 1" alt="The consumer aligned across more than one situation, so the lower priority situations are recorded for a later interaction"/>
  </relinst>

  <relinst type="case requires next step" object="Deliver Suggestion In Durable Medium" cf="100" name="TSM-910 COBS 9B.6.17R durable medium at delivery">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition rel="case has disclosure complete" subject="%S" object="true"/>
  </relinst>

  <relinst type="case requires next step" object="Refer To Vulnerability Specialist" cf="100" name="TSM-504 Vulnerability referral next step">
    <condition rel="case requires vulnerability referral" subject="%S" object="true"/>
  </relinst>

  <relinst type="case requires next step" object="Route For Human Review" cf="100" name="TSM-1704 Automated decision routed for human review">
    <condition rel="case requires human review" subject="%S" object="true"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 13 - AUTOMATED DECISION RECORDS                             -->
  <!-- The one open question the research flags as material for an         -->
  <!-- automated engine. Whether targeted support is a solely automated    -->
  <!-- decision with legal or similarly significant effect is UNRESOLVED,  -->
  <!-- so the position taken here is firm policy pending ICO guidance.     -->
  <!-- ================================================================ -->

  <relinst type="case has automated decision status" object="Automated With Human Review" cf="100" name="TSM-1701 Automated decision with an identified human involvement point">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm has human review point" subject="%F" object="true"/>
  </relinst>

  <relinst type="case has automated decision status" object="Solely Automated With Significant Effect" cf="100" name="TSM-1701 Solely automated with no human involvement point">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition expression="countRelationshipInstances(%F,'firm has human review point','true') is equal to 0" alt="No meaningful human involvement point is recorded, so the decision is solely automated and the Article 22C safeguards of information, representations, human intervention and contest must be operated"/>
  </relinst>

  <relinst type="case requires human review" object="true" cf="100" name="TSM-1704 Solely automated decisions are routed for human review firm policy">
    <condition rel="case has automated decision status" subject="%S" object="Solely Automated With Significant Effect"/>
  </relinst>

  <relinst type="case has reporting classification" object="Retirement Income Targeted Support" cf="100" name="TSM-138 Retirement income reporting classification">
    <condition rel="case concerns domain" subject="%S" object="Pension"/>
  </relinst>

  <relinst type="case has reporting classification" object="Non Advised Targeted Support" cf="100" name="TSM-138 Non advised product sales data classification">
    <condition rel="case concerns domain" subject="%S" object="Retail Investment"/>
  </relinst>

  <relinst type="case has compliance defect" object="Advice Distinction Not Confirmed" cf="100" name="TSM-510 Advice distinction required but not confirmed by the client">
    <condition rel="case requires advice distinction explanation" subject="%S" object="true"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition expression="countRelationshipInstances(%C,'consumer understands advice distinction','true') is equal to 0" alt="The client is receiving advice elsewhere so COBS 9B.6.16G requires extra steps, and the client has not confirmed they understand the difference between the services"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 14 - CANDIDATE OUTCOMES                                     -->
  <!-- Each stop and withhold state gets its OWN named outcome, so no      -->
  <!-- firm side compliance failure is ever mis reported as a consumer     -->
  <!-- data request.                                                      -->
  <!-- ================================================================ -->

  <relinst type="case has candidate outcome" object="Stop Safeguarded Benefits Refer To Advice" cf="100" name="TSM-105 COBS 9B.2.3R absolute prohibition where safeguarded benefits are held">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Safeguarded Benefits Held"/>
  </relinst>

  <!-- TSM-1907 fail safe. Unknown safeguarded benefit status defaults to   -->
  <!-- the stop, because the Handbook glossary perimeter is unresolved.     -->
  <relinst type="case has candidate outcome" object="Stop Safeguarded Benefits Refer To Advice" cf="85" name="TSM-1907 Safeguarded benefit status unknown so fail safe to the stop">
    <condition rel="case concerns domain" subject="%S" object="Pension"/>
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition expression="countRelationshipInstances(%C,'consumer has benefit structure',*) is equal to 0" alt="No benefit structure record exists for a pension case, so safeguarded benefit status is unknown and the model fails safe to the COBS 9B.2.3R stop rather than proceeding"/>
  </relinst>

  <!-- A design defect always prevents THAT segment being used, because      -->
  <!-- case qualifies for segment requires segment is usable. It blocks the   -->
  <!-- CASE only where no compliant segment could be confirmed instead, so a  -->
  <!-- consumer who properly fits a compliant segment is still served while   -->
  <!-- the defect is still reported to governance and to the file.            -->
  <relinst type="case has candidate outcome" object="Stop Service Not Deliverable Design Defect" cf="100" name="TSM-403 Matched only segments carrying a COBS 9B.4 design defect">
    <condition expression="countRelationshipInstances(%S,'case has defective matching segment',*) is greater than or equal to 1" weight="1" alt="The consumer matched at least one segment that is not design compliant"/>
    <condition expression="countRelationshipInstances(%S,'case has confirmed alignment with segment',*) is equal to 0" alt="No design compliant segment could be confirmed for this consumer either, so the service is not deliverable until governance fixes the registry"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Service Not Deliverable Design Defect" cf="100" name="TSM-406 COBS 9B.4.7R more than one segment qualifies within a situation">
    <condition expression="countRelationshipInstances(%S,'case has multiple alignment defect',*) is greater than or equal to 1" alt="More than one segment qualifies within a single situation, which COBS 9B.4.7R prohibits, so the segment set itself is defective"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Service Not Deliverable Design Defect" cf="100" name="TSM-1301 COBS 9B.10.1R systems and controls absent">
    <condition rel="case has compliance defect" subject="%S" object="Systems And Controls Absent"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Service Not Deliverable Design Defect" cf="100" name="TSM-1302 Governance monitoring or review gap blocks delivery">
    <condition rel="case has compliance defect" subject="%S" object="%DEF"/>
    <condition expression="(%DEF is equal to 'Outcome Monitoring Absent') or (%DEF is equal to 'Review Frequency Absent')" alt="The governance defect {{%DEF}} prevents delivery until the firm remediates its COBS 9B.10 monitoring and review arrangements"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Service Not Deliverable Design Defect" cf="100" name="TSM-1309 Special category data processed without an Article 9 condition">
    <condition rel="case has compliance defect" subject="%S" object="Special Category Condition Absent"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Charging Non Compliant" cf="100" name="TSM-1306 Annuity referral benefit outside the permitted exception">
    <condition rel="case has compliance defect" subject="%S" object="Annuity Referral Benefit On Non Annuity Case"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Signpost Debt Advice" cf="100" name="TSM-1003 Problem debt takes precedence over investment oriented support firm policy">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Problem Debt Present"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Vulnerability Referral" cf="100" name="TSM-504 COBS 9B.7.4G vulnerability may determine whether to provide support at all">
    <condition rel="case requires vulnerability referral" subject="%S" object="true"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Contra Indication Signpost Alternative Support" cf="100" name="TSM-501 COBS 9B.5.11R information indicates the suggestion may be unsuitable">
    <condition expression="countRelationshipInstances(%S,'case has contra indication',*) is greater than or equal to 1" alt="The firm is aware of readily accessible information indicating the aligned suggestion may not be suitable for this client, which COBS 9B.5.11R prohibits acting on"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Charging Non Compliant" cf="100" name="TSM-804 COBS 9B.8 charging or remuneration defect">
    <condition rel="case has compliance defect" subject="%S" object="Prohibited Third Party Benefit Received"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Charging Non Compliant" cf="100" name="TSM-802 Charged delivery missing a required charging control">
    <condition rel="case has compliance defect" subject="%S" object="%DEF"/>
    <condition expression="(%DEF is equal to 'Charged Without Fair Value Assessment') or (%DEF is equal to 'Charge Not Disclosed In Cash Terms') or (%DEF is equal to 'Charge Not In Durable Medium') or (%DEF is equal to 'Charge Not Agreed Before Service') or (%DEF is equal to 'Remuneration Not Fair Value Consistent')" alt="The charging defect {{%DEF}} prevents delivery under COBS 9B.8"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Product Scope Breach" cf="100" name="TSM-604 TSM-606 TSM-610 A product scope, consolidation or annuity block was raised">
    <condition expression="countRelationshipInstances(%S,'case has delivery block',*) is greater than or equal to 1" weight="1" alt="At least one delivery block was raised against the candidate suggestion"/>
    <condition expression="countRelationshipInstances(%S,'case has candidate suggestion',*) is greater than or equal to 1" alt="A suggestion was reached but it breaches the COBS 9B.4 product scope, consolidation or annuity constraints"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Data Insufficient Data Request Issued" cf="100" name="TSM-302 Required alignment information is missing or not current">
    <condition expression="countRelationshipInstances(%S,'case has data gap for segment',*) is greater than or equal to 1" alt="At least one data item COBS 9B.4.17R specifies for a matching segment is missing or out of currency, so alignment cannot be confirmed"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Data Insufficient Data Request Issued" cf="100" name="TSM-303 Stale alignment data awaiting client verification">
    <condition expression="countRelationshipInstances(%S,'case has stale data for segment',*) is greater than or equal to 1" alt="At least one required data item is beyond its currency window and COBS 9B.5.7R requires verification with the client before alignment is confirmed"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Data Insufficient Data Request Issued" cf="100" name="TSM-304 Contradictory alignment data must be resolved first">
    <condition expression="countRelationshipInstances(%S,'case has contradictory data for segment',*) is greater than or equal to 1" alt="Two current records contradict each other on a data item required for alignment, so the conflict must be resolved before a suggestion can be given"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop No Segment Alignment Signpost" cf="100" name="TSM-1001 Data sufficient but no segment could be confirmed">
    <condition expression="countRelationshipInstances(%S,'case is in situation',*) is greater than or equal to 1" weight="1" alt="The consumer is in at least one situation the firm addresses"/>
    <condition expression="countRelationshipInstances(%S,'case has confirmed alignment with segment',*) is equal to 0" weight="1" alt="No segment could be confirmed for this consumer"/>
    <condition expression="countRelationshipInstances(%S,'case has data gap for segment',*) is equal to 0" alt="The failure is not a data gap, so this is a genuine absence of a suitable segment rather than a recoverable information request"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop No Segment Alignment Signpost" cf="90" name="TSM-1001 Consumer is in no situation the firm addresses">
    <condition expression="countRelationshipInstances(%S,'case is in situation',*) is equal to 0" alt="No situation the firm offers support for was identified for this consumer, so targeted support cannot help and other support must be signposted"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Disclosure Set Incomplete" cf="100" name="TSM-904 A required COBS 9B.6 disclosure is not provided">
    <condition expression="countRelationshipInstances(%S,'case has disclosure gap',*) is greater than or equal to 1" alt="At least one disclosure item required by COBS 9B.6 is not provided by the firm"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Disclosure Set Incomplete" cf="100" name="TSM-908 Disclosures not tested for consumer understanding">
    <condition rel="case has compliance defect" subject="%S" object="Disclosures Not Tested"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Disclosure Set Incomplete" cf="100" name="TSM-910 Durable medium not provided at delivery">
    <condition rel="case has compliance defect" subject="%S" object="Durable Medium Not Provided At Delivery"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Disclosure Set Incomplete" cf="100" name="TSM-118 A limitation disclosure must not disclaim liability">
    <condition rel="case has compliance defect" subject="%S" object="Liability Disclaimer Present"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Article 53 Breach Risk Statement Not Delivered" cf="100" name="TSM-111 Article 55A statement absent so the article 53 carve out fails">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG" weight="1"/>
    <condition expression="countRelationshipInstances(%S,'case delivers article 55A statement',*) is equal to 0" alt="A suggestion would be delivered but the article 55A(4) statement is not delivered with it, so the article 55A(2) carve out fails and the firm would be advising under article 53 without permission"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Withhold Suggestion Segment Suitability Not Established" cf="100" name="TSM-704 COBS 9B.4.20R segment level suitability not affirmatively established">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG" weight="1"/>
    <condition expression="countRelationshipInstances(%S,'case has segment suitability established',*) is equal to 0" alt="The binding COBS 9B.4.20R determination that the suggestion is suitable for an individual in the segment is not affirmatively established, so it must be withheld"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Withhold Suggestion Better Position Not Established" cf="100" name="TSM-701 TSM-708 Better position not established on the firm evidence method">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG" weight="1"/>
    <condition rel="case has better position established" subject="%S" object="false"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Withhold Suggestion Better Position Not Established" cf="100" name="TSM-708 No better position determination could be made at all">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG" weight="1"/>
    <condition expression="countRelationshipInstances(%S,'case has better position established',*) is equal to 0" alt="No better position determination exists for the selected segment, so the suggestion is withheld rather than delivered on an unevidenced basis"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Stop Disclosure Set Incomplete" cf="100" name="TSM-510 Advice distinction not confirmed with the client">
    <condition rel="case has compliance defect" subject="%S" object="Advice Distinction Not Confirmed"/>
  </relinst>

  <!-- TSM-1104. The delivery conjunction. Every gate is an EXPLICIT        -->
  <!-- POSITIVE determination, so unknown can never deliver.               -->
  <relinst type="case has candidate outcome" object="Deliver Targeted Support Suggestion" cf="100" name="TSM-1104 TSM-1103 Full delivery conjunction on positive determinations only">
    <condition rel="case is within perimeter" subject="%S" object="true"/>
    <condition rel="case is within cobs 9b scope" subject="%S" object="true"/>
    <condition rel="case has lawful initiation" subject="%S" object="true"/>
    <condition rel="case has marketing permission" subject="%S" object="true"/>
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition rel="case has segment suitability established" subject="%S" object="true"/>
    <condition rel="case has better position established" subject="%S" object="true"/>
    <condition rel="case has charging compliant" subject="%S" object="true"/>
    <condition rel="case has disclosure complete" subject="%S" object="true"/>
    <condition rel="case delivers article 55A statement" subject="%S" object="true"/>
  </relinst>

  <relinst type="case has candidate outcome" object="Deliver Targeted Support Suggestion With Adjusted Delivery" cf="100" name="TSM-505 Delivery with adjusted delivery for a vulnerability indicator">
    <condition rel="case has candidate outcome" subject="%S" object="Deliver Targeted Support Suggestion" weight="1"/>
    <condition rel="case requires adjusted delivery" subject="%S" object="true"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 15 - THE PRECEDENCE LADDER                                  -->
  <!-- Precedence lives in FACTS, not in twenty one hand written rungs.    -->
  <!-- Lowest precedence number wins. Because case has final outcome is    -->
  <!-- singular and the engine resolves conflicting writes by highest      -->
  <!-- certainty rather than by rung order, exclusivity is achieved by     -->
  <!-- selecting exactly one winner arithmetically instead of relying on    -->
  <!-- a chain of count gates.                                            -->
  <!-- ================================================================ -->

  <relinst type="outcome has precedence" subject="Out Of Perimeter" object="1"/>
  <relinst type="outcome has precedence" subject="Out Of COBS 9B Scope Apply Advising Rules" object="2"/>
  <relinst type="outcome has precedence" subject="Stop Client Declined Service" object="3"/>
  <relinst type="outcome has precedence" subject="Stop Safeguarded Benefits Refer To Advice" object="4"/>
  <relinst type="outcome has precedence" subject="Stop Article 53 Breach Risk Statement Not Delivered" object="5"/>
  <relinst type="outcome has precedence" subject="Stop Unlawful Initiation" object="6"/>
  <relinst type="outcome has precedence" subject="Stop Marketing Permission Absent" object="7"/>
  <!-- CONSUMER PROTECTIVE STOPS OUTRANK FIRM SIDE GOVERNANCE DEFECTS.      -->
  <!-- Found by live testing: a consumer with problem debt who also happened -->
  <!-- to match a defective segment was being reported as a registry defect  -->
  <!-- instead of being routed to debt advice. The consumer must be routed   -->
  <!-- correctly regardless of the firm registry hygiene, and the design     -->
  <!-- defect is still recorded in the file and in the governance next step. -->
  <relinst type="outcome has precedence" subject="Stop Signpost Debt Advice" object="8"/>
  <relinst type="outcome has precedence" subject="Stop Vulnerability Referral" object="9"/>
  <relinst type="outcome has precedence" subject="Stop Contra Indication Signpost Alternative Support" object="10"/>
  <!-- Data insufficiency outranks the firm side governance defects because   -->
  <!-- it is CONSUMER SPECIFIC and RECOVERABLE. Found by live probe: a       -->
  <!-- consumer with contradictory records who incidentally matched a         -->
  <!-- defective segment was told the registry was broken instead of being    -->
  <!-- asked to resolve the conflict in his own data.                        -->
  <relinst type="outcome has precedence" subject="Stop Data Insufficient Data Request Issued" object="11"/>
  <relinst type="outcome has precedence" subject="Stop Service Not Deliverable Design Defect" object="12"/>
  <relinst type="outcome has precedence" subject="Stop Charging Non Compliant" object="13"/>
  <relinst type="outcome has precedence" subject="Stop Product Scope Breach" object="14"/>
  <relinst type="outcome has precedence" subject="Stop No Segment Alignment Signpost" object="15"/>
  <relinst type="outcome has precedence" subject="Stop Disclosure Set Incomplete" object="16"/>
  <relinst type="outcome has precedence" subject="Withhold Suggestion Segment Suitability Not Established" object="17"/>
  <relinst type="outcome has precedence" subject="Withhold Suggestion Better Position Not Established" object="18"/>
  <relinst type="outcome has precedence" subject="Deliver Targeted Support Suggestion With Adjusted Delivery" object="19"/>
  <relinst type="outcome has precedence" subject="Deliver Targeted Support Suggestion" object="20"/>
  <relinst type="outcome has precedence" subject="Request Further Data" object="21"/>

  <relinst type="case has candidate precedence" cf="100" name="TSM-1102 Project the precedence of each candidate outcome onto the case">
    <condition rel="case has candidate outcome" subject="%S" object="%OUT"/>
    <condition rel="outcome has precedence" subject="%OUT" object="%O"/>
  </relinst>

  <relinst type="case has top precedence" cf="100" name="TSM-1101 The highest precedence reached is the lowest precedence number">
    <condition expression="countRelationshipInstances(%S,'case has candidate precedence',*) is greater than or equal to 1" weight="1" alt="At least one candidate outcome was derived for this case"/>
    <condition expression="minObjects(%S,'case has candidate precedence',*)" value="%O" alt="The highest precedence candidate outcome for this case scores {{%O}}"/>
  </relinst>

  <relinst type="case has final outcome" cf="100" name="TSM-1101 Exactly one final outcome, the highest precedence candidate">
    <condition rel="case has candidate outcome" subject="%S" object="%O"/>
    <condition rel="outcome has precedence" subject="%O" object="%PREC"/>
    <condition rel="case has top precedence" subject="%S" object="%TOP" weight="1"/>
    <condition expression="%PREC is equal to %TOP" alt="This outcome precedence of {{%PREC}} is the highest reached for the case, so it is the single final outcome"/>
  </relinst>

  <relinst type="case has final outcome" object="Request Further Data" cf="60" name="TSM-1101 Terminal default so the ladder is total">
    <condition expression="countRelationshipInstances(%S,'case has candidate outcome',*) is equal to 0" alt="No candidate outcome could be derived from the available information, so the case defaults to a further information request"/>
  </relinst>

  <!-- ================================================================ -->
  <!-- LAYER 16 - SUPERVISORY FILE, MI AND EVIDENCE                      -->
  <!-- Every outcome carries the rationale a firm would file for FCA       -->
  <!-- supervision. Records are delimited positional so a consumer can     -->
  <!-- split on semicolon. MIRROR REASON GUARD: every rationale rule       -->
  <!-- copies the guards of the outcome it narrates.                      -->
  <!-- ================================================================ -->

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1801 Version stamp so a historical decision is replayable">
    <condition rel="case applies policy" subject="%S" object="%P"/>
    <condition rel="policy has version tag" subject="%P" object="%PV"/>
    <condition rel="case has model version" subject="%S" object="%MV"/>
    <condition rel="case has assessment date" subject="%S" object="%AD"/>
    <condition expression="'VERSION;COBS 9B.10.12G;Policy parameter version ' + %PV + ' and model version ' + %MV + ' applied on ' + %AD + '. Every threshold in this determination is firm policy and is versioned here so the decision can be replayed.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1202 Segment design record for the aligned segment">
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition rel="segment addresses situation" subject="%SEG" object="%SIT"/>
    <condition expression="countRelationshipInstances(%SEG,'segment requires characteristic',*)" value="%INC" weight="1" alt="The segment defines {{%INC}} including characteristics"/>
    <condition expression="countRelationshipInstances(%SEG,'segment excludes characteristic',*)" value="%EXC" weight="1" alt="The segment defines {{%EXC}} excluding characteristics"/>
    <condition rel="segment has prevalence rationale" subject="%SEG" object="%PR" weight="1"/>
    <condition rel="segment has documented vulnerability rationale" subject="%SEG" object="%VR" weight="1"/>
    <condition expression="'SEGMENT-DESIGN;COBS 9B.4.4R 4.9R 4.16R 4.17R with 4.11R evidence;Segment ' + %SEG + ' addresses the situation ' + %SIT + ' with ' + %INC + ' including and ' + %EXC + ' excluding common characteristics, within the granularity floor and ceiling recorded for that situation. Prevalence rationale recorded ' + %PR + ', vulnerability design rationale recorded ' + %VR + '.;Clean'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1305 Equality justification record for the selected segment">
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition rel="segment requires characteristic" subject="%SEG" object="%CH"/>
    <condition rel="characteristic engages protected characteristic" subject="%CH" object="true"/>
    <condition rel="characteristic has equality justification" subject="%CH" object="%EJ"/>
    <condition expression="'EQUALITY;Equality Act 2010 considerations in PS25/22;The segment characteristic ' + %CH + ' engages a protected characteristic. Justification recorded: ' + %EJ + '.;Clean'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1303 Governance posture record">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm has outcome monitoring" subject="%F" object="%OM" weight="1"/>
    <condition rel="firm has review frequency months" subject="%F" object="%RF" weight="1"/>
    <condition rel="firm has accountable senior manager" subject="%F" object="%SM" weight="1"/>
    <condition rel="firm has root cause process" subject="%F" object="%RC" weight="1"/>
    <condition rel="firm has governing body report" subject="%F" object="%GB" weight="1"/>
    <condition expression="'GOVERNANCE;COBS 9B.10.4G and 9B.10.9R with SYSC and the senior managers regime;Outcome monitoring ' + %OM + ', review frequency in months ' + %RF + ', accountable senior manager ' + %SM + ', root cause process ' + %RC + ', governing body reporting ' + %GB + '.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1304 Data protection posture record">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm has lawful basis" subject="%F" object="%LB"/>
    <condition rel="firm has special category condition" subject="%F" object="%SC" weight="1"/>
    <condition rel="firm separates marketing and service records" subject="%F" object="%SEP" weight="1"/>
    <condition rel="firm provides data subject explanation" subject="%F" object="%EXP" weight="1"/>
    <condition expression="'DATA-PROTECTION;UK GDPR Articles 6 and 9 with the FCA and ICO joint statement of 11 December 2025;Lawful basis ' + %LB + '. Article 9 special category condition in place ' + %SC + '. Marketing and service records separated ' + %SEP + '. Explanation of profiling available to the data subject ' + %EXP + '. The right to object to direct marketing is absolute.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-139 Complaints and Financial Ombudsman record">
    <condition rel="case has final outcome" subject="%S" object="%FINAL"/>
    <condition expression="'COMPLAINTS;DISP 1 with the FCA and Financial Ombudsman Service joint statement of 11 December 2025;Targeted support is within DISP and the Financial Ombudsman compulsory jurisdiction. Any Ombudsman suitability assessment would be based on the design of consumer segments rather than at an individual level. Outcome available to a complaint file: ' + %FINAL + '.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1308 Product governance posture record">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition rel="case is delivered by firm" subject="%S" object="%F" weight="1"/>
    <condition expression="'PRODUCT-GOVERNANCE;PRIN and PROD as amended by FCA 2026 5;The firm ' + %F + ' is the manufacturer and distributor of the targeted support service and manufacturer or distributor of any product in the suggestion ' + %SUG + '. The PRIN and PROD distributor obligations apply. There is no dedicated PROD chapter for targeted support.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-311 Life expectancy assumption disclosed for the selected suggestion">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion relies on life expectancy assumption" subject="%SUG" object="true"/>
    <condition expression="'ASSUMPTION;COBS 9B.4.11R with the Assumptions Used disclosure;The suggestion ' + %SUG + ' relies on population life expectancy data, a permitted assumption referable to industry practice evidence and immaterial to suitability at segment level. It is disclosed under Assumptions Used.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1204 Alignment record naming the confirmed segment">
    <condition rel="case has confirmed alignment with segment" subject="%S" object="%SEG"/>
    <condition expression="'ALIGNMENT;COBS 9B.5.5R with 9B.5.7R;The client was confirmed to be in the situation, to hold ALL including characteristics of segment ' + %SEG + ', and to hold NONE of its excluding characteristics, each positively resolved rather than merely unrecorded. Alignment information was present and within its currency window.;Clean'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1204 Alignment gap record where alignment failed">
    <condition rel="case has alignment gap record" subject="%S" object="%GAP"/>
    <condition expression="'ALIGNMENT-GAP;COBS 9B.5.5R;' + %GAP + ';Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1203 TSM-1206 Suitability and better position basis for the delivered suggestion">
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition rel="segment has better position definition" subject="%SEG" object="%BPD"/>
    <condition rel="better position definition has metric" subject="%BPD" object="%METRIC"/>
    <condition rel="segment has projection" subject="%SEG" object="%P"/>
    <condition rel="projection has net improvement" subject="%P" object="%NET"/>
    <condition rel="projection has improvement percent" subject="%P" object="%PCT"/>
    <condition rel="projection has horizon years" subject="%P" object="%HZ"/>
    <condition rel="case has assessment date" subject="%S" object="%AD"/>
    <condition expression="'BETTER-POSITION;COBS 9B.1.1G and 9B.1.2G guidance with COBS 9B.4.20R rule;Assessed ex ante at segment level on the notional individual against a NO SUPPORT counterfactual, measured as ' + %METRIC + '. Net improvement ' + %NET + ' pounds, ' + %PCT + ' percent, over a ' + %HZ + ' year horizon. Determined on ' + %AD + ' and not judged with hindsight. The FCA prescribed no evidence methodology, so this quantification is firm policy method.;Clean'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1208 Contra indication finding and the action taken">
    <condition rel="case has contra indication" subject="%S" object="%CI"/>
    <condition expression="'CONTRA-INDICATION;COBS 9B.5.11R;The firm holds readily accessible information that the client ' + %CI + ', which indicates the aligned suggestion may not be suitable. The suggestion was WITHHELD and alternative support signposted.;Discrepant'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1209 Vulnerability assessment against the FG21/1 drivers">
    <condition rel="case has vulnerability driver" subject="%S" object="%DRIVER"/>
    <condition expression="'VULNERABILITY;FG21/1 with COBS 9B.3.8G and 9B.7.4G;A vulnerability indicator was identified under the ' + %DRIVER + ' driver. FG21/1 is relevant to how the client is treated including whether to provide targeted support at all.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1207 Charging and remuneration basis">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm has charge basis" subject="%F" object="%CB"/>
    <condition expression="'CHARGING;COBS 9B.8.7R and 9B.8.8R;Charge basis ' + %CB + '. Third party commissions are prohibited save for client payments, cost representative affiliate payments, minor non monetary benefits and a compliant annuity brokerage referral. There is no obligation to disclose the remuneration basis or any cross subsidy amount.;Clean'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1205 Disclosure and article 55A statement record">
    <condition rel="case delivers article 55A statement" subject="%S" object="true"/>
    <condition expression="'DISCLOSURE;RAO article 55A(4) and (5) with COBS 9B.6.5R and 6.19G;The statement that the recommendation is not based on a comprehensive consideration of the client characteristics, is not specific to the client, and specifies the group characteristics used as its basis, was delivered AT THE SAME TIME as the recommendation.;Clean'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1701 TSM-1703 Automated decision making record">
    <condition rel="case has automated decision status" subject="%S" object="%ADS"/>
    <condition expression="'AUTOMATED-DECISION;UK GDPR Articles 22A to 22C as inserted by the Data Use and Access Act 2025, with the FCA and ICO joint statement of 11 December 2025;Status ' + %ADS + '. Profiling was used to align the consumer to a segment. Whether a targeted support suggestion is a significant decision under Article 22A is UNRESOLVED and the ICO guidance on automated decision making remains in draft, so this position is firm policy. The Article 22C safeguards of information, representations, human intervention and contest are operated.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1802 Record every gate that triggered not only the reported outcome">
    <condition rel="case has candidate outcome" subject="%S" object="%OUT"/>
    <condition rel="case has final outcome" subject="%S" object="%FINAL"/>
    <condition expression="'GATE-TRIGGERED;COBS 9B.10.12G;The gate producing ' + %OUT + ' was triggered for this case. The reported outcome is ' + %FINAL + '. Precedence selects what is REPORTED; this record shows what was FOUND.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has supervisory file entry" cf="100" name="TSM-1211 Record retention and the MiFID personal recommendation characterisation">
    <condition rel="case has final outcome" subject="%S" object="%FINAL"/>
    <condition expression="'RETENTION;COBS 9B.6.19G and 9B.10.12G with SYSC 3 and SYSC 9;A targeted support recommendation is expressly NOT a personal recommendation, per COBS 9B.2.6G(3) and article 55A(2), so no MiFID suitability report attaches. COBS 9B specifies no bespoke retention period, so the SYSC 9 five year retention for MiFID business is applied as firm policy, records of the disclosures and article 55A statements are kept per 9B.6.19G, and telephone or face to face delivery additionally engages COBS 11.8 and SYSC 10A recording. Outcome recorded: ' + %FINAL + '.;Information'" value="%O"/>
  </relinst>

  <relinst type="case has mi field" cf="100" name="TSM-137 Aggregable MI field for the FCA periodic data request">
    <condition rel="case has final outcome" subject="%S" object="%FINAL"/>
    <condition rel="case has reporting classification" subject="%S" object="%RC"/>
    <condition expression="'OUTCOME=' + %FINAL + '|CLASSIFICATION=' + %RC" value="%O"/>
  </relinst>

  <relinst type="case has mi field" cf="100" name="TSM-137 MI field naming the suggestion actually delivered">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition expression="'SUGGESTION_DELIVERED=' + %SUG" value="%O"/>
  </relinst>

  <relinst type="case has mi field" cf="100" name="TSM-137 MI field recording an opt out">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has declined targeted support" subject="%C" object="true"/>
    <condition expression="'OPT_OUT=true'" value="%O"/>
  </relinst>

  <relinst type="case has mi field" cf="100" name="TSM-137 MI field recording the access method suggested">
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition rel="suggestion suggests access method" subject="%SUG" object="%AM"/>
    <condition expression="'ACCESS_METHOD=' + %AM" value="%O"/>
  </relinst>

  <relinst type="case has mi field" cf="100" name="TSM-137 MI field recording each referral to guidance or advice">
    <condition rel="case requires signpost" subject="%S" object="%SP"/>
    <condition expression="'REFERRAL=' + %SP" value="%O"/>
  </relinst>

  <relinst type="case has mi field" cf="100" name="TSM-137 MI field recording the fair value assessment status">
    <condition rel="case is delivered by firm" subject="%S" object="%F"/>
    <condition rel="firm has fair value assessment" subject="%F" object="%FV"/>
    <condition expression="'FAIR_VALUE_ASSESSMENT=' + %FV" value="%O"/>
  </relinst>

  <!-- Contributing evidence. Mirror reason guard applied: each evidence   -->
  <!-- line copies the guards of the finding it narrates.                  -->
  <relinst type="case has contributing evidence" cf="100" name="Evidence Excess cash above the emergency buffer">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Excess Cash Above Emergency Buffer"/>
    <condition rel="consumer has cash balance" subject="%C" object="%CASH"/>
    <condition rel="consumer has emergency buffer amount" subject="%C" object="%BUF"/>
    <condition rel="consumer has excess cash amount" subject="%C" object="%EX"/>
    <condition expression="'Excess cash: ' + %CASH + ' pounds held against an emergency buffer of ' + %BUF + ' pounds leaves ' + %EX + ' pounds investable'" value="%O"/>
  </relinst>

  <relinst type="case has contributing evidence" cf="100" name="Evidence Single holding concentration above the firm limit">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Single Holding Concentration Above Limit"/>
    <condition rel="consumer has largest single holding value" subject="%C" object="%MAX"/>
    <condition rel="consumer has portfolio value" subject="%C" object="%PV"/>
    <condition rel="consumer has concentration percent" subject="%C" object="%PCT"/>
    <condition expression="round(%PCT,1)" value="%RP" weight="1" alt="The concentration is {{%RP}} percent"/>
    <condition rel="policy has concentration limit percent" subject="Kesterly Targeted Support Policy" object="%LIMIT" weight="1"/>
    <condition expression="'Concentration: largest non diversified holding of ' + %MAX + ' pounds is ' + %RP + ' percent of a ' + %PV + ' pound portfolio, above the firm limit of ' + %LIMIT + ' percent'" value="%O"/>
  </relinst>

  <relinst type="case has contributing evidence" cf="100" name="Evidence Withdrawal rate above the sustainable rate">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Withdrawal Rate Above Sustainable"/>
    <condition rel="consumer has annual withdrawal amount" subject="%C" object="%WD"/>
    <condition rel="consumer has drawdown fund value" subject="%C" object="%FUND"/>
    <condition rel="consumer has withdrawal rate percent" subject="%C" object="%WRP"/>
    <condition expression="round(%WRP,2)" value="%RW" weight="1" alt="The withdrawal rate is {{%RW}} percent"/>
    <condition rel="policy has sustainable withdrawal percent" subject="Kesterly Targeted Support Policy" object="%SUST" weight="1"/>
    <condition expression="'Withdrawal rate: ' + %WD + ' pounds a year from a ' + %FUND + ' pound fund is ' + %RW + ' percent, above the firm sustainable rate of ' + %SUST + ' percent which is an industry not an FCA figure'" value="%O"/>
  </relinst>

  <relinst type="case has contributing evidence" cf="100" name="Evidence Contribution below the adequacy target">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Contribution Below Adequacy Target"/>
    <condition rel="consumer has contribution rate percent" subject="%C" object="%RATE"/>
    <condition rel="consumer has pensionable salary" subject="%C" object="%SAL"/>
    <condition rel="policy has contribution adequacy target percent" subject="Kesterly Targeted Support Policy" object="%TARGET" weight="1"/>
    <condition expression="'Under saving: total contributions of ' + %RATE + ' percent of a ' + %SAL + ' pound pensionable salary are below the firm adequacy target of ' + %TARGET + ' percent, measured against the consumer own salary and not a household figure'" value="%O"/>
  </relinst>

  <relinst type="case has contributing evidence" cf="100" name="Evidence Multiple small pots held">
    <condition rel="case concerns consumer" subject="%S" object="%C"/>
    <condition rel="consumer has characteristic" subject="%C" object="Holds Multiple Small Pots"/>
    <condition rel="consumer has small pot count" subject="%C" object="%SPC"/>
    <condition rel="consumer has total pension provision" subject="%C" object="%TPP"/>
    <condition expression="'Small pots: ' + %SPC + ' pots below the firm small pot ceiling within total pension provision of ' + %TPP + ' pounds. Consolidation may NOT be suggested, so support is limited to non consolidation action'" value="%O"/>
  </relinst>

  <relinst type="case has contributing evidence" cf="100" name="Evidence No indicator or defect found on a clean delivery">
    <condition rel="case has final outcome" subject="%S" object="Deliver Targeted Support Suggestion"/>
    <condition rel="case has selected suggestion" subject="%S" object="%SUG"/>
    <condition rel="case has selected segment" subject="%S" object="%SEG"/>
    <condition expression="'Clean delivery: suggestion ' + %SUG + ' delivered on the basis of confirmed alignment to segment ' + %SEG + ' with no excluding characteristic, no contra indication, no delivery block and no charging or disclosure defect'" value="%O"/>
  </relinst>

</rbl:kb>
