Skip to main content

Data Import REST API Changelog

This page shows recent changes to Data Import REST API.

Reset

31 July 2026 - Latest

New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before or equal to <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is strictly later than \u2068valid_from\u2069.",
        "possible_errors": [
            "start_date_same_as_end_date"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before or equal to <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is strictly later than \u2068valid_from\u2069.",
        "possible_errors": [
            "start_date_same_as_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    },
    {
        "name": "Validate that all required bespoke rates are present and no non-overridable rates are supplied",
        "description": "Validates that bespoke rate schedules include all rate specifications marked as must-be-overridden and mandatory, and do not include any rate specifications marked as cannot-be-overridden.",
        "possible_errors": [
            "bespoke_rate_cannot_be_overridden",
            "missing_required_bespoke_rate"
        ]
    }
]
Old
{
    "x-validators": [
        {
            "name": "Validate product code exists",
            "description": "Validate that the product code exists in Kraken.",
            "possible_errors": [
                "product_code_does_not_exist"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate bespoke rate items are unique",
            "description": "Validate that no two bespoke rate items in a schedule share the same rate specification code, rate specification type, and variant profile.",
            "possible_errors": [
                "duplicate_bespoke_rate_items"
            ]
        }
    ]
}
New
{
    "x-validators": [
        {
            "name": "Validate bespoke rates do not conflict",
            "description": "Validate bespoke rates for the same target and rate do not conflict during the same period. The target of a bespoke rate is determined by the supply point identifier and product code.",
            "possible_errors": [
                "overlapping_bespoke_rate_schedules"
            ]
        },
        {
            "name": "Validate bespoke rate schedules target consistently",
            "description": "Validate that bespoke rate schedules either all target supply points via the supply_point_identifier field or none do.",
            "possible_errors": [
                "inconsistent_bespoke_rate_schedule_targeting"
            ]
        },
        {
            "name": "Validate bespoke rate schedules are valid",
            "description": "Validate that each schedule references an existing product, contains unique items, represents rates defined by the product specification, and satisfies the product's rate override strategies.",
            "possible_errors": [
                "bespoke_rate_cannot_be_overridden",
                "characteristic_code_not_found",
                "duplicate_bespoke_rate_items",
                "invalid_characteristic_value",
                "invalid_profile_variant_for_specification",
                "missing_required_bespoke_rate",
                "product_code_does_not_exist",
                "product_specification_not_found_for_product",
                "rate_specification_not_found_for_product",
                "shared_rate_not_found",
                "shared_rate_not_found_for_product"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate bespoke rates do not conflict",
            "description": "Validate bespoke rates for the same target and rate do not conflict during the same period. The target of a bespoke rate is determined by the supply point identifier and product code.",
            "possible_errors": [
                "overlapping_bespoke_rate_schedules"
            ]
        },
        {
            "name": "Validate bespoke rate schedules target consistently",
            "description": "Validate that bespoke rate schedules either all target supply points via the supply_point_identifier field or none do.",
            "possible_errors": [
                "inconsistent_bespoke_rate_schedule_targeting"
            ]
        }
    ]
}

28 July 2026

New
{
    "TRANCHE_TARGET_CONFIGURATION": "#/components/schemas/TrancheTargetConfiguration"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetConfiguration"
    },
    {
        "$ref": "#/components/schemas/AusEEPAExportContractedVolumeConfiguration"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    },
    {
        "$ref": "#/components/schemas/AusEEPAExportContractedVolumeConfiguration"
    }
]

26 July 2026

New
{
    "x-enum-descriptions": {
        "privacy_incident": "Privacy Incident"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Privacy Incident": "Privacy Incident"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 July 2026

New
{
    "x-enum-descriptions": {
        "centrepay_handback_initiated": "Centrepay Handback Initiated"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Centrepay Handback Initiated": "Centrepay Handback Initiated"
    }
}
Old
{
    "x-enum-descriptions": {}
}

23 July 2026

New
{
    "EEPA_EXPORT_CONTRACTED_VOLUME": "#/components/schemas/AusEEPAExportContractedVolumeConfiguration"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    },
    {
        "$ref": "#/components/schemas/AusEEPAExportContractedVolumeConfiguration"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
New
{
    "x-enum-descriptions": {
        "vic_group_homes_26_27": "Vic Group Homes FY26-27",
        "potential_privacy_incident": "Potential Privacy Incident"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Vic Group Homes FY26-27": "Vic Group Homes FY26-27",
        "Potential Privacy Incident": "Potential Privacy Incident"
    }
}
Old
{
    "x-enum-descriptions": {}
}

22 July 2026

New
{
    "x-validators": [
        {
            "name": "Validate that each child has a unique combination of values for the <code>\u2068payment_date, payment_type\u2069</code> fields",
            "description": "Validate that each child has a unique combination of values for the <code>\u2068payment_date, payment_type\u2069</code> fields.",
            "possible_errors": [
                "children_with_duplicate_values"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate that each child has unique values for the <code>\u2068payment_date\u2069</code> field",
            "description": "Validate that each child has unique values for the <code>\u2068payment_date\u2069</code> field.",
            "possible_errors": [
                "children_with_duplicate_values"
            ]
        }
    ]
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "ehh_ineligible_email": "EHH - Ineligible No Email"
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "EHH - Ineligible No Email": "EHH - Ineligible No Email"
    }
}

21 July 2026

New
{
    "x-enum-descriptions": {
        "energy_happy_day": "Energy Happy Day",
        "ehh_energy_happy_day": "EHH + Energy Happy Day",
        "loyalty_ineligibile_no_email": "Loyalty Reward Ineligible - No Email"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Energy Happy Day": "Energy Happy Day",
        "EHH + Energy Happy Day": "EHH + Energy Happy Day",
        "Loyalty Reward Ineligible - No Email": "Loyalty Reward Ineligible - No Email"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "centrepay_handback_rejected": "Centrepay Handback Rejected"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Centrepay Handback Rejected": "Centrepay Handback Rejected"
    }
}
Old
{
    "x-enum-descriptions": {}
}

17 July 2026

No attributes to display
No attributes to display
No attributes to display
No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "NEE19": "NEE19"
    }
}
Old
{
    "x-enum-descriptions": {}
}

16 July 2026

No attributes to display
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Derive occupier billing address from supply address",
        "description": "When an occupier account has no explicit billing address and exactly one supply address is provided, copy the supply address into the billing address fields.",
        "possible_errors": []
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate agreement business contract identifier is declared",
        "description": "Validates that an agreement's <code>business_contract_identifier</code>, if provided, is one of the account's declared <code>business_contract_identifiers</code>.",
        "possible_errors": [
            "agreement_business_contract_identifier_not_declared"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Derive occupier billing address from supply address",
        "description": "When an occupier account has no explicit billing address and exactly one supply address is provided, copy the supply address into the billing address fields.",
        "possible_errors": []
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate agreement business contract identifier is declared",
        "description": "Validates that an agreement's <code>business_contract_identifier</code>, if provided, is one of the account's declared <code>business_contract_identifiers</code>.",
        "possible_errors": [
            "agreement_business_contract_identifier_not_declared"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
{
    "x-validators": [
        {
            "name": "Validate alternative phone number is not in kraken",
            "description": "Validate the alternative phone number provided does not exist in the database.",
            "possible_errors": [
                "alternative_phone_numbers_already_exists"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate alternative phone number is not in kraken",
            "description": "Validate the alternative phone number provided does not exist in the database.",
            "possible_errors": [
                "alternative_phone_numbers_already_exists"
            ]
        }
    ]
}

15 July 2026

New
{
    "x-enum-descriptions": {
        "FLAT": "contracts--terms--termination-fee-fee-type-flat"
    }
}
Old
{
    "x-enum-descriptions": {
        "FLAT": "Flat"
    }
}
New
[
    {
        "name": "Validate <code>\u2068end_date\u2069</code> not before <code>\u2068start_date\u2069</code>",
        "description": "Validates that <code>\u2068end_date\u2069</code>, if given, is on or later than <code>\u2068start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate fixed payment schedule has amount",
        "description": "Validates that a fixed payment schedule has an non zero amount provided in the payload. A fixed schedule is defined as a payment schedule with a trigger that is not type BILL.",
        "possible_errors": [
            "zero_payment_schedule_amount"
        ]
    },
    {
        "name": "Validate regular payment schedule frequency provided",
        "description": "Validates that a fixed regular payment schedule has a frequency provided in the payload.",
        "possible_errors": [
            "fixed_payment_schedule_missing_frequency"
        ]
    },
    {
        "name": "Validate payment schedule balance threshold provided",
        "description": "Validates that a payment schedule with a balance trigger has a balance threshold provided in the payload. This balance threshold is the amount the ledger balance must drop below to trigger a payment.",
        "possible_errors": [
            "balance_triggered_schedule_missing_threshold"
        ]
    },
    {
        "name": "Validate debt repayment end date provided",
        "description": "Validates that a debt repayment end date is provided in the payload if a debt repayment element is provided.",
        "possible_errors": [
            "debt_repayment_missing_end_date"
        ]
    },
    {
        "name": "Validate debt repayment end date is not later than schedule end date",
        "description": "Validates that a debt repayment end date is not later than  the payment schedule end date if both are provided.",
        "possible_errors": [
            "debt_repayment_end_date_after_schedule_end_date"
        ]
    },
    {
        "name": "Validate exempt from payment adequacy is applied only to regular schedule",
        "description": "Validates that only a regular payment schedule is marked as exempted from payment adequacy, so as to create a fixed regular payment schedule.",
        "possible_errors": [
            "invalid_payment_schedule_to_exempt_from_payment_adequacy"
        ]
    },
    {
        "name": "Validate fixed payment schedule has payment day",
        "description": "Validates that a fixed payment schedule has a day of month in the payload. A fixed schedule is defined as a payment schedule with a trigger of type REGULAR.",
        "possible_errors": [
            "fixed_payment_schedule_missing_day_of_month"
        ]
    },
    {
        "name": "Validate instalments is provided if trigger is PLAN",
        "description": "Validate that the instalment field is not empty if payment schedule trigger is PLAN.",
        "possible_errors": [
            "payment_instalments_not_provided"
        ]
    },
    {
        "name": "Validate instalment payment amounts sum to total amount",
        "description": "Validate instalment payment amounts sum to total amount given.",
        "possible_errors": [
            "payment_instalments_do_not_sum_to_total"
        ]
    },
    {
        "name": "Validate instalment payment date is within payment schedule active period",
        "description": "Validate instalment payment date is within the period between start date and end date provided.",
        "possible_errors": [
            "payment_instalments_date_outside_of_payment_schedule_active_period"
        ]
    },
    {
        "name": "Validate that the delayer days is set if delayer strategy is set",
        "description": "Validate that the delayer days is set if delayer strategy is set",
        "possible_errors": [
            "payment_schedule_delay_must_have_bill_trigger",
            "payment_schedule_delay_strategy_missing_delay_days"
        ]
    },
    {
        "name": "Validate that the payment amount for fixed payment schedules is within the minor currency unit range of \u20680\u2069 - \u2068upper_bound\u2069",
        "description": "Validate that the payment amount for any fixed payment schedule is within the major currency unit range of \u2068lower_limit\u2069 - \u2068UNLIMITED\u2069.",
        "possible_errors": [
            "fixed_payment_schedule_amount_out_of_range"
        ]
    },
    {
        "name": "Standalone payment request method code is unexpected",
        "description": "Validates that standalone_payment_request_method_code is only provided for MANUAL payment schedules.",
        "possible_errors": [
            "standalone_payment_request_method_code_unexpected"
        ]
    },
    {
        "name": "Standalone payment request method code is valid",
        "description": "Validates that standalone_payment_request_method_code matches a registered method.",
        "possible_errors": [
            "standalone_payment_request_method_code_invalid"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068end_date\u2069</code> not before <code>\u2068start_date\u2069</code>",
        "description": "Validates that <code>\u2068end_date\u2069</code>, if given, is on or later than <code>\u2068start_date\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate fixed payment schedule has amount",
        "description": "Validates that a fixed payment schedule has an non zero amount provided in the payload. A fixed schedule is defined as a payment schedule with a trigger that is not type BILL.",
        "possible_errors": [
            "zero_payment_schedule_amount"
        ]
    },
    {
        "name": "Validate regular payment schedule frequency provided",
        "description": "Validates that a fixed regular payment schedule has a frequency provided in the payload.",
        "possible_errors": [
            "fixed_payment_schedule_missing_frequency"
        ]
    },
    {
        "name": "Validate payment schedule balance threshold provided",
        "description": "Validates that a payment schedule with a balance trigger has a balance threshold provided in the payload. This balance threshold is the amount the ledger balance must drop below to trigger a payment.",
        "possible_errors": [
            "balance_triggered_schedule_missing_threshold"
        ]
    },
    {
        "name": "Validate debt repayment end date provided",
        "description": "Validates that a debt repayment end date is provided in the payload if a debt repayment element is provided.",
        "possible_errors": [
            "debt_repayment_missing_end_date"
        ]
    },
    {
        "name": "Validate debt repayment end date is not later than schedule end date",
        "description": "Validates that a debt repayment end date is not later than  the payment schedule end date if both are provided.",
        "possible_errors": [
            "debt_repayment_end_date_after_schedule_end_date"
        ]
    },
    {
        "name": "Validate exempt from payment adequacy is applied only to regular schedule",
        "description": "Validates that only a regular payment schedule is marked as exempted from payment adequacy, so as to create a fixed regular payment schedule.",
        "possible_errors": [
            "invalid_payment_schedule_to_exempt_from_payment_adequacy"
        ]
    },
    {
        "name": "Validate fixed payment schedule has payment day",
        "description": "Validates that a fixed payment schedule has a day of month in the payload. A fixed schedule is defined as a payment schedule with a trigger of type REGULAR.",
        "possible_errors": [
            "fixed_payment_schedule_missing_day_of_month"
        ]
    },
    {
        "name": "Validate instalments is provided if trigger is PLAN",
        "description": "Validate that the instalment field is not empty if payment schedule trigger is PLAN.",
        "possible_errors": [
            "payment_instalments_not_provided"
        ]
    },
    {
        "name": "Validate instalment payment amounts sum to total amount",
        "description": "Validate instalment payment amounts sum to total amount given.",
        "possible_errors": [
            "payment_instalments_do_not_sum_to_total"
        ]
    },
    {
        "name": "Validate instalment payment date is within payment schedule active period",
        "description": "Validate instalment payment date is within the period between start date and end date provided.",
        "possible_errors": [
            "payment_instalments_date_outside_of_payment_schedule_active_period"
        ]
    },
    {
        "name": "Validate that the delayer days is set if delayer strategy is set",
        "description": "Validate that the delayer days is set if delayer strategy is set",
        "possible_errors": [
            "payment_schedule_delay_must_have_bill_trigger",
            "payment_schedule_delay_strategy_missing_delay_days"
        ]
    },
    {
        "name": "Validate that the payment amount for fixed payment schedules is within the minor currency unit range of \u20680\u2069 - \u2068upper_bound\u2069",
        "description": "Validate that the payment amount for any fixed payment schedule is within the major currency unit range of \u2068lower_limit\u2069 - \u2068UNLIMITED\u2069.",
        "possible_errors": [
            "fixed_payment_schedule_amount_out_of_range"
        ]
    }
]
New
{
    "x-enum-descriptions": {
        "9720": "9720",
        "NASS11S": "NASS11S",
        "BLNE14AU": "BLNE14AU"
    }
}
Old
{
    "x-enum-descriptions": {}
}

14 July 2026

New
{
    "x-enum-descriptions": {
        "DANKORT": "Dankort"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
[
    {
        "name": "data-import--validation--shared-rate-exists-for-product",
        "description": "Validate that the shared rate code provided matches the shared rate for the product with the provided product code.",
        "possible_errors": [
            "product_specification_not_found_for_product",
            "time_series_not_found_for_product"
        ]
    }
]
Old
[
    {
        "name": "data-import--validation--time-series-exists-for-product",
        "description": "Validate that the time series code provided matches the time series for the product with the provided product code.",
        "possible_errors": [
            "product_specification_not_found_for_product",
            "time_series_not_found_for_product"
        ]
    }
]

9 July 2026

No attributes to display
No attributes to display
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Derive occupier billing address from supply address",
        "description": "When an occupier account has no explicit billing address and exactly one supply address is provided, copy the supply address into the billing address fields.",
        "possible_errors": []
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate agreement business contract identifier is declared",
        "description": "Validates that an agreement's <code>business_contract_identifier</code>, if provided, is one of the account's declared <code>business_contract_identifiers</code>.",
        "possible_errors": [
            "agreement_business_contract_identifier_not_declared"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate agreement business contract identifier is declared",
        "description": "Validates that an agreement's <code>business_contract_identifier</code>, if provided, is one of the account's declared <code>business_contract_identifiers</code>.",
        "possible_errors": [
            "agreement_business_contract_identifier_not_declared"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
New
{
    "x-validators": [
        {
            "name": "Validate bespoke rates do not conflict",
            "description": "Validate bespoke rates for the same target and rate do not conflict during the same period. The target of a bespoke rate is determined by the supply point identifier and product code.",
            "possible_errors": [
                "overlapping_bespoke_rate_schedules"
            ]
        },
        {
            "name": "Validate bespoke rate schedules target consistently",
            "description": "Validate that bespoke rate schedules either all target supply points via the supply_point_identifier field or none do.",
            "possible_errors": [
                "inconsistent_bespoke_rate_schedule_targeting"
            ]
        }
    ]
}
Old
{
    "x-validators": [
        {
            "name": "Validate schedules do not overlap",
            "description": "Validate bespoke rate schedules for the same target do not overlap. The supply point identifier will be used as the target if provided, falling back to the product code.",
            "possible_errors": [
                "overlapping_bespoke_rate_schedules"
            ]
        },
        {
            "name": "Validate bespoke rate schedules target consistently",
            "description": "Validate that bespoke rate schedules either all target supply points via the supply_point_identifier field or none do.",
            "possible_errors": [
                "inconsistent_bespoke_rate_schedule_targeting"
            ]
        }
    ]
}

7 July 2026

New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before or equal to <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is strictly later than \u2068valid_from\u2069.",
        "possible_errors": [
            "start_date_same_as_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    },
    {
        "name": "Validate that all required bespoke rates are present and no non-overridable rates are supplied",
        "description": "Validates that bespoke rate schedules include all rate specifications marked as must-be-overridden and mandatory, and do not include any rate specifications marked as cannot-be-overridden.",
        "possible_errors": [
            "bespoke_rate_cannot_be_overridden",
            "missing_required_bespoke_rate"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    },
    {
        "name": "Validate that all required bespoke rates are present and no non-overridable rates are supplied",
        "description": "Validates that bespoke rate schedules include all rate specifications marked as must-be-overridden and mandatory, and do not include any rate specifications marked as cannot-be-overridden.",
        "possible_errors": [
            "bespoke_rate_cannot_be_overridden",
            "missing_required_bespoke_rate"
        ]
    }
]
New
{
    "x-enum-descriptions": {
        "no_cost_meter": "No Cost Meter"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "No Cost Meter": "No Cost Meter"
    }
}
Old
{
    "x-enum-descriptions": {}
}

6 July 2026

No attributes to display
New
{
    "x-enum-descriptions": {
        "annual_ces_plp_credit": "Annual CES PLP Credit"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Annual CES PLP Credit": "Annual CES PLP Credit"
    }
}
Old
{
    "x-enum-descriptions": {}
}

2 July 2026

New
{
    "PARTNER_COMMISSION": "#/components/schemas/PartnerCommission"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PartnerCommission"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "concession_inv": "Concession Invoicing"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Concession Invoicing": "Concession Invoicing"
    }
}
Old
{
    "x-enum-descriptions": {}
}
Old
{
    "maxItems": 1
}
Old
{
    "maxItems": 1
}
New
{
    "x-validators": [
        {
            "name": "Validate bespoke rate items are unique",
            "description": "Validate that no two bespoke rate items in a schedule share the same rate specification code, rate specification type, and variant profile.",
            "possible_errors": [
                "duplicate_bespoke_rate_items"
            ]
        }
    ]
}

30 June 2026

No attributes to display
New
[
    {
        "name": "Ensures only <code>user_details</code> or <code>details</code> are provided",
        "description": "Ensures that only <code>user_details</code> or <code>details</code> are provided, not both.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate no contact details for occupier",
        "description": "Validates that a customer identified as \"The Occupier\" does not have contact details. If contact details are provided it implies that the identity of the customer is known, and it therefore not an unknown occupier.",
        "possible_errors": [
            "contact_details_for_occupier"
        ]
    },
    {
        "name": "Validate that the customer's name is not \"The Occupier\"",
        "description": "Validate that the customer's name is not \"The Occupier\". To indicate an occupier account, use the <code>unknown_occupier</code> flag at the account-level.",
        "possible_errors": [
            "customer_may_not_be_named_the_occupier"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate user role",
        "description": "Validates that at least one user role is provided through <code>portfolio_roles</code> or <code>account_roles</code>.",
        "possible_errors": [
            "required_user_role"
        ]
    },
    {
        "name": "Validate exclusive role assignment",
        "description": "Validates that an exclusively-assignable role is not assigned to a user alongside any other role, whether in the same payload or already held by the user.",
        "possible_errors": [
            "customer_has_exclusive_role_conflict"
        ]
    },
    {
        "name": "Validate that <code>\u2068customer_preferences\u2069</code> and <code>\u2068consents\u2069</code> are not both provided",
        "description": "Validate that \u2068customer_preferences\u2069 and \u2068consents\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    }
]
Old
[
    {
        "name": "Ensures only <code>user_details</code> or <code>details</code> are provided",
        "description": "Ensures that only <code>user_details</code> or <code>details</code> are provided, not both.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate no contact details for occupier",
        "description": "Validates that a customer identified as \"The Occupier\" does not have contact details. If contact details are provided it implies that the identity of the customer is known, and it therefore not an unknown occupier.",
        "possible_errors": [
            "contact_details_for_occupier"
        ]
    },
    {
        "name": "Validate that the customer's name is not \"The Occupier\"",
        "description": "Validate that the customer's name is not \"The Occupier\". To indicate an occupier account, use the <code>unknown_occupier</code> flag at the account-level.",
        "possible_errors": [
            "customer_may_not_be_named_the_occupier"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate user role",
        "description": "Validates that at least one user role is provided through <code>portfolio_roles</code> or <code>account_roles</code>.",
        "possible_errors": [
            "required_user_role"
        ]
    },
    {
        "name": "Validate that <code>\u2068customer_preferences\u2069</code> and <code>\u2068consents\u2069</code> are not both provided",
        "description": "Validate that \u2068customer_preferences\u2069 and \u2068consents\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    }
]
No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_SOLARFLEX_INACTIVE": "Origin SolarFlex Inactive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "hs_team": "HS Team"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "HS Team": "HS Team"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "$ref": "#/components/schemas/OriginTransaction"
    }
}
Old
{
    "items": {
        "$ref": "#/components/schemas/Transaction"
    }
}
New
{
    "CHARGE": "#/components/schemas/AusCharge",
    "SUPPLY_CHARGE": "#/components/schemas/OriginSupplyCharge"
}
Old
{
    "CHARGE": "#/components/schemas/Charge",
    "SUPPLY_CHARGE": "#/components/schemas/SupplyCharge"
}
New
[
    {
        "$ref": "#/components/schemas/Credit"
    },
    {
        "$ref": "#/components/schemas/AusCharge"
    },
    {
        "$ref": "#/components/schemas/Payment"
    },
    {
        "$ref": "#/components/schemas/Repayment"
    },
    {
        "$ref": "#/components/schemas/OriginSupplyCharge"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/Credit"
    },
    {
        "$ref": "#/components/schemas/Charge"
    },
    {
        "$ref": "#/components/schemas/Payment"
    },
    {
        "$ref": "#/components/schemas/Repayment"
    },
    {
        "$ref": "#/components/schemas/SupplyCharge"
    }
]
New
{
    "items": {
        "$ref": "#/components/schemas/OriginTransaction"
    }
}
Old
{
    "items": {
        "$ref": "#/components/schemas/Transaction"
    }
}
New
{
    "items": {
        "$ref": "#/components/schemas/OriginTransaction"
    }
}
Old
{
    "items": {
        "$ref": "#/components/schemas/Transaction"
    }
}

29 June 2026

New
{
    "x-enum-descriptions": {
        "suspicious_account_activities": "Suspicious Account Activities"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Suspicious Account Activities": "Suspicious Account Activities"
    }
}
Old
{
    "x-enum-descriptions": {}
}

26 June 2026

New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    },
    {
        "name": "Validate that all required bespoke rates are present and no non-overridable rates are supplied",
        "description": "Validates that bespoke rate schedules include all rate specifications marked as must-be-overridden and mandatory, and do not include any rate specifications marked as cannot-be-overridden.",
        "possible_errors": [
            "bespoke_rate_cannot_be_overridden",
            "missing_required_bespoke_rate"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    }
]
New
{
    "x-enum-descriptions": {
        "vendor_account": "Vendor Account"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Vendor Account": "Vendor Account"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "$ref": "#/components/schemas/OriginLedgerRecordWithTransactions"
    }
}
Old
{
    "items": {
        "$ref": "#/components/schemas/AusLedgerRecordWithTransactions"
    }
}
New
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate no duplicate portfolio reference namespaces",
        "description": "Validate that there are no duplicate portfolio reference namespaces in the payload.",
        "possible_errors": [
            "duplicate_portfolio_references"
        ]
    }
]
Old
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    }
]
New
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate no duplicate portfolio reference namespaces",
        "description": "Validate that there are no duplicate portfolio reference namespaces in the payload.",
        "possible_errors": [
            "duplicate_portfolio_references"
        ]
    }
]
Old
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    }
]
New
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate no duplicate portfolio reference namespaces",
        "description": "Validate that there are no duplicate portfolio reference namespaces in the payload.",
        "possible_errors": [
            "duplicate_portfolio_references"
        ]
    }
]
Old
[
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    }
]

25 June 2026

New
{
    "x-enum-descriptions": {
        "BLNBSS1_22E": "BLNBSS1_22E",
        "BLNRSS2_12E": "BLNRSS2_12E",
        "BLNT2AL_22D": "BLNT2AL_22D",
        "BLNT3AL_12D": "BLNT3AL_12D"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 June 2026

No attributes to display
New
{
    "x-enum-descriptions": {
        "RTC12F": "RTC12F"
    }
}
Old
{
    "x-enum-descriptions": {
        "RTCSSO": "RTCSSO"
    }
}

23 June 2026

No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "EVCT2": "EVCT2",
        "EVCT3": "EVCT3",
        "EVNT2": "EVNT2",
        "EVNT3": "EVNT3",
        "EVCBT1": "EVCBT1",
        "EVCBT2": "EVCBT2",
        "EVCBT3": "EVCBT3",
        "EVCCT1": "EVCCT1",
        "EVCCT2": "EVCCT2",
        "EVCCT3": "EVCCT3",
        "EVCXT2": "EVCXT2",
        "EVCXT3": "EVCXT3",
        "EVNBT1": "EVNBT1",
        "EVNBT2": "EVNBT2",
        "EVNBT3": "EVNBT3",
        "EVNCT1": "EVNCT1",
        "EVNCT2": "EVNCT2",
        "EVNCT3": "EVNCT3",
        "EVNXT2": "EVNXT2",
        "EVNXT3": "EVNXT3",
        "RTC50C_KW": "RTC50C_KW",
        "RTC50C_KVA": "RTC50C_KVA"
    }
}
Old
{
    "x-enum-descriptions": {}
}

22 June 2026

New
{
    "x-enum-descriptions": {
        "N62": "N62",
        "NC04": "NC04",
        "EA250": "EA250",
        "EA260": "EA260",
        "BLNC1AR": "BLNC1AR",
        "BLNC1CO": "BLNC1CO",
        "BLNC3NU": "BLNC3NU"
    }
}
Old
{
    "x-enum-descriptions": {}
}
No attributes to display
New
[
    {
        "name": "Validate that business information is provided if not linking account to business with contract",
        "description": "Validate that business information is provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is false for the given import supplier.",
        "possible_errors": [
            "business_information_required_if_not_linking_via_contract"
        ]
    },
    {
        "name": "Validate that business information is not provided if linking an account to the business of the business contract.",
        "description": "Validate that business information is not provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is true for the given import supplier.",
        "possible_errors": [
            "business_information_not_required_if_linking_via_contract"
        ]
    },
    {
        "name": "Validate that at least one contract identifier is provided for import",
        "description": "Validate that at least one of <code>business_contract_identifiers</code> or <code>business_contract_identifier</code> is provided in the payload.",
        "possible_errors": [
            "missing_contract_identifier"
        ]
    }
]
Old
[
    {
        "name": "Validate that values are unique in Kraken for unique registered keys",
        "description": "Validate that keys with unique constraints do not already have provided value in Kraken.",
        "possible_errors": [
            "business_detail_value_exists_for_unique_key"
        ]
    },
    {
        "name": "Validate that business information is provided if not linking account to business with contract",
        "description": "Validate that business information is provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is false for the given import supplier.",
        "possible_errors": [
            "business_information_required_if_not_linking_via_contract"
        ]
    },
    {
        "name": "Validate that business information is not provided if linking an account to the business of the business contract.",
        "description": "Validate that business information is not provided for the business to link the account to if <code>link_account_to_business_with_contract</code> is true for the given import supplier.",
        "possible_errors": [
            "business_information_not_required_if_linking_via_contract"
        ]
    },
    {
        "name": "Validate that at least one contract identifier is provided for import",
        "description": "Validate that at least one of <code>business_contract_identifiers</code> or <code>business_contract_identifier</code> is provided in the payload.",
        "possible_errors": [
            "missing_contract_identifier"
        ]
    }
]
No attributes to display

19 June 2026

New
{
    "x-enum-descriptions": {
        "energy_intensive_technology": "OZ\u2013EI&T",
        "retail_property_manufacturing": "OZ\u2013RPM",
        "services_infrastructure_government": "OZ\u2013SIG"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "OZ\u2013RPM": "OZ\u2013RPM",
        "OZ\u2013SIG": "OZ\u2013SIG",
        "OZ\u2013EI&T": "OZ\u2013EI&T"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "shell_account": "Shell Account"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Shell Account": "Shell Account"
    }
}
Old
{
    "x-enum-descriptions": {}
}

16 June 2026

New
{
    "x-enum-descriptions": {
        "COMMS8": "COMMS8"
    }
}
Old
{
    "x-enum-descriptions": {}
}

15 June 2026

New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate agreement business contract identifier is declared",
        "description": "Validates that an agreement's <code>business_contract_identifier</code>, if provided, is one of the account's declared <code>business_contract_identifiers</code>.",
        "possible_errors": [
            "agreement_business_contract_identifier_not_declared"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
No attributes to display

12 June 2026

No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "uma_removed_temp": "Removed Unmetered Appliance - Temporary"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Removed Unmetered Appliance - Temporary": "Removed Unmetered Appliance - Temporary"
    }
}
Old
{
    "x-enum-descriptions": {}
}

