# Структура проекта - Детальное описание ## Обзор архитектуры Проект состоит из нескольких версий формы, каждая из которых может иметь свои особенности. Основная рабочая версия находится в директории `/ticket/`. ## Основные компоненты ### 1. Frontend (Клиентская часть) #### `index.php` Главный файл формы, содержит: - HTML-разметку многошаговой формы - PHP-код для получения IP и региона пользователя - Интеграцию с внешними API (ip-api.com) - Структуру из 3 шагов: - Шаг 1: SMS-подтверждение и проверка полиса - Шаг 2: Информация о страховом случае - Шаг 3: Персональные данные и документы #### `js/common.js` Основной JavaScript файл, реализует: - Валидацию форм на каждом шаге - Маски ввода (телефон, ИНН, даты, банковские реквизиты) - Логику переключения между шагами - Отправку SMS-кодов - Загрузку и валидацию файлов - Конвертацию HEIC в JPEG - AJAX-запросы к серверу - Интеграцию с DaData API для автодополнения #### `css/main.css` и `css/custom.css` Стили для формы, включая: - Адаптивный дизайн - Стили для шагов формы - Стили для загрузки файлов - Модальные окна ### 2. Backend (Серверная часть) #### `database.php` Проверка полисов в базе данных: - Подключение к MySQL - Проверка номера полиса - Валидация тарифов - Проверка сроков действия полиса - Возврат JSON-ответа с результатами #### `sms-test.php` Тестирование отправки SMS: - Генерация кода подтверждения - Отправка SMS на указанный номер - Логирование операций #### `file-server.php` (если существует) Обработка загрузки файлов на сервер ### 3. Интеграция с CRM #### Основной endpoint `https://form.clientright.ru/server_new.php` Обрабатывает: - Данные формы из POST-запроса - Загруженные файлы - Отправку данных в CRM через `capture.php` - Логирование операций #### Веб-сервисы CRM `https://crm.clientright.ru/webservice.php` Операции: 1. **getchallenge** - получение токена 2. **login** - авторизация и получение sessionId 3. **CreateContact** - создание/обновление клиента 4. **CreateAccount** - создание/обновление контрагента 5. **CreateProject** - создание проекта 6. **GetFilesList** - получение списка файлов клиента ### 4. База данных #### Структура таблицы `lexrpiority` Поля (предположительно): - `inn` или `police_number` - номер полиса - `birthday` - дата рождения - `insured_from` - дата начала действия - `insured_to` - дата окончания действия - `tariff` - тариф полиса #### Валидные тарифы **Базовые тарифы:** - STB0048, STB1099, STB1100, STB2099 - AVS21500, AVS22500 **Дополнительные тарифы:** - SPV0001-SPV0005, STV0090 - SPV1001-SPV1005, SPV2001-SPV2005 - OPV1001-OPV1005, OPV2001-OPV2005 ### 5. Внешние библиотеки #### JavaScript библиотеки - **jQuery 3.6.3** - основной фреймворк - **Inputmask** - маски ввода - **Datepicker** - выбор дат - **intl-tel-input** - ввод телефонных номеров - **Fancybox** - модальные окна - **heic2any** - конвертация HEIC в JPEG - **suggestions-jquery** - автодополнение адресов (DaData) #### PHP библиотеки (Composer) - **PHPMailer** - отправка email - **FPDF/FPDI** - работа с PDF - **PDF Merger** - объединение PDF ### 6. Поток данных ``` Пользователь заполняет форму ↓ Валидация на клиенте (JavaScript) ↓ Отправка данных на server_new.php ↓ Обработка файлов и данных ↓ Отправка в CRM через capture.php ↓ Получение sessionId через веб-сервисы ↓ Создание/обновление клиента (CreateContact) ↓ Создание/обновление контрагента (CreateAccount) ↓ Создание проекта (CreateProject) ↓ Загрузка файлов в CRM ↓ Отправка подтверждающего email ↓ Возврат результата пользователю ``` ## Версии проекта ### `/ticket/` - Основная рабочая версия Используется в продакшене. ### `/ticket3/` - Альтернативная версия Возможно, содержит изменения или эксперименты. ### `/ervws/` - Версия для веб-сервисов Версия с акцентом на веб-сервисы. ### `/test/` - Тестовая версия Для тестирования новых функций. ### `/public_html/` - Публичная версия Публичная версия для клиентов. ## Конфигурация полей формы ### Поля клиента (data-ws_type="client") - `firstname` - Имя - `lastname` - Фамилия - `secondname` - Отчество - `mobile` - Телефон - `email` - Email - `birthday` - Дата рождения - `mailingstreet` - Адрес регистрации - `inn` - ИНН - `code` - SMS-код ### Поля проекта (data-ws_type="project") - `cf_1887` - Дата начала страхования (insured_from) - `cf_1889` - Дата окончания страхования (insured_to) - `cf_1899` - Код документа - `cf_1804` - Серия и номер документа - `cf_2502` - Согласие на обработку данных ### Поля контрагента (data-ws_type="contractor") - `inn` - ИНН - `ogrn` - ОГРН - `accountname` - Наименование - `address` - Адрес - `email` - Email - `phone` - Телефон - `website` - Сайт ### Другие поля (data-ws_type="other") - `cf_2446` - Флаг наличия в базе - `cf_1885` - Номер полиса - `cf_1726` - Тип события - `cf_2566` - Дата страхового случая - `cf_2568` - Номер рейса/поезда - `description` - Описание ситуации - И другие кастомные поля ## Безопасность 1. **Валидация файлов:** - Проверка расширений - Проверка MIME-типов - Ограничение размера (5 МБ) - Ограничение количества (10 файлов) 2. **Валидация данных:** - Проверка обязательных полей - Валидация email - Валидация телефона - Проверка форматов дат 3. **Защита от атак:** - Экранирование данных - Использование prepared statements (рекомендуется) - Валидация на сервере - CSRF-токены (если реализованы) ## Логирование Логи сохраняются в: - `logs/logfile.log` - общие логи - `formlog/` - логи форм - JSON-файлы с префиксом `resend_log_` - логи повторной отправки ## Тестирование ### Тестовый режим формы Добавьте `?demodata=1` к URL для автоматического заполнения всех полей. ### Тестовые данные для API - ИНН: `643922466250` - СМС-код: `795372` ## Рекомендации по разработке 1. Всегда тестируйте изменения в `/test/` перед применением в продакшене 2. Используйте версионирование для отслеживания изменений 3. Логируйте важные операции 4. Валидируйте данные на сервере, не только на клиенте 5. Используйте prepared statements для SQL-запросов 6. Регулярно проверяйте логи на ошибки 7. Делайте резервные копии перед крупными изменениями