Module: SEPA::Profiles::SPS

Defined in:
lib/sepa_rator/profiles/sps.rb

Overview

Swiss Payment Standards (SPS) profiles, published by the Payments Committee Switzerland (PaCoS) under SIX Group governance.

SPS profiles compose from ISO directly — not EPC — because Switzerland accepts both EUR and CHF for domestic and SEPA payments, whereas EPC restricts currency to EUR.

The vendored XSDs in ‘lib/schema/sps/` are downloaded from www.six-group.com (Download Center – Payment Standards).

Constant Summary collapse

SPS_CURRENCIES =
%w[EUR CHF].freeze
CT_SPS_RULES =

Accept EUR and CHF; charge_bearer nil or SLEV; service_level optional (defaults to SEPA for EUR but not for CHF — see CreditTransferTransaction#initialize).

lambda do |txn, _profile|
  (txn.charge_bearer.nil? || txn.charge_bearer == 'SLEV') &&
    SPS_CURRENCIES.include?(txn.currency) &&
    (txn.service_level.nil? || txn.service_level == 'SEPA')
end
DD_SPS_RULES =

SEPA Direct Debit is EUR-only, even in Switzerland. CHF direct debits use a separate Swiss domestic scheme (LSV+/BDD) outside the scope of this gem.

lambda do |txn, _profile|
  txn.instruction_priority.nil? &&
    (txn.charge_bearer.nil? || txn.charge_bearer == 'SLEV') &&
    txn.currency == 'EUR' &&
    ISO::DD_V1_SEQUENCE_TYPES.include?(txn.sequence_type) &&
    %w[CORE B2B].include?(txn.local_instrument)
end
FEATURES =
{
  requires_structured_address: true,
  requires_country_code_on_address: true
}.freeze
SCT_03 =

─── SEPA Credit Transfer ────────────────────────────────────────────

ProfileRegistry.register(
  ISO::SCT_03.with(id: 'sps.sct.03', features: FEATURES,
                   accept_transaction: CT_SPS_RULES)
)
SCT_09 =
ProfileRegistry.register(
  ISO::SCT_09.with(id: 'sps.sct.09', xsd_path: 'sps/pain.001.001.09.ch.03.xsd',
                   features: FEATURES, accept_transaction: CT_SPS_RULES)
)
SCT_13 =
ProfileRegistry.register(
  ISO::SCT_13.with(id: 'sps.sct.13', features: FEATURES,
                   accept_transaction: CT_SPS_RULES)
)
SDD_02 =

The Swiss SDD v02 XSD uses a non-ISO namespace (www.six-interbank-clearing.com/…) for Swiss domestic direct debit. For standard SEPA SDD, the ISO baseline XSD applies.

ProfileRegistry.register(
  ISO::SDD_02.with(id: 'sps.sdd.02', features: FEATURES,
                   accept_transaction: DD_SPS_RULES)
)
SDD_08 =
ProfileRegistry.register(
  ISO::SDD_08.with(id: 'sps.sdd.08', features: FEATURES,
                   accept_transaction: DD_SPS_RULES)
)
SDD_12 =
ProfileRegistry.register(
  ISO::SDD_12.with(id: 'sps.sdd.12', features: FEATURES,
                   accept_transaction: DD_SPS_RULES)
)