11 June 2026

New
{
    "x-enum-descriptions": {
        "litigation_disconnection": "Litigation_Disconnection"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Litigation_Disconnection": "Litigation_Disconnection"
    }
}
Old
{
    "x-enum-descriptions": {}
}

9 June 2026

New
{
    "x-enum-descriptions": {
        "RTCSSO": "RTCSSO"
    }
}
Old
{
    "x-enum-descriptions": {}
}

5 June 2026

New
[
    {
        "name": "Promotion assignment discount targets are valid",
        "description": "Validates that the promotion exists, discounts are defined in the promotion, target types match the discount target type, and target identifiers are valid.",
        "possible_errors": [
            "discount_not_in_promotion",
            "invalid_input_data",
            "promotion_not_registered",
            "rate_source_provider_not_registered",
            "source_data_not_supported_for_fixed_rate",
            "source_data_reference_mismatch",
            "target_identifier_invalid",
            "target_type_mismatch",
            "target_type_not_registered"
        ]
    },
    {
        "name": "Promotion assignment params are valid",
        "description": "Validates that the params field contains only valid values. If promotion_start_date is provided, it must be a valid ISO 8601 datetime string.",
        "possible_errors": [
            "invalid_promotion_start_date"
        ]
    }
]
Old
[
    {
        "name": "Promotion assignment discount targets are valid",
        "description": "Validates that the promotion exists, discounts are defined in the promotion, target types match the discount target type, and target identifiers are valid.",
        "possible_errors": [
            "discount_not_in_promotion",
            "invalid_input_data",
            "promotion_not_registered",
            "rate_source_provider_not_registered",
            "source_data_not_supported_for_fixed_rate",
            "source_data_reference_mismatch",
            "target_identifier_invalid",
            "target_type_mismatch",
            "target_type_not_registered"
        ]
    }
]
No attributes to display

