Validation Rules for Individuals

Individual — Field Validation Rules (with Enums)


Character policy for names

Validation is based on a strict whitelist.

  • Disallowed special characters: ?!§&#{[\@]}=+^$%*<>;".

  • Allowed: standard letters (including accents like é, è, ô), hyphen (-), apostrophe ('), and language‑specific characters (e.g., Ł, Ø).

  • FR: Les caractères typiques présents dans certains noms comme le trait d’union (-), l’apostrophe ('), les lettres accentuées (é, è, ô, etc..) ou les caractères propres à certaines langues comme Ł ou Ø sont, quant à eux, acceptés.

    All other characters (digits, punctuation, special symbols, etc.) are automatically replaced with spaces.

String Constraints

In addition to character filtering, the following structural rules must be enforced:

ConstraintRequirement
Maximum Length35 characters.
Hyphen PlacementStrings cannot start or end with a hyphen (-).
Space NormalizationMultiple consecutive spaces must be collapsed into a single space.
TrimmingLeading and trailing whitespace must be removed.

Quick scan table

FieldRules
First name1–35 chars. Apply Character policy for names.
Last name1–35 chars. Apply Character policy for names.
Other name≤ 35 chars. Apply Character policy for names.
EmailMust match email regex (see Regex library).
Important: Email addresses are currently restricted to 60 characters.
Phone numberMust match phone regex (see Regex library). Optional at account creation; required to complete onboarding.
Birth dateFormat DD/MM/YYYY; not today or future; year ≥ 1920. (Optional: min age ≥ 18; partner‑configurable, floor at 12.)
Birth cityString, 1–90 chars. Optional at creation; required to complete onboarding.
Birth provinceEnum (Italy only; see BOI list). Optional; required if residence country = IT.
Birth countryISO 3166‑1 alpha‑2. Required.
NationalitiesISO 3166‑1 alpha‑2 (single or multiple). Required.
Street1–256 chars.Required to complete onboarding.
Complementary street info1–256 chars. Optional.
Postal codeAlphanumeric, 1–90 chars. Optional; required to complete onboarding.
CityString, 1–90 chars. Optional; required to complete onboarding.
ProvinceEnum (Italy only; see BOI list). Optional; required if residence country = IT.
Country of residenceISO 3166‑1 alpha‑2. Required.
PEP statusEnum PEP_STATUS {NO, YES, CLOSE}. Optional at creation; required to complete onboarding.
PEP positionEnum PEP_POSITION (see below). Required if status ∈ {YES, CLOSE}.
PEP other positionString. Required if position = OTHER.
PEP start dateDate DD/MM/YYYY. Required if status ∈ {YES, CLOSE}.
PEP end dateDate DD/MM/YYYY. Optional.
PEP close relationshipEnum PEP_CLOSE_RELATIONSHIP. Required if status = CLOSE.
PEP full name1–35 chars. Required if status = CLOSE.
OccupationEnum PROFESSIONAL_ACTIVITY (PCS codes). Optional at creation; required to complete onboarding for lenders/investors/project holders.
Annual revenueEnum INCOME_TIER (6 tiers; see list). Optional at creation; required to complete onboarding for lenders/investors/project holders.
Estimated wealthEnum WEALTH_TIER (7 tiers; see list). Optional at creation; required to complete onboarding for lenders/investors/project holders.
IFI taxBoolean. Required if residence country = FR.
Legal capacity — typeEnum CAPACITY_TYPE. Optional at creation; required to complete onboarding.
Legal capacity — protection typeEnum PROTECTION_TYPE. Required if type = PROTECTED_ADULT.
Legal capacity — otherString 1–90. Required if protectionType = OTHER.
Type of projectEnum PROJECT_TYPE. Optional at creation; required if profile = project holder.
Wedding relationEnum WEDDING_RELATION_TYPE. Required if project.type = WEDDING.
Project description≤ 256 chars. Required if project.type ∈ {CHARITY, OTHER}.
Project websiteURL regex. Required if project.type ∈ {CHARITY, OTHER}.
Board member functionEnum (not specified in this extract).

Enumerations

Reference lists — Parameters for Triggering an Onboarding
Use these authoritative lists when populating payloads. They’re large, so we link out instead of inlining.

protectionTypecomplete_enum_lists.xlsx


professionalSituationIND_ProfessionalSituation.pdf


provinceAddressProvince.pdf


birthProvinceBirthProvince.pdf

PEP

  • PEP_STATUS: NO, YES, CLOSE
  • PEP_POSITION: POLITICAL_LEADER, POLITICAL_REPRESENTATIVE, JUDICIAL_OFFICIAL, FINANCIAL_AUDITOR, BANK_EXECUTIVE, DIPLOMATIC_REPRESENTATIVE, MILITARY_LEADER, ADMINISTRATIVE_OFFICIAL, ORGANIZATIONAL_OFFICIAL, OTHER
  • PEP_CLOSE_RELATIONSHIP: PARTNER, CHILD, PARENT

Professional & Financial

  • PROFESSIONAL_ACTIVITY: list of PCS codes (reference: roles.partnerActivityType / PCS catalog)

  • INCOME_TIER: FIRST_TIER, SECOND_TIER, THIRD_TIER, FOURTH_TIER, FIFTH_TIER, SIXTH_TIER

  • WEALTH_TIER: FIRST_TIER, SECOND_TIER, THIRD_TIER, FOURTH_TIER, FIFTH_TIER, SIXTH_TIER, SEVENTH_TIER

  • SOURCE_OF_FUNDS (array of enum):

    • INCOME
    • REAL_ESTATE_PROPERTIES
    • SAVINGS_ACCUMULATED_OVER_SEVERAL_YEARS
    • DONATION_OR_INHERITANCE
    • SALE_OF_A_STOCK_PORTFOLIO
    • TRANSFER_OF_COMPANY_SHARES
    • WINNING_FROM_GAMES_OR_CONTESTS
    • SURRENDER_OF_A_CAPITALIZATION_CONTRACT_OR_LIFE_INSURANCE_POLICY
    • SALE_OF_MOVABLE_ASSETS_GOODWILL_INTELLECTUAL_PROPERTY_RIGHTS
    • SALE_OF_CURRENCY_GOLD_OR_CRYPTOCURRENCIES
    • FINANCIAL_INVESTMENTS
    • OTHER_OPERATIONS

Legal capacity

  • CAPACITY_TYPE: LEGAL_AGE_AND_CAPACITY, PROTECTED_ADULT, MINOR_NOT_EMANCIPATED, MINOR_EMANCIPATED
  • PROTECTION_TYPE (required when CAPACITY_TYPE = PROTECTED_ADULT): SAFEGUARDING_OF_JUSTICE, CURATORSHIP, GUARDIANSHIP, OTHER

Project

  • PROJECT_TYPE: WEDDING, FAREWELL, NEWBORN, BIRTHDAY, CHARITY, OTHER
  • WEDDING_RELATION_TYPE (when PROJECT_TYPE = WEDDING): BRIDE_GROOM, OTHER
  • SALARY_ADVANCE_REASON_TYPE: UNFORESEEN_BILLS, URGENT_FAMILY_EXPENSES, WEDDING, BIRTH, HOUSE_MOVE, HOLIDAYS, OTHER

Address (Italy‑specific)

  • Subdivision / Province enums: use BOI enumerations (e.g., AOSTA, …) when country = IT

Visa applicant — Financial support (additional profile)

  • VISA_APPLICANT_ROLE: STUDENT, JOB_SEEKER
  • isPayer: boolean
  • PAYER_RELATIONSHIP_LINK (when isPayer = false): MOTHER_FATHER, RELATIVES, SIBLINGS, GRAND_PARENTS, HUSBAND_WIFE, LIFE_PARTNER, OTHER
  • Payer’s income/wealth/sourceOfFunds (when isPayer = true): use INCOME_TIER, WEALTH_TIER, SOURCE_OF_FUNDS

Regex library (suggested patterns)

Pragmatic patterns for client‑side/ingress checks. Use server‑side validators and canonical parsers for final enforcement.

Email (simple, practical)

^[^\s@]+@[^\s@]+\.[^\s@]{2,}$

Phone number (E.164 international)

^\+?[1-9]\d{1,14}$

Date — DD/MM/YYYY with year ≥ 1920

^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/(19[2-9]\d|20\d{2})$

Note: This regex does not validate calendar edge cases (e.g., 31/02). Apply a date parser to enforce real dates and the not today / not future rule.

ISO country codes (alpha‑2)

^[A-Z]{2}$

Website / URL (basic, http/https or bare www)

^(https?:\/\/)?([\w-]+\.)+[\w-]{2,}(\/[^\s]*)?$

For production, prefer a URL parser over regex.


Age rules (optional, partner‑configurable)

  • Standard: minimum age ≥ 18 years
  • Custom: partner configuration can lower the minimum age but not below 12 years

Implementation tips

  • Enforce length limits at both UI (maxlength) and API (schema) levels
  • Normalize names (trim, collapse repeated spaces) but do not strip valid characters from the policy above
  • Validate country codes against an ISO‑3166 list; reject unknown codes even if regex matches
  • For PEP periods, ensure startDate ≤ endDate and dates are in the past
  • For address lines, allow common punctuation (comma, period) unless your business rules require stricter filters
  • Respect collection rules from the data model: many fields are optional at account creation but required to complete onboarding; also apply conditional requirements (Italy‑specific provinces, PEP conditionals, project‑type conditionals)