Validation Rules for Individuals

Individual — Field Validation Rules (with Enums)


Character policy for names

  • 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.

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).
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)