4 June 2026

No attributes to display
No attributes to display
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate that a portfolio lead account has no supply address since it makes no sense for it to have one",
        "description": "Validate that a portfolio lead account has no supply address.",
        "possible_errors": [
            "portfolio_lead_has_a_supply_address"
        ]
    },
    {
        "name": "Validate that a system account has no supply address",
        "description": "Validate that a system account has no supply address",
        "possible_errors": [
            "system_account_has_a_supply_address"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
New
{
    "x-enum-descriptions": {
        "SYSTEM": "System"
    }
}
Old
{
    "x-enum-descriptions": {}
}

2 June 2026

New
{
    "TRANCHE_TARGET_RESIDUAL_FEE": "#/components/schemas/TrancheTargetResidualFee"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TrancheTargetResidualFee"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
New
{
    "x-enum-descriptions": {
        "UMBO": "UMBO"
    }
}
Old
{
    "x-enum-descriptions": {}
}

29 May 2026

New
{
    "enum": [
        "G_LOA"
    ],
    "type": "string",
    "x-spec-enum-id": "7e197ea5273e96fb",
    "x-enum-descriptions": {
        "G_LOA": "General Letter of Authority"
    }
}
Old
{
    "x-comment": "Choices for this field are dynamic, once appropriate values have been configured they will be rendered here.",
    "x-spec-enum-id": "4f53cda18c2baa0c"
}
New
{
    "x-enum-descriptions": {
        "Rabbi": "Rabbi"
    }
}
Old
{
    "x-enum-descriptions": {}
}
Old
{
    "maxItems": 2
}
New
{
    "x-enum-descriptions": {
        "UMBD": "UMBD"
    }
}
Old
{
    "x-enum-descriptions": {}
}

27 May 2026

New
{
    "x-enum-descriptions": {
        "vic_tailored_assistance": "VIC Tailored Assistance"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "VIC Tailored Assistance": "VIC Tailored Assistance"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ezp": "EnergyZone Pro"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "EnergyZone Pro": "EnergyZone Pro"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 May 2026

No attributes to display
No attributes to display
No attributes to display

22 May 2026

No attributes to display
No attributes to display
New
{
    "x-validators": [
        {
            "name": "Validate path exists in file store",
            "description": "Validate that the given path corresponds to a file that has previously been uploaded to the migration file store. Note that this validation is disabled by default: get in touch with the Kraken team to check if it has been enabled for this migration.",
            "possible_errors": [
                "path_does_not_exist_in_file_store"
            ]
        }
    ]
}
New
{
    "x-enum-descriptions": {
        "N61": "N61"
    }
}
Old
{
    "x-enum-descriptions": {}
}

21 May 2026

New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "vc_wie_remediation": "VC WIE Remediation"
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "VC WIE Remediation": "VC WIE Remediation"
    }
}
No attributes to display
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate parent property references exist",
        "description": "Validates that all <code>parent_property_reference</code> values in <code>supply_addresses</code> and <code>properties</code> correspond to a <code>property_external_identifier</code> in the payload. This ensures the property hierarchy is valid.",
        "possible_errors": [
            "parent_property_reference_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
{
    "maxItems": 1
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_BUSINESS_NO_CONTRACT": "Origin Business - No Contracts e.g. trustee"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_BUSINESS_NO_CONTRACT": "Origin Business - No Contracts e.g. trustee"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_BUSINESS_NO_CONTRACT": "Origin Business - No Contracts e.g. trustee"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_BUSINESS_NO_CONTRACT": "Origin Business - No Contracts e.g. trustee"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_BUSINESS_NO_CONTRACT": "Origin Business - No Contracts e.g. trustee"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_BUSINESS_NO_CONTRACT": "Origin Business - No Contracts e.g. trustee"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_BUSINESS_NO_CONTRACT": "Origin Business - No Contracts e.g. trustee"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "ORIGIN_BUSINESS_NO_CONTRACT": "Origin Business - No Contracts e.g. trustee"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "x-enum-descriptions": {
            "TRUSTEE": "TRUSTEE",
            "NO_EMAIL": "NO_EMAIL"
        }
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {}
    }
}
New
{
    "items": {
        "x-enum-descriptions": {
            "TRUSTEE": "TRUSTEE",
            "NO_EMAIL": "NO_EMAIL"
        }
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {}
    }
}
New
{
    "items": {
        "x-enum-descriptions": {
            "TRUSTEE": "TRUSTEE",
            "NO_EMAIL": "NO_EMAIL"
        }
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {}
    }
}
New
{
    "x-enum-descriptions": {
        "TRUSTEE": "TRUSTEE",
        "NO_EMAIL": "NO_EMAIL"
    }
}
Old
{
    "x-enum-descriptions": {}
}

19 May 2026

No attributes to display
No attributes to display

18 May 2026

New
{
    "CORRECTIVE_PERIOD": "#/components/schemas/CorrectivePeriod"
}
New
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/CorrectivePeriod"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/BespokeRateConfiguration"
    },
    {
        "$ref": "#/components/schemas/BillDueDate"
    },
    {
        "$ref": "#/components/schemas/BillingDocumentIssuanceFrequencyTerm"
    },
    {
        "$ref": "#/components/schemas/CharacteristicOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/CollateralRequired"
    },
    {
        "$ref": "#/components/schemas/ContractMetaData"
    },
    {
        "$ref": "#/components/schemas/ContractedVolumeConfiguration"
    },
    {
        "$ref": "#/components/schemas/DelayerDays"
    },
    {
        "$ref": "#/components/schemas/GuaranteeOfOriginConfiguration"
    },
    {
        "$ref": "#/components/schemas/LatePaymentFees"
    },
    {
        "$ref": "#/components/schemas/MinimumContractLength"
    },
    {
        "$ref": "#/components/schemas/PaysByDirectDebitTerm"
    },
    {
        "$ref": "#/components/schemas/ProductRateOverrideConfiguration"
    },
    {
        "$ref": "#/components/schemas/PromotionAssignmentTerm"
    },
    {
        "$ref": "#/components/schemas/RateGroupEligibilityConfiguration"
    },
    {
        "$ref": "#/components/schemas/TaxAdjustmentConfiguration"
    },
    {
        "$ref": "#/components/schemas/TerminationFee"
    }
]

