> 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/prestashop/validaciya-customerdata.md).

# Валідація customerData

### агальний опис логіки валідації <a href="#zagalnii-opis-logiki-validaciyi" id="zagalnii-opis-logiki-validaciyi"></a>

Збір даних клієнта виконується в методі `prepareCustomerData()`. Об'єкт заповнюється на основі даних профілю користувача (`$customer`), контексту системи (`$context`) та адреси доставки замовлення (`id_address_delivery`). Після цього дані передаються на перевірку в `CustomerDataValidator`.

| **Назва поля**              | **Тип даних**    | **Обов'язкове** | **Макс. довжина** | **Джерело даних у PrestaShop**                                                                                                         | **Особливі правила валідації та фільтрації**                                                                                                                                                                                                                                                                                                                                                                                                      |
| --------------------------- | ---------------- | --------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **senderBirthday**          | `date`           | Ні              | 50                | `$customer->birthday`                                                                                                                  | Передається лише якщо значення не дорівнює за замовчуванням `'0000-00-00'`. Нормалізується через `DateTimeNormalizer` до формату `d.m.Y`.                                                                                                                                                                                                                                                                                                         |
| **senderCustomerId**        | `string`         | **Так**         | 255               | <p><code>$customer->id</code></p><p> </p><p><em>(Для гостей:</em> <code>(string)$customer->id ?? $customer->email</code><em>)</em></p> | Якщо порожнє або не валідне — викидає `LocalizationException`.                                                                                                                                                                                                                                                                                                                                                                                    |
| **senderFirstName**         | `string`         | Ні              | 30                | `$customer->firstname`                                                                                                                 | <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->lastname`                                                                                                                  | Аналогічно до `senderFirstName` (без перевірки стоп-слів).                                                                                                                                                                                                                                                                                                                                                                                        |
| **senderMiddleName**        | `string`         | Ні              | 30                | *Не заповнюється в* `prepareCustomerData`                                                                                              | Правило задекларовано в SDK/валідаторі, але PrestaShop не передає його за замовчуванням.                                                                                                                                                                                                                                                                                                                                                          |
| **senderEmail**             | `email`          | Ні              | 256               | `$customer->email`                                                                                                                     | Валідується через нативний PHP флаг `filter_var($value, FILTER_VALIDATE_EMAIL)`.                                                                                                                                                                                                                                                                                                                                                                  |
| **senderCountry**           | `string`         | Ні              | 3                 | `$context->country->iso_code`                                                                                                          | Двозначний код країни (Alpha2) перетворюється в числовий ISO-код за допомогою `countryCodeProvider`.                                                                                                                                                                                                                                                                                                                                              |
| **senderRegion**            | `string`         | Ні              | 255               | `$customerAddress['state']`                                                                                                            | Отримується через метод `$customer->getSimpleAddress()`.                                                                                                                                                                                                                                                                                                                                                                                          |
| **senderCity**              | `string`         | Ні              | 25                | `$customerAddress['city']`                                                                                                             | Стандартна перевірка довжини.                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **senderStreet**            | `string`         | Ні              | 35                | `$customerAddress['address1']`                                                                                                         | Стандартна перевірка довжини.                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **senderAdditionalAddress** | `string`         | Ні              | 255               | `$customerAddress['address2']`                                                                                                         | Стандартна перевірка довжини.                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **senderIp**                | `ip`             | Ні              | —                 | `Tools::getRemoteAddr()`                                                                                                               | Валідується через `filter_var($value, FILTER_VALIDATE_IP)`. Якщо IP невалідний — поле видаляється.                                                                                                                                                                                                                                                                                                                                                |
| **senderPhone**             | `numeric_string` | Ні              | 20                | `$customerAddress['phone'] ?? $customerAddress['phone_mobile']`                                                                        | <p><strong>Фолбек:</strong> Якщо домашній телефон відсутній, береться мобільний.</p><p> </p><p>⚠️ <strong>Увага:</strong> Має містити <em>тільки</em> цифри через перевірку <code>ctype\_digit</code>.</p>                                                                                                                                                                                                                                        |
| **senderZipCode**           | `string`         | Ні              | 50                | `$customerAddress['postcode']`                                                                                                         | Стандартна перевірка довжини.                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **senderGender**            | `string`         | Ні              | —                 | Обчислюється на основі `$customer->id_gender`                                                                                          | **Кастомне поле.** Мапиться так: `1` ➡️ `'Male'`, `2` ➡️ `'Female'`, все інше ➡️ `'Other'`. Проходить повз цикл валідації правил.                                                                                                                                                                                                                                                                                                                 |
