> For the complete documentation index, see [llms.txt](https://docs.merchant.alb.ua/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.merchant.alb.ua/platizhni-vidzheti-dlya-cms/magento-2/validaciya-customerdata.md).

# Валідація customerData

**Загальний опис логіки валідації**

Масив `customerData` формується у методі `prepareCustomerData` та проходить повну перевірку через сервіс `CustomerDataValidator`.

| **Назва поля**              | **Тип даних**    | **Обов'язкове** | **Макс. довжина** | **Джерело даних у Magento 2 (OrderInterface)**                                          | **Особливі правила валідації та фільтрації**                                                                                                                                                                                                                                                                                                                                                                                      |
| --------------------------- | ---------------- | --------------- | ----------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **senderBirthday**          | `date`           | Ні              | 50                | `$customer->getDob()` *(Тільки для зареєстрованих)*                                     | **Нове поле.** Попередньо нормалізується через `DateTimeNormalizer`. Валідується суворо за форматом `d.m.Y`.                                                                                                                                                                                                                                                                                                                      |
| **senderCustomerId**        | `string`         | **Так**         | 255               | Внутрішній метод `$this->getCustomerId($order)`                                         | Якщо порожнє або невалідне — викликає `LocalizedException`.                                                                                                                                                                                                                                                                                                                                                                       |
| **senderFirstName**         | `string`         | Ні              | 30                | `Customer Repository` (для клієнтів) або `$billingAddress->getFirstname()` (для гостей) | <ol start="1"><li><strong>Regex:</strong> Дозволені літери, цифри, дефіси, апострофи. Без спецсимволів по краях.</li></ol><p> </p><ol start="2"><li><strong>Не лише цифри:</strong> Не може складатися тільки з цифр.</li></ol><p> </p><ol start="3"><li><strong>Стоп-слова (строгий регістр):</strong> <code>NULL</code>, <code>3D SECURE</code>, <code>SURNAME</code>, <code>CARDHOLDER</code>, <code>UNKNOWN</code>.</li></ol> |
| **senderLastName**          | `string`         | Ні              | 30                | `Customer Repository` або `$billingAddress->getLastname()`                              | Аналогічно до `senderFirstName` (без перевірки стоп-слів).                                                                                                                                                                                                                                                                                                                                                                        |
| **senderMiddleName**        | `string`         | Ні              | 30                | `Customer Repository` або `$billingAddress->getMiddlename()`                            | Аналогічно до `senderLastName`.                                                                                                                                                                                                                                                                                                                                                                                                   |
| **senderEmail**             | `email`          | Ні              | 256               | `$billingAddress->getEmail()`                                                           | Валідується через нативний об'єкт Magento `Magento\Framework\Validator\EmailAddress`.                                                                                                                                                                                                                                                                                                                                             |
| **senderCountry**           | `string`         | Ні              | 3                 | `$billingAddress->getCountryId()`                                                       | Двозначний код Alpha2 конвертується в **цифровий код країни** (Numeric ISO) через `countryCodeProvider`.                                                                                                                                                                                                                                                                                                                          |
| **senderRegion**            | `string`         | Ні              | 255               | `$billingAddress->getRegion()`                                                          | Стандартна перевірка довжини.                                                                                                                                                                                                                                                                                                                                                                                                     |
| **senderCity**              | `string`         | Ні              | 25                | `$billingAddress->getCity()`                                                            | Стандартна перевірка довжини.                                                                                                                                                                                                                                                                                                                                                                                                     |
| **senderStreet**            | `string`         | Ні              | 35                | `$billingAddress->getStreet()[0]`                                                       | **Особливість:** Береться тільки перший рядок масиву вулиць Magento.                                                                                                                                                                                                                                                                                                                                                              |
| **senderAdditionalAddress** | `string`         | Ні              | 255               | *Не заповнюється в* `prepareCustomerData`                                               | Задекларовано в правилах, але за замовчуванням передається пустим (і видаляється).                                                                                                                                                                                                                                                                                                                                                |
| **senderIp**                | `ip`             | Ні              | —                 | Внутрішній метод `$this->getCustomerIp()`                                               | Валідується через нативний об'єкт Magento `Magento\Framework\Validator\Ip`.                                                                                                                                                                                                                                                                                                                                                       |
| **senderPhone**             | `numeric_string` | Ні              | 20                | `$billingAddress->getTelephone()`                                                       | **Жорстке правило:** Має містити **тільки** цифри. Будь-які інші символи (`+`, `-`, пробіли) провалять валідацію.                                                                                                                                                                                                                                                                                                                 |
| **senderZipCode**           | `string`         | Ні              | 50                | `$billingAddress->getPostcode()`                                                        | Стандартна перевірка довжини.                                                                                                                                                                                                                                                                                                                                                                                                     |