15 May 2026

No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "WIN_CONNECT_PARENT": "Win Connect Parent"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "WIN_CONNECT_PARENT": "Win Connect Parent"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "WIN_CONNECT_PARENT": "Win Connect Parent"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "WIN_CONNECT_PARENT": "Win Connect Parent"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "WIN_CONNECT_PARENT": "Win Connect Parent"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "WIN_CONNECT_PARENT": "Win Connect Parent"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "WIN_CONNECT_PARENT": "Win Connect Parent"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "WIN_CONNECT_PARENT": "Win Connect Parent"
    }
}
Old
{
    "x-enum-descriptions": {}
}

14 May 2026

No attributes to display
New
{
    "x-enum-descriptions": {
        "vpp_esaas_eligible": "VPP ESaaS - Eligible"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "VPP ESaaS - Eligible": "VPP ESaaS - Eligible"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "N95": "N95"
    }
}
Old
{
    "x-enum-descriptions": {}
}

13 May 2026

New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate unique property external identifiers",
        "description": "Ensures that <code>property_external_identifier</code> is not repeated across <code>supply_addresses</code> and <code>properties</code>.",
        "possible_errors": [
            "duplicate_property_external_identifiers"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]

12 May 2026

New
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product",
            "shared_rate_not_found",
            "shared_rate_not_found_for_product"
        ]
    }
]
Old
[
    {
        "name": "Validate <code>\u2068valid_to\u2069</code> not before <code>\u2068valid_from\u2069</code>",
        "description": "Validates that <code>\u2068valid_to\u2069</code>, if given, is on or later than <code>\u2068valid_from\u2069</code>.",
        "possible_errors": [
            "start_date_later_than_end_date"
        ]
    },
    {
        "name": "Validate each item represents a possible rate for the product",
        "description": "Validate each item's rate specification, characteristic values, and scheme labels represent a rate defned on the product.",
        "possible_errors": [
            "characteristic_code_not_found",
            "invalid_characteristic_value",
            "invalid_profile_variant_for_specification",
            "product_specification_not_found_for_product",
            "rate_specification_not_found_for_product"
        ]
    }
]
No attributes to display
New
{
    "x-enum-descriptions": {
        "RTOUCL_26": "RTOUCL_26"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "active_dca_campaign_sensitive": "Active DCA Campaign - Sensitive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Active DCA Campaign - Sensitive": "Active DCA Campaign - Sensitive"
    }
}
Old
{
    "x-enum-descriptions": {}
}

11 May 2026

No attributes to display

10 May 2026

New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate that <code>\u2068dd_reference\u2069</code> and <code>\u2068payment_instructions\u2069</code> are not both provided",
        "description": "Validate that \u2068dd_reference\u2069 and \u2068payment_instructions\u2069 are not both provided.",
        "possible_errors": [
            "fields_are_mutually_exclusive"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
New
{
    "x-removal-date": "2026-05-25"
}

8 May 2026

New
{
    "x-removal-date": "2026-05-25"
}
New
{
    "x-removal-date": "2026-05-25"
}
New
{
    "x-enum-descriptions": {
        "NASS11": "NASS11"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "credit_dispute": "Credit Dispute"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Dispute": "Credit Dispute"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "A130": "A130",
        "CRSTOU": "CRSTOU",
        "PRSTOU": "PRSTOU",
        "URSTOU": "URSTOU"
    }
}
Old
{
    "x-enum-descriptions": {}
}

7 May 2026

No attributes to display
No attributes to display
No attributes to display

6 May 2026

New
[
    {
        "name": "data-import--validation--time-series-exists-for-product",
        "description": "Validate that the time series code provided matches the time series for the product with the provided product code.",
        "possible_errors": [
            "product_specification_not_found_for_product",
            "time_series_not_found_for_product"
        ]
    }
]
Old
[
    {
        "name": "data-import--validation--time-series-exists-for-product",
        "description": "Validate that the time series code provided matches the time series for the product with the provided product code.",
        "possible_errors": [
            "time_series_not_found_for_product"
        ]
    }
]
No attributes to display
New
{
    "x-enum-descriptions": {
        "flex_eft": "EFT migration comms variant"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "EFT migration comms variant": "EFT migration comms variant"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "payment_difficulty": "Payment Difficulty"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Payment Difficulty": "Payment Difficulty"
    }
}
Old
{
    "x-enum-descriptions": {}
}

4 May 2026

New
{
    "x-enum-descriptions": {
        "N71_26": "N71_26",
        "N84_26": "N84_26",
        "EA025_26": "EA025_26",
        "EA225_26": "EA225_26",
        "EA302_26": "EA302_26"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "internet_account": "Internet Account",
        "customer_internet": "Customer - Internet"
    }
}
Old
{
    "x-enum-descriptions": {
        "internet_customer": "Internet Customer"
    }
}
New
{
    "x-enum-descriptions": {
        "Internet Account": "Internet Account",
        "Customer - Internet": "Customer - Internet"
    }
}
Old
{
    "x-enum-descriptions": {
        "Internet Customer": "Internet Customer"
    }
}

1 May 2026

New
{
    "x-enum-descriptions": {
        "internet_customer": "Internet Customer"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Internet Customer": "Internet Customer"
    }
}
Old
{
    "x-enum-descriptions": {}
}

29 April 2026

No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "cr_db_transfer": "Credit Debit Transfer"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Debit Transfer": "Credit Debit Transfer"
    }
}
Old
{
    "x-enum-descriptions": {}
}

28 April 2026

No attributes to display
No attributes to display
No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "oz_bpay_conflict": "BPAY Reference changed on Migration"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "BPAY Reference changed on Migration": "BPAY Reference changed on Migration"
    }
}
Old
{
    "x-enum-descriptions": {}
}

27 April 2026

No attributes to display

24 April 2026

No attributes to display
No attributes to display
New
[
    {
        "name": "Promotion assignment discount targets are valid",
        "description": "Validates that the promotion exists, discounts are defined in the promotion, target types match the discount target type, and target identifiers are valid.",
        "possible_errors": [
            "discount_not_in_promotion",
            "invalid_input_data",
            "promotion_not_registered",
            "rate_source_provider_not_registered",
            "source_data_not_supported_for_fixed_rate",
            "source_data_reference_mismatch",
            "target_identifier_invalid",
            "target_type_mismatch",
            "target_type_not_registered"
        ]
    }
]
Old
[
    {
        "name": "Promotion assignment discount targets are valid",
        "description": "Validates that the promotion exists, discounts are defined in the promotion, target types match the discount target type, and target identifiers are valid.",
        "possible_errors": [
            "discount_not_in_promotion",
            "promotion_not_registered",
            "target_identifier_invalid",
            "target_type_mismatch",
            "target_type_not_registered"
        ]
    }
]

23 April 2026

No attributes to display

22 April 2026

New
{
    "x-enum-descriptions": {
        "suppress_migration_comms": "Suppress Migration Comms"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Suppress Migration Comms": "Suppress Migration Comms"
    }
}
Old
{
    "x-enum-descriptions": {}
}

21 April 2026

No attributes to display
No attributes to display

20 April 2026

New
{
    "x-enum-descriptions": {
        "credit_settlement_campaign": "Credit Settlement Campaign"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Credit Settlement Campaign": "Credit Settlement Campaign"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-removal-date": "2026-05-20"
}
New
{
    "x-removal-date": "2026-05-20"
}
Old
{
    "nullable": true
}
No attributes to display
No attributes to display

17 April 2026

No attributes to display

14 April 2026

New
{
    "x-enum-descriptions": {
        "tactical_credit_campaign": "Tactical Credit Campaign"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Tactical Credit Campaign": "Tactical Credit Campaign"
    }
}
Old
{
    "x-enum-descriptions": {}
}

13 April 2026

No attributes to display
Use instead
ledgers.historical_statement_transactions
Use instead
ledgers.current_statement_transactions

10 April 2026

New
{
    "x-enum-descriptions": {
        "POLE": "Pole",
        "LIGHT": "Light"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "POLE": "Pole",
        "LIGHT": "Light"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "POLE": "Pole",
        "LIGHT": "Light"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "POLE": "Pole",
        "LIGHT": "Light"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "POLE": "Pole",
        "LIGHT": "Light"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "POLE": "Pole",
        "LIGHT": "Light"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "POLE": "Pole",
        "LIGHT": "Light"
    }
}
Old
{
    "x-enum-descriptions": {}
}

9 April 2026

No attributes to display
No attributes to display
New
{
    "x-enum-descriptions": {
        "expected_generation_billing": "Expected Generation Billing"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Expected Generation Billing": "Expected Generation Billing"
    }
}
Old
{
    "x-enum-descriptions": {}
}

31 March 2026

New
{
    "items": {
        "$ref": "#/components/schemas/AusStatement"
    }
}
Old
{
    "items": {
        "$ref": "#/components/schemas/Statement"
    }
}
New
{
    "x-enum-descriptions": {
        "NSW_LIFE_SUPPORT_OTHER": "NSW Life Support - Other"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "originbusinesssteady": "Origin Business Steady"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Origin Business Steady": "Origin Business Steady"
    }
}
Old
{
    "x-enum-descriptions": {}
}

30 March 2026

No attributes to display
No attributes to display

27 March 2026

New
{
    "x-enum-descriptions": {
        "CUSTOM": "Custom"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CUSTOM": "Custom"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "CUSTOM": "Custom"
    }
}
Old
{
    "x-enum-descriptions": {}
}

24 March 2026

New
{
    "x-enum-descriptions": {
        "sensitive_cx_routing": "Sensitive Cx Routing"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Sensitive Cx Routing": "Sensitive Cx Routing"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-removal-date": "2026-04-29"
}

16 March 2026

New
{
    "x-enum-descriptions": {
        "hs_fdv_non_engagement_pathway": "HS FDV Non-Engagement Pathway"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "HS FDV Non-Engagement Pathway": "HS FDV Non-Engagement Pathway"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "pathways_hs_re_entry": "Pathways HS Re-Entry"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Pathways HS Re-Entry": "Pathways HS Re-Entry"
    }
}
Old
{
    "x-enum-descriptions": {}
}

13 March 2026

No attributes to display

10 March 2026

New
{
    "x-enum-descriptions": {
        "tailored_engagement_sensitive": "Tailored Engagement Sensitive"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "Tailored Engagement Sensitive": "Tailored Engagement Sensitive"
    }
}
Old
{
    "x-enum-descriptions": {}
}

5 March 2026

New
{
    "x-enum-descriptions": {
        "6-8_BATFIT": "6-8_BATFIT"
    }
}
Old
{
    "x-enum-descriptions": {}
}

2 March 2026

New
{
    "items": {
        "x-enum-descriptions": {}
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {
            "EZ_NTO": "EZ_NTO"
        }
    }
}
New
{
    "items": {
        "x-enum-descriptions": {}
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {
            "EZ_NTO": "EZ_NTO"
        }
    }
}
New
{
    "items": {
        "x-enum-descriptions": {}
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {
            "EZ_NTO": "EZ_NTO"
        }
    }
}
New
{
    "x-enum-descriptions": {}
}
Old
{
    "x-enum-descriptions": {
        "EZ_NTO": "EZ_NTO"
    }
}
New
{
    "x-enum-descriptions": {
        "NIGHTSHIFT_SAPN": "NIGHTSHIFT_SAPN",
        "NIGHTSHIFT_AUSGRI": "NIGHTSHIFT_AUSGRI",
        "NIGHTSHIFT_AUSNET": "NIGHTSHIFT_AUSNET",
        "NIGHTSHIFT_CITIPR": "NIGHTSHIFT_CITIPR",
        "NIGHTSHIFT_ENDEAV": "NIGHTSHIFT_ENDEAV",
        "NIGHTSHIFT_ENERGX": "NIGHTSHIFT_ENERGX",
        "NIGHTSHIFT_ESSENT": "NIGHTSHIFT_ESSENT",
        "NIGHTSHIFT_EVOENR": "NIGHTSHIFT_EVOENR",
        "NIGHTSHIFT_JEMENA": "NIGHTSHIFT_JEMENA",
        "NIGHTSHIFT_POWCOR": "NIGHTSHIFT_POWCOR",
        "NIGHTSHIFT_UNITED": "NIGHTSHIFT_UNITED",
        "WEEKDAYSHIFT_SAPN": "WEEKDAYSHIFT_SAPN",
        "WEEKENDSHIFT_SAPN": "WEEKENDSHIFT_SAPN",
        "WEEKDAYSHIFT_AUSGRI": "WEEKDAYSHIFT_AUSGRI",
        "WEEKDAYSHIFT_AUSNET": "WEEKDAYSHIFT_AUSNET",
        "WEEKDAYSHIFT_CITIPR": "WEEKDAYSHIFT_CITIPR",
        "WEEKDAYSHIFT_ENDEAV": "WEEKDAYSHIFT_ENDEAV",
        "WEEKDAYSHIFT_ENERGX": "WEEKDAYSHIFT_ENERGX",
        "WEEKDAYSHIFT_ESSENT": "WEEKDAYSHIFT_ESSENT",
        "WEEKDAYSHIFT_EVOENR": "WEEKDAYSHIFT_EVOENR",
        "WEEKDAYSHIFT_JEMENA": "WEEKDAYSHIFT_JEMENA",
        "WEEKDAYSHIFT_POWCOR": "WEEKDAYSHIFT_POWCOR",
        "WEEKDAYSHIFT_UNITED": "WEEKDAYSHIFT_UNITED",
        "WEEKENDSHIFT_AUSGRI": "WEEKENDSHIFT_AUSGRI",
        "WEEKENDSHIFT_AUSNET": "WEEKENDSHIFT_AUSNET",
        "WEEKENDSHIFT_CITIPR": "WEEKENDSHIFT_CITIPR",
        "WEEKENDSHIFT_ENDEAV": "WEEKENDSHIFT_ENDEAV",
        "WEEKENDSHIFT_ENERGX": "WEEKENDSHIFT_ENERGX",
        "WEEKENDSHIFT_ESSENT": "WEEKENDSHIFT_ESSENT",
        "WEEKENDSHIFT_EVOENR": "WEEKENDSHIFT_EVOENR",
        "WEEKENDSHIFT_JEMENA": "WEEKENDSHIFT_JEMENA",
        "WEEKENDSHIFT_POWCOR": "WEEKENDSHIFT_POWCOR",
        "WEEKENDSHIFT_UNITED": "WEEKENDSHIFT_UNITED"
    }
}
Old
{
    "x-enum-descriptions": {}
}

27 February 2026

New
{
    "x-enum-descriptions": {
        "BUS_DAY_SAPN": "BUS_DAY_SAPN",
        "BUS_DAY_AUSGRI": "BUS_DAY_AUSGRI",
        "BUS_DAY_AUSNET": "BUS_DAY_AUSNET",
        "BUS_DAY_CITIPR": "BUS_DAY_CITIPR",
        "BUS_DAY_ENDEAV": "BUS_DAY_ENDEAV",
        "BUS_DAY_ENERGX": "BUS_DAY_ENERGX",
        "BUS_DAY_ESSENT": "BUS_DAY_ESSENT",
        "BUS_DAY_EVOENR": "BUS_DAY_EVOENR",
        "BUS_DAY_JEMENA": "BUS_DAY_JEMENA",
        "BUS_DAY_POWCOR": "BUS_DAY_POWCOR",
        "BUS_DAY_UNITED": "BUS_DAY_UNITED"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "BUS_MORN_SAPN": "BUS_MORN_SAPN",
        "BUS_MORN_AUSGRI": "BUS_MORN_AUSGRI",
        "BUS_MORN_AUSNET": "BUS_MORN_AUSNET",
        "BUS_MORN_CITIPR": "BUS_MORN_CITIPR",
        "BUS_MORN_ENDEAV": "BUS_MORN_ENDEAV",
        "BUS_MORN_ENERGX": "BUS_MORN_ENERGX",
        "BUS_MORN_ESSENT": "BUS_MORN_ESSENT",
        "BUS_MORN_EVOENR": "BUS_MORN_EVOENR",
        "BUS_MORN_JEMENA": "BUS_MORN_JEMENA",
        "BUS_MORN_POWCOR": "BUS_MORN_POWCOR",
        "BUS_MORN_UNITED": "BUS_MORN_UNITED"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-validators": [
        {
            "name": "Validate <code>organisation_number</code>",
            "description": "Validate that the given <code>organisation_number</code> has a corresponding organisation registered in the database.",
            "possible_errors": [
                "partner_organisation_does_not_exist"
            ]
        }
    ]
}

26 February 2026

New
{
    "x-enum-descriptions": {
        "BUS_AHRS_SAPN": "BUS_AHRS_SAPN",
        "BUS_AHRS_AUSGRI": "BUS_AHRS_AUSGRI",
        "BUS_AHRS_AUSNET": "BUS_AHRS_AUSNET",
        "BUS_AHRS_CITIPR": "BUS_AHRS_CITIPR",
        "BUS_AHRS_ENDEAV": "BUS_AHRS_ENDEAV",
        "BUS_AHRS_ENERGX": "BUS_AHRS_ENERGX",
        "BUS_AHRS_ESSENT": "BUS_AHRS_ESSENT",
        "BUS_AHRS_EVOENR": "BUS_AHRS_EVOENR",
        "BUS_AHRS_JEMENA": "BUS_AHRS_JEMENA",
        "BUS_AHRS_POWCOR": "BUS_AHRS_POWCOR",
        "BUS_AHRS_UNITED": "BUS_AHRS_UNITED"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "items": {
        "x-enum-descriptions": {
            "EZ_BROKER": "EZ_BROKER",
            "EZ_CUSTOMER": "EZ_CUSTOMER"
        }
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {}
    }
}
New
{
    "items": {
        "x-enum-descriptions": {
            "EZ_BROKER": "EZ_BROKER",
            "EZ_CUSTOMER": "EZ_CUSTOMER"
        }
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {}
    }
}
New
{
    "items": {
        "x-enum-descriptions": {
            "EZ_BROKER": "EZ_BROKER",
            "EZ_CUSTOMER": "EZ_CUSTOMER"
        }
    }
}
Old
{
    "items": {
        "x-enum-descriptions": {}
    }
}
New
{
    "x-enum-descriptions": {
        "EZ_BROKER": "EZ_BROKER",
        "EZ_CUSTOMER": "EZ_CUSTOMER"
    }
}
Old
{
    "x-enum-descriptions": {}
}

25 February 2026

New
{
    "pattern": "^-?\\d{0,7}(?:\\.\\d{0,4})?$"
}
Old
{
    "pattern": "^-?\\d{0,7}(?:\\.\\d{0,2})?$"
}

24 February 2026

No attributes to display

23 February 2026

New
{
    "required": true
}
New
{
    "SUPPLY_CHARGE": "#/components/schemas/AusSupplyCharge"
}
Old
{
    "SUPPLY_CHARGE": "#/components/schemas/SupplyCharge"
}
New
[
    {
        "$ref": "#/components/schemas/Credit"
    },
    {
        "$ref": "#/components/schemas/AusCharge"
    },
    {
        "$ref": "#/components/schemas/Payment"
    },
    {
        "$ref": "#/components/schemas/Repayment"
    },
    {
        "$ref": "#/components/schemas/AusSupplyCharge"
    }
]
Old
[
    {
        "$ref": "#/components/schemas/Credit"
    },
    {
        "$ref": "#/components/schemas/AusCharge"
    },
    {
        "$ref": "#/components/schemas/Payment"
    },
    {
        "$ref": "#/components/schemas/Repayment"
    },
    {
        "$ref": "#/components/schemas/SupplyCharge"
    }
]

20 February 2026

New
{
    "x-enum-descriptions": {
        "ehh_ineligible_email": "EHH - Ineligible No Email"
    }
}
Old
{
    "x-enum-descriptions": {}
}
New
{
    "x-enum-descriptions": {
        "EHH - Ineligible No Email": "EHH - Ineligible No Email"
    }
}
Old
{
    "x-enum-descriptions": {}
}

19 February 2026

New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate agreements are consecutive per supply point",
        "description": "Validate that the agreements provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for agreements provided before the current supply period for the supply point. Agreements provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate contracts are consecutive per supply point",
        "description": "Validate that the contracts provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for contracts provided before the current supply period for the supply point. Contracts provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
New
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate contracts are consecutive per supply point",
        "description": "Validate that the contracts provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for contracts provided before the current supply period for the supply point. Contracts provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no agreements start before the supply start date",
        "description": "Validate that no agreements start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]
Old
[
    {
        "name": "Validate account type is valid",
        "description": "Validate that only one account type is specified in the payload.",
        "possible_errors": [
            "multiple_account_types_selected"
        ]
    },
    {
        "name": "Validate billing address fields",
        "description": "If a legacy billing address is provided, validate that it is in the correct format.",
        "possible_errors": [
            "invalid_address"
        ]
    },
    {
        "name": "Validate life support contact user email",
        "description": "Validates that life support contact user email matches with customers email. When life support <code>preferred_contact_method</code> is <code>EMAIL_ADDRESS</code>, it requires customer with email. When it is <code>PHONE</code>, it requires customer with mobile or landline.",
        "possible_errors": [
            "missing_contact_user_email_or_phone"
        ]
    },
    {
        "name": "Validate metadata",
        "description": "Validate that metadata, which is a list of key value pairs, does not contain duplicate keys.",
        "possible_errors": [
            "metadata_has_duplicate_keys"
        ]
    },
    {
        "name": "Validate managed account type is allowed",
        "description": "Validate that this instance of Kraken allows managed account types.",
        "possible_errors": [
            "managed_accounts_are_not_allowed"
        ]
    },
    {
        "name": "Validate only portfolio lead has portfolio setting",
        "description": "Validates that if portfolio settings are provided, then the account is marked as the portfolio lead.",
        "possible_errors": [
            "portfolio_settings_included_when_not_lead"
        ]
    },
    {
        "name": "Validate no customers for unknown occupier",
        "description": "Validate that no customers are provided for an unknown occupier.",
        "possible_errors": [
            "customer_with_unknown_occupier"
        ]
    },
    {
        "name": "Validate that a customer given name is provided for business accounts",
        "description": "Validate that a given name is provided for all customers on a business account. Note that this validation only applies if Kraken is configured to send registration flows for this import supplier.",
        "possible_errors": [
            "customer_given_name_required"
        ]
    },
    {
        "name": "Validate portfolio reference provided correctly",
        "description": "Validate that a portfolio reference is provided if portfolio settings have been provided and that a portfolio reference is not provided if the import supplier is set to create new portfolios.",
        "possible_errors": [
            "portfolio_references_missing",
            "portfolio_references_provided"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate contracts are consecutive per supply point",
        "description": "Validate that the contracts provided in the payload are consecutive per supply point i.e. there are no gaps or overlaps. The exception to this is for contracts provided before the current supply period for the supply point. Contracts provided before the <code>supply_start_date</code> are allowed gaps since they represent historic periods of supply and cannot be used for billing in Kraken.",
        "possible_errors": [
            "gaps_or_overlaps_in_agreement_dates"
        ]
    },
    {
        "name": "Validate supply charge line items covered by a single agreement",
        "description": "Validate each supply charge has a single agreement with matching product code that covers the period defined by it's line items minimum <code>start_date</code> to maximum <code>end_date</code>.",
        "possible_errors": [
            "supply_charge_line_items_not_covered_by_single_agreement"
        ]
    },
    {
        "name": "Validate historical statement period end must not be in the future",
        "description": "Ensures that the historical statement period end date (last_statement_closing_date or latest transaction_date) is not set in the future.",
        "possible_errors": [
            "historical_statement_period_end_in_future"
        ]
    },
    {
        "name": "Validate that terms with supply type matches a supply point supply type",
        "description": "Validate that for terms containing a <code>supply_type</code> field that there is a supply point in the payload with a matching <code>supply_type</code>.",
        "possible_errors": [
            "term_supply_type_mismatch"
        ]
    },
    {
        "name": "Validate that supply addresses and supply points are provided if account contracts are provided",
        "description": "Validate that if <code>account_contracts</code> have been provided that a supply address with supply points has been provided under <code>supply_addresses</code>",
        "possible_errors": [
            "account_contracts_without_supply_points"
        ]
    },
    {
        "name": "Validate historical statement billing document identifier presence",
        "description": "Ensure that billing document identifiers are only provided for historical statement transactions and only when the relevant feature flag is enabled.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_missing",
            "historical_statement_billing_document_identifier_not_allowed_when_feature_flag_disabled"
        ]
    },
    {
        "name": "Validate current statement transactions do not provide <code>billing_document_identifier</code>",
        "description": "Validate that none of the current statement transactions include a <code>billing_document_identifier</code>, as this field is only applicable to historical statement transactions.",
        "possible_errors": [
            "billing_document_identifier_not_allowed_for_current_statement_transactions"
        ]
    },
    {
        "name": "Validate historical statement transaction billing document identifier",
        "description": "Ensure that the billing document identifier is the same for all historical statement transactions.",
        "possible_errors": [
            "historical_statement_billing_document_identifier_mismatch"
        ]
    },
    {
        "name": "Validate that contract terms' product codes are part of supply agreements",
        "description": "Ensure that any contract terms with product references have corresponding products in supply addresses.",
        "possible_errors": [
            "contract_term_product_code_not_in_agreements"
        ]
    },
    {
        "name": "Validate that business is provided if enforcing business contracts",
        "description": "Validate that the business field is provided if <code>enforce_business_contracts_exist</code> is set to True on the import supplier configuration.",
        "possible_errors": [
            "business_field_required"
        ]
    },
    {
        "name": "Validate that the sum of ledger balances equals the transfer balance",
        "description": "Validate that the sum of all <code>ledger_balance</code> provided for each ledger in <code>ledgers</code> equals the account-level <code>transfer_balance</code>.",
        "possible_errors": [
            "ledger_balances_not_equal_to_transfer_balance"
        ]
    },
    {
        "name": "Validate business user info against customer info",
        "description": "Validates that business user information matches the corresponding customer information for basic fields.",
        "possible_errors": [
            "customer_details_and_user_details_both_provided"
        ]
    },
    {
        "name": "Validate payment preference <code>ledger_identifier</code>",
        "description": "Ensure that the <code>ledger_identifier</code> provided has an equivalent <code>ledger</code> object with the same <code>ledger_identifier</code> .",
        "possible_errors": [
            "invalid_payment_preference_ledger_identifier"
        ]
    },
    {
        "name": "Validate that referenced ledgers are unique in payment preferences",
        "description": "Ensure that each ledger is referenced in at most one payment preference.",
        "possible_errors": [
            "duplicate_ledger_in_payment_preferences"
        ]
    },
    {
        "name": "Validate that valid instruction_identifier provided for <code>ACTIVE_NEW</code> payment preference",
        "description": "Ensure that <code>ACTIVE_NEW</code> payment preference has instruction_identifier from </code>payment_instructions</code> object.",
        "possible_errors": [
            "active_new_payment_preference_invalid_instruction_identifier"
        ]
    },
    {
        "name": "Validate that the transactions for a voucher do not exceed its value",
        "description": "Validate that the sum of all transaction values for a voucher is not greater than the value of the voucher.",
        "possible_errors": [
            "voucher_transactions_sum_greater_than_voucher_value"
        ]
    },
    {
        "name": "Validate that each voucher charge transaction id has a matching transaction id within a transaction of type CHARGE",
        "description": "Validate that each <code>voucher</code> <code>charge_transaction_id</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CHARGE in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_charge_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate that each voucher redemption credit transaction id has a matching transaction id within a transaction of type CREDIT",
        "description": "Validate that every <code>credit_transaction_id</code> in all <code>voucher_redemptions</code> in every <code>voucher</code> has a matching <code>transaction_id</code> within a transaction of <code>type</code> CREDIT in <code>current_statement_transactions</code>, <code>historical_statement_transactions</code> or <code>historical_billing_documents</code>.",
        "possible_errors": [
            "voucher_redemption_credit_transaction_id_not_found"
        ]
    },
    {
        "name": "Validate auto allocation of operations team",
        "description": "Validate that operations_team_name is provided if auto allocation is not configured.",
        "possible_errors": [
            "operations_team_provided_when_using_auto_allocation",
            "operations_team_should_be_provided"
        ]
    },
    {
        "name": "Validate that Kraken can calculate when to start billing the account",
        "description": "Validate that Kraken can calculate when to start billing the account. This is determined based on the existence of last billed to date, last statement closing date, and agreements.",
        "possible_errors": [
            "cannot_determine_responsible_for_billing_from_date"
        ]
    },
    {
        "name": "Validate all contracts have supply points",
        "description": "Validates that contracts provided in the payload have a corresponding supply point.",
        "possible_errors": [
            "agreement_has_no_matching_meter_point"
        ]
    },
    {
        "name": "Validate that a last billed to date has been provided correctly",
        "description": "Validate that last billed to date has been provided for electricity, gas and water meters. This validation does not apply to meters that have been exchanged where the new meter has already been billed. This validation is skipped if the account has not yet been billed and therefore has no historical statement data.",
        "possible_errors": [
            "last_billed_to_date_not_found"
        ]
    },
    {
        "name": "Validate that if historical statement transaction are provided then so is a last statement closing date or last billed to date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided in the payload then either a <code>last_statement_closing_date</code> or <code>last_billed_to_date</code> is also provided. If a <code>last_statement_closing_date</code> is not provided then the earliest <code>last_billed_to_date</code> on the account or supply points is used to determine when the last statement should have closed.",
        "possible_errors": [
            "historical_statement_transactions_without_last_statement_closing_date_or_last_billed_to_date"
        ]
    },
    {
        "name": "Validate unique transaction IDs",
        "description": "Validate that all transaction IDs provided are unique.",
        "possible_errors": [
            "duplicate_transaction_ids",
            "missing_transaction_id"
        ]
    },
    {
        "name": "Validate that current statement transactions are not before the current statement opening date",
        "description": "Validate that all <code>current_statement_transactions</code>, if provided, are not before the current statement opening date. This date is one day after the last statement closing date if provided, otherwise it is based on the last billed to date.",
        "possible_errors": [
            "current_statement_transaction_before_current_statement_opening_date"
        ]
    },
    {
        "name": "Validate current statement transactions are not before <code>last_billed_to_date</code>",
        "description": "Validate that there are no current statement transactions that occurred before the <code>last_billed_to_date</code> (this includes the supply point-level <code>last_billed_to_date</code>, as well as any meter- or register-level dates where applicable).",
        "possible_errors": [
            "current_statement_transaction_before_last_billed_to_date"
        ]
    },
    {
        "name": "Validate current statement transactions are after historical statement transactions",
        "description": "Validate that all current statement transactions are dated after all current historical statement transactions.",
        "possible_errors": [
            "historical_statement_transaction_after_current_statement_transaction"
        ]
    },
    {
        "name": "Validate that there are no historical statement transactions after the last statement closing date",
        "description": "Validate that if <code>historical_statement_transactions</code> are provided then none are later than the <code>last_statement_closing_date</code>. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "historical_statement_transaction_after_last_statement_closing_date"
        ]
    },
    {
        "name": "Validate that the last statement issue date is on or after the last statement closing date",
        "description": "Validate that the <code>last_statement_issue_date</code>, if given, is on or after the <code>last_statement_closing_date</code> given. If a <code>last_statement_closing_date</code> is not provided then this is inferred from the earliest <code>last_billed_to_date</code> on the account or supply points.",
        "possible_errors": [
            "last_statement_issued_before_closing_date"
        ]
    },
    {
        "name": "Validate <code>last_statement_balance</code> plus/minus <code>current_statement_transactions</code> equal <code>transfer_balance</code>",
        "description": "Validate that the sum of <code>current_statement_transactions</code> plus the <code>last_statement_balance</code> is equal to the <code>transfer_balance</code>. For example, if a <code>last_statement_balance</code> of 100 is provided, and the <code>current_statement_transactions</code> include one payment of 50, then the expected <code>transfer_balance</code> would 150. Transactions that are payments or credits add to the balance. Transactions that are repayments or charges subtract from the balance.",
        "possible_errors": [
            "balance_mismatch_on_transfer_balance"
        ]
    },
    {
        "name": "Validate that the summed historical statement transactions match the last statement balance",
        "description": "Validate that the sum of the <code>historical_statement_transactions</code> equals the <code>last_statement_balance</code>.",
        "possible_errors": [
            "historical_statement_transactions_balance_mismatch"
        ]
    },
    {
        "name": "Validate no duplicated ledgers are provided",
        "description": "Validate no duplicated ledger codes are in `ledgers` section.",
        "possible_errors": [
            "duplicate_ledger_entries_found"
        ]
    },
    {
        "name": "Validate identifiers are unique in ledgers",
        "description": "Validate identifier is not declared twice in ledgers.",
        "possible_errors": [
            "duplicate_identifiers_entries_found"
        ]
    },
    {
        "name": "Validate ledger identifiers are known",
        "description": "Validate ledger identifiers are among supply point identifiers.",
        "possible_errors": [
            "unknown_ledger_identifiers"
        ]
    },
    {
        "name": "Validate payment adequacy changes or last payment review date not both",
        "description": "Validate that only one of <code>payment_adequacy_changes</code> or <code>last_payment_review_date</code> is provided in the payload.",
        "possible_errors": [
            "payment_adequacy_changes_and_last_payment_review_date_provided"
        ]
    },
    {
        "name": "Validate no more than one property for unknown occupier",
        "description": "Validate that no more than one property is provided for an unknown occupier account.",
        "possible_errors": [
            "occupier_account_with_multiple_supply_addresses"
        ]
    },
    {
        "name": "Validate no direct debit reference for the occupier",
        "description": "Validate that if any customer is identified as an occupier, then no <code>dd_reference</code> is provided for the account. If a <code>dd_reference</code> is provided, then it implies that there is a known occupier for the account.",
        "possible_errors": [
            "dd_reference_for_occupier_account"
        ]
    },
    {
        "name": "Validate no unbilled period on former supply addresses",
        "description": "Validate that if a customer is no longer at the given supply address they have been fully billed. This check is performed if we are importing supply address history.",
        "possible_errors": [
            "unbilled_former_supply_address"
        ]
    },
    {
        "name": "Validate no contracts start before the supply start date",
        "description": "Validate that no contracts start before the supply start date of the associated meter point.",
        "possible_errors": [
            "agreement_starting_before_meter_point_ssd"
        ]
    },
    {
        "name": "Validate debt and debts",
        "description": "Validates that both debt and debts are not specified in the payload.",
        "possible_errors": [
            "debt_and_debts_are_defined"
        ]
    },
    {
        "name": "Validate at least one billable meter point is provided",
        "description": "Validate that account must have at least one billable meter point unless import config skip_meter_point_creation is ON or account is a portfolio lead, or account is an unmetered service, or account is an inactive account.",
        "possible_errors": [
            "no_supply_point_on_supply"
        ]
    },
    {
        "name": "Validate alternative phone number is unique",
        "description": "Validate customers defined in the payload do not have the same alternative phone numbers.",
        "possible_errors": [
            "duplicated_alternative_phone_numbers"
        ]
    },
    {
        "name": "Validate billing address style",
        "description": "Validate that a legacy billing address (<code>billing_address1</code> etc.) and new-style billing address (<code>billing_address</code> object) are not both provided.",
        "possible_errors": [
            "billing_address_new_style_and_legacy"
        ]
    },
    {
        "name": "Validate business type not provided for domestic accounts",
        "description": "Validate that a business type is not provided for domestic accounts.",
        "possible_errors": [
            "business_fields_provided_for_domestic_accounts"
        ]
    },
    {
        "name": "Validate all contracts in the payload cover last billed due date",
        "description": "Validate that at least one contract for a supply point should cover last billed due date.",
        "possible_errors": [
            "no_agreement_covering_last_billed_to_date"
        ]
    },
    {
        "name": "Validate that blackhole email addresses are paired with 'online' communication prefernence",
        "description": "Validate that the communication preference 'online' when a blackhole email address is provided.",
        "possible_errors": [
            "blackhole_email_with_online_comms"
        ]
    },
    {
        "name": "Validate customer family name",
        "description": "Validate the family name is provided for all customers on a domestic account.",
        "possible_errors": [
            "customer_family_name_required"
        ]
    },
    {
        "name": "Validate portfolio lead communication preference",
        "description": "Validates that portfolio lead is using ONLINE communication preference.",
        "possible_errors": [
            "invalid_portfolio_lead_communication_preference"
        ]
    },
    {
        "name": "Validate all billable meter points are covered by agreements in the payload",
        "description": "Validate that agreements have been provided for all billable meter points and vice versa for the period covered by Kraken from a billing perspective. A billable meter point is one that has an open-ended or future dated supply end date.",
        "possible_errors": [
            "meter_point_with_no_agreement",
            "meterpoint_with_agreement_not_on_supply"
        ]
    },
    {
        "name": "Validate transfer readings exist on active gas meters",
        "description": "Validate that each active gas meter has a single transfer reading provided.",
        "possible_errors": [
            "active_gas_meter_with_multiple_transfer_readings",
            "active_gas_meter_without_transfer_reading",
            "reading_meter_fully_billed"
        ]
    },
    {
        "name": "Validate transfer readings exist on active electricity registers",
        "description": "Validate that each active electricity meter register has a single transfer reading provided.",
        "possible_errors": [
            "missing_transfer_reading_for_register",
            "multiple_transfer_readings_for_register"
        ]
    },
    {
        "name": "Validate concession card and concession credids paid current year",
        "description": "Validates that only one customer with concession card and concession credids paid current year provided; customer with concession card needs to match with customer with concession credits paid current year.",
        "possible_errors": [
            "concession_cards_too_many_users",
            "concession_credits_and_cards_too_many_users",
            "concession_credits_paid_too_many_users"
        ]
    },
    {
        "name": "Validate payment terms apply to portfolio",
        "description": "Validate that portfolio lead account must have <code>apply_to_portfolio</code> set to true and only portfolio lead account can set <code>apply_to_portfolio</code> to true.",
        "possible_errors": [
            "invalid_apply_to_portfolio"
        ]
    },
    {
        "name": "Validate manually defined eligibility periods",
        "description": "Validates that manually defined rebate periods cannot be added without a primary address and some manually defined rebate periods need a concession card as well.",
        "possible_errors": [
            "manually_defined_eligibility_periods_without_concession_card",
            "manually_defined_rebate_periods_without_primary_address"
        ]
    },
    {
        "name": "Validate primary place of residence without concession card or credits paid or manually defined eligibility periods",
        "description": "Validates that only customer with concession card, credits paid or manually defined eligibility periods can have a primary place of residence.",
        "possible_errors": [
            "primary_place_of_residence_without_concession_card_or_credits_paid_or_rebate"
        ]
    },
    {
        "name": "Validate concession cards or credits paid without primary place of residence",
        "description": "Validates that concession cards cannot be loaded without a primary address and concession credits paid for the year cannot be recorded without a primary address except it is proprietor account.",
        "possible_errors": [
            "concession_cards_or_credits_paid_without_primary_place_of_residence"
        ]
    }
]