# Функциональность ОК Отчет комитента + Платежки
Формирует "Отчет комитента" и платежки по агентским договорам в 1С Операционной компании.
# График выполнения
Выполняется вручную.
# Требования
**Проверки:**
- Не должно допускаться формирование отчетов для одного юр. лица, которые пересекаются по датам
**Логгирование:**
- Старт работы обработки (дата, значения входных параметров);
- Успех выполнения обработки (дата, значения входных параметров);
- Ошибка выполнения работы (дата, значения входных параметров, описание ошибки).
**Интерфейс:**
- Выбор дата начала (включительно);
- Выбор даты окончания (включительно).
# Источник данных
БД для внешних интеграций.
# Логика работы
1. Получить список операций за выбранный период из БД (надо быть внимательным с таймзонами; все данные должны выгружаться по Московскому часовому поясу);
1. Загрузить информацию обо всех используемых ЮЛ и договорах;
1. Сформировать "Отчет комитента" по всем юр. лицам, которые имели операции за период;
1. Проводки и документы для операций каждого типа описаны ниже;
1. Сформировать платежки / счета.
## Формирование проводок
## `type == income_agent_delivery`
Клиенту оказана услуга доставки, которая была осуществлена принципалом.
| Дт | Кт | Сумма | Пример | Комментарий | Документы 1С | Налоговый учет |
| - | - | - | - | ---- | - | - |
| 62.01 | 90.01.1 субконто "АВ Курьерская доставка" | @agent_amount | 2 | Отражено агентское вознаграждение по курьерской доставке | Отчет комитента (Доставка) | - |
| 76.09.4 | 62.01 | @agent_amount | 2 | Зачтено агентское вознаграждение по курьерской доставке | Отчет комитента (Доставка) | - |
### `type == income_own_services`
Клиенту оказана услуга доставки, которая была осуществлена сервисом.
Проводок не осуществляется (не агентская операция).
### `type == income_agent_merchant_payment_to_merchant`
Мерчант на площадке продал свои товары / услуги клиенту и принял оплату самостоятельно.
Проводок не осуществляется.
### `type == income_agent_merchant`
Клиенту были проданы товары / услуги мерчанта и оплата была принята сервисом.
| Дт | Кт | Сумма | Пример | Комментарий | Документы 1С | Налоговый учет |
| - | - | - | - | ---- | - | - |
| 62.01 | 90.01.1 субконто "АВ Товары" | @agent_amount | 300 | Отражено агентское вознаграждение по товарам (с мерчантом) | Отчет комитента (Мерчант) | - |
| 76.09.1 | 62.01 | @agent_amount | 300 | Зачтено агентское вознаграждение по товарам (с мерчантом) | Отчет комитента (Мерчант) | - |
### `type == refund_place`
Возврата клиенту за товары / услуги мерчанта за счет мерчанта. Отражается, как строчка с отрицательными значениями в отчете комитенту.
| Дт | Кт | Сумма | Пример | Комментарий | Документы 1С | Налоговый учет |
| - | - | - | - | ---- | - | - |
| 76.09.1 | 62.01 | @agent_amount | 300 | Уменьшить сумму выручки по АВ (с мерчантом) | Отчет комитента (Мерчант) | - |
| 62.01 | 90.01.1 Субконто "АВ Товары" | @agent_amount | 300 | Уменьшить сумму выручки по товарам (с мерчантом) | Отчет комитента (Мерчант) | - |
### `type == surcharge`
Доплата мерчанту за счет сервиса. Отражается, как отдельная строчка с в отчете комитенту.
| Дт | Кт | Сумма | Пример | Комментарий | Документы 1С | Налоговый учет |
| - | - | - | - | ---- | - | - |
| 62.01 | 90.01.1 субконто "АВ Товары" | @agent_amount | 300 | Отражено агентское вознаграждение по товарам (с мерчантом) | Отчет комитента (Мерчант) | - |
| 76.09.1 | 62.01 | @agent_amount | 300 | Зачтено агентское вознаграждение по товарам (с мерчантом) | Отчет комитента (Мерчант) | - |
## Формирование платежек / счетов
Формируются по каждому договору (`@contract_id`) отдельно.
### Для мерчантов
1. Выбрать операции с типом `@type == income_agent_merchant` и `@type == surcharge` (Доплаты);
2. Посчитать размер выплаты по каждой операции: `@pay_to_principal - @agent_amount`
3. Посчитать общий размер выплаты мерчанту (сумма выплат из предыдущего пункта);
4. Выбрать операции с типом `@type == income_agent_merchant_payment_to_merchant` (мерчант получил оплату самостоятельно);
5. Посчитать общий размер задолженности мерчанта (сумма операций из предыдущего пункта по полю `@agent_amount`);
6. Посчитать сумму возвратов за счет мерчанта: выбрать операции с типом `@type == refund_place`, сумма от `@pay_to_principal - @agent_amount` по каждому возврату.
7. Рассчитать итоговый результат: `{размер задолженности операционной компании (пункт 3)} - {размер задолженности мерчанта (пункт 5)} - {сумма возвратов за счет мерчанта (пункт 6) }`
8. Сформировать документы:
- Если мы должны сделать выплату (итоговый результат > 0): сформировать платежку
- Если мерчант должен оплатить наши услуги (итоговый результат < 0): сформировать счет
- Если итоговый результат равен 0: ничего не делать
### Для сервисных компаний
1. Выбрать операции с типом `@type == income_agent_delivery`
2. Посчитать размер выплаты по каждой операции: `@pay_to_principal - @agent_amount`
3. Сформировать платежку на сумму выплат из предыдущего пункта