{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "document-order.schema.json",
    "title": "Order",
    "description": "Документ 'Заявка'",
    "allOf": [
        {
            "title": "Document",
            "$ref": "document.schema.json"
        }
    ],
    "properties": {
        "status": {
            "enum": [
                "DRAFT",
                "NEW",
                "CUSTOMER_ADJUSTMENT",
                "CUSTOMER_APPROVAL",
                "COST_ADJUSTMENT",
                "INVOICE_PREPARATION",
                "AWAITING_FUNDS",
                "EXECUTION",
                "CUSTOMER_REPORT_SIGNING",
                "REPORT_ADJUSTMENT",
                "RECEIPT_CONFIRMATION",
                "DONE",
                "CANCELLED",
                "INVOICE_ADJUSTMENT",
                "SENT_FUNDS",
                "RECEIVED_FUNDS",
                "INSTRUCTION_PREPARATION",
                "CUSTOMER_INSTRUCTION_SIGNING",
                "INSTRUCTION_ADJUSTMENT",
                "CONTRACTOR_REPORT_VERIFICATION",
                "DRAFT_CONTRACTOR",
                "REPORT_PREPARATION"
            ],
            "description": "Статус"
        },
        "submittedAt": {
            "description": "Дата и время отправки клиентом исполнителю",
            "type": "string",
            "format": "datetime"
        },
        "verifiedAt": {
            "description": "Дата и время отклонения/одобрения исполнителем",
            "type": "string",
            "format": "datetime"
        },
        "contract": {
            "$ref": "document-contract.schema.json",
            "description": "Договор к которому привязана заявка"
        },
        "reportDate": {
            "description": "Дата отчёта",
            "type": "string",
            "format": "date"
        },
        "subagentInstructionDate": {
            "description": "Дата поручения субагенту",
            "type": "string",
            "format": "date"
        },
        "subagent": {
            "$ref": "subagent.schema.json",
            "description": "Субагент"
        },
        "subsidiary": {
            "$ref": "subsidiary.schema.json",
            "description": "Плательщик/Получатель"
        },
        "subsidiaryBankAccount": {
            "$ref": "common/_common.schema.json#/bankAccount",
            "description": "Счет плательщика"
        },
        "preferredSubsidiary": {
            "description": "Предпочитаемый плательщик",
            "type": "object",
            "properties": {
                "isSpecified": {
                    "description": "Указан Предпочитаемый плательщик",
                    "type": "boolean"
                },
                "country": {
                    "description": "Страна плательщика",
                    "$ref": "common/_common.schema.json#/country"
                },
                "bank": {
                    "description": "Банк плательщика",
                    "$ref": "swift.schema.json"
                },
                "bankCountry": {
                    "description": "Страна банка плательщика",
                    "$ref": "common/_common.schema.json#/country"
                },
                "comment": {
                    "description": "Комментарий",
                    "type": "string"
                }
            }
        },
        "counterparty": {
            "description": "Информация о контрагенте",
            "type": "object",
            "properties": {
                "name": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "Наименование"
                },
                "country": {
                    "$ref": "common/_common.schema.json#/country",
                    "description": "Страна"
                },
                "address": {
                    "type": "string",
                    "description": "Адрес"
                },
                "website": {
                    "type": "string",
                    "description": "Веб-сайт"
                }
            },
            "required": [
                "name",
                "country",
                "address"
            ]
        },
        "payment": {
            "description": "Информация о платеже",
            "type": "object",
            "properties": {
                "currencyCounterparty": {
                    "$ref": "common/_common.schema.json#/currency",
                    "description": "Валюта платежа по заявке"
                },
                "currencyCustomer": {
                    "$ref": "common/_common.schema.json#/currency",
                    "description": "Валюта расчетов агента с клиентом"
                },
                "exchangeRate": {
                    "type": "number",
                    "description": "Курс"
                },
                "exchangeRateNotValidAfter": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Курс не действителен после"
                },
                "amountCounterparty": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "multipleOf": 0.01,
                    "description": "Сумма входящего платежа контрагенту от агента или исходящего платежа от контрагента агенту, в валюте контрагента"
                },
                "amountCustomer": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "multipleOf": 0.01,
                    "description": "Сумма исходящего платежа клиента в сторону агента или входящего платежа агента в сторону клиента, в валюте клиента"
                },
                "bank": {
                    "$ref": "swift.schema.json",
                    "description": "Банк контрагента "
                },
                "bankCustomer": {
                    "$ref": "bank.schema.json",
                    "description": "Банк клиента"
                },
                "accountNumber": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "Номер счета"
                },
                "purpose": {
                    "type": "string",
                    "maxLength": 115,
                    "description": "Назначение платежа"
                },
                "paymentTerm": {
                    "type": "number",
                    "description": "Срок исполнения Поручения (рабочих дней)"
                }
            },
            "required": [
                "currencyCounterparty",
                "currencyCustomer",
                "amountCounterparty",
                "bank",
                "accountNumber",
                "purpose"
            ]
        },
        "additionalInfo": {
            "description": "Дополнительная информация",
            "type": "object",
            "properties": {
                "productType": {
                    "description": "Тип продукции или услуги",
                    "enum": [
                        "GOODS",
                        "TOOLS",
                        "SPARE PARTS",
                        "EQUIPMENT",
                        "SERVICES",
                        "PRODUCTS",
                        "MATERIALS",
                        "DEVICES",
                        "ELECTRONIC",
                        "CHEMICALS"
                    ]
                },
                "productTypeOther": {
                    "type": "string",
                    "description": "Значение для выбранного типа продукции 'Другое'"
                },
                "tnvedCode": {
                    "type": "string",
                    "description": "Код ТН ВЭД"
                },
                "documentDate": {
                    "type": "string",
                    "format": "date",
                    "description": "Дата контракта"
                },
                "documentNum": {
                    "type": "string",
                    "description": "Номер контракта"
                },
                "invoiceDate": {
                    "type": "string",
                    "format": "date",
                    "description": "Дата инвойса"
                },
                "invoiceNum": {
                    "type": "string",
                    "description": "Номер инвойса"
                },
                "specification": {
                    "type": "string",
                    "description": "Cпецификация"
                },
                "commentForInvoice": {
                    "type": "string",
                    "description": "Комментарий для инвойса"
                },
                "documents": {
                    "type": "array",
                    "description": "Документы",
                    "items": {
                        "type": "object",
                        "properties": {
                            "date": {
                                "type": "string",
                                "format": "date",
                                "description": "Дата контракта или инвойса"
                            },
                            "number":
                            {
                                "type": "string",
                                "description": "Номер инвойса"
                            }
                        }
                    }
                }
            },
            "required": [
                "productType",
                "documentDate",
                "documentNum"
            ]
        },
        "isBelowCost": {
            "type": "boolean",
            "description": "Агентское вознаграждение ниже предельного значения ставки"
        },
        "commission": {
            "description": "Агентское вознаграждение",
            "type": "object",
            "properties": {
                "percent": {
                    "type": "number",
                    "description": "Процент агентского вознаграждения"
                },
                "percentCost": {
                    "type": "number",
                    "description": "предельного значения ставки субагента, сохраняется при заниженном проценте агентского вознаграждения"
                },
                "amountCommissionCounterpartyCurrency": {
                    "type": "number",
                    "description": "Сумма агентского вознаграждения в валюте контрагента"
                },
                "amountCommissionCustomerCurrency": {
                    "type": "number",
                    "description": "Сумма агентского вознаграждения в валюте клиента"
                },
                "amountOperatingCostCounterpartyCurrency": {
                    "type": "number",
                    "description": "Сумма операционных расходов в валюте контрагента"
                },
                "amountOperatingCostCustomerCurrency": {
                    "type": "number",
                    "description": "Сумма операционных расходов в валюте клиента"
                },
                "amountTotalCounterpartyCurrency": {
                    "type": "number",
                    "description": "Общая сумма агентского вознаграждения в валюте платежа по заявке"
                },
                "amountTotalCustomerCurrency": {
                    "type": "number",
                    "description": "Общая сумма агентского вознаграждения в валюте расчетов агента с клиентом"
                },
                "paymentMethod": {
                    "enum": [
                        "PART_PAYMENT",
                        "SEPARATE_PAYMENT"
                    ],
                    "description": "Способ оплаты комиссии: PART_PAYMENT - в составе платежа, SEPARATE_PAYMENT - отдельно от платежа"
                }
            },
            "required": [
                "percent",
                "amountTotalCounterpartyCurrency",
                "amountTotalCustomerCurrency"
            ]
        },
        "paymentOrder": {
            "type": "array",
            "description": "Платежные поручения",
            "items": {
                "type": "object",
                "properties": {
                    "number": {
                        "type": "string",
                        "description": "Номер платежного поручения"
                    },
                    "date": {
                        "type": "string",
                        "format": "date",
                        "description": "Дата платежного поручения"
                    },
                    "amount": {
                        "type": "number",
                        "description": "Сумма"
                    }
                },
                "required": [
                    "number",
                    "date",
                    "amount"
                ]
            }
        },
        "specification": {
            "type": "array",
            "description": "Товары, услуги",
            "items": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "наименование"
                    },
                    "quantity": {
                        "type": "number",
                        "description": "Количество"
                    },
                    "price": {
                        "type": "number",
                        "description": "Цена за единицу"
                    },
                    "amount": {
                        "type": "number",
                        "description": "Сумма"
                    },
                    "createdAt": {
                        "description": "Дата и время добавления строки",
                        "type": "string",
                        "format": "datetime"
                    }
                },
                "required": [
                    "number",
                    "date",
                    "amount"
                ]
            }
        },
        "baseRateSet" : {
            "$ref": "baseRateSet.schema.json",
            "description": "Использованный набор базовых ставок"
        },
        "individualRateSet" : {
            "$ref": "individualRateSet.schema.json",
            "description": "Использованный запрос индивидуальных"
        },
        "userCompliance": {
            "$ref": "user.schema.json",
            "description": "Пользователь Комплаенс офицер "
        },
        "complianceComment": {
            "type": "string",
            "description": "Комментарий Комплаенс офицера"
        }
    },
    "required": [
        "status",
        "counterparty",
        "payment"
    ],
    "additionalProperties": false
}