Files
erv-clientright/PROJECT_STRUCTURE.md

246 lines
9.2 KiB
Markdown
Raw Permalink Normal View History

2026-03-13 10:42:01 +03:00
# Структура проекта - Детальное описание
## Обзор архитектуры
Проект состоит из нескольких версий формы, каждая из которых может иметь свои особенности. Основная рабочая версия находится в директории `/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. Делайте резервные копии перед крупными изменениями