Принять поставку целиком и откатить ошибочную партию

Результат настоящего запуска PHP с PDO_SQLITE. Собственный учебный файл базы после наблюдений удалён; полезная выгрузка сохранена.

Результат выполнения
НаблюдениеРезультат
Партия AПриняты 2 поставщика и 2 товара
Партия BПоставщик 999 отсутствует; вся партия отменена
После откатаНет ни поставщика Запад, ни товара CASE-1
КаталогКабель — Север: 3; Изолента — Юг: 5
Файлimport-receipt.csv
Полученные строки и наблюдения
{
    "supplier_input": [
        [
            1,
            "Север"
        ],
        [
            2,
            "Юг"
        ]
    ],
    "item_input": [
        [
            1,
            "CAB-7",
            "Кабель",
            1,
            3
        ],
        [
            2,
            "TAP-2",
            "Изолента",
            2,
            5
        ]
    ],
    "accepted": [
        {
            "sku": "CAB-7",
            "title": "Кабель",
            "supplier": "Север",
            "qty": 3
        },
        {
            "sku": "TAP-2",
            "title": "Изолента",
            "supplier": "Юг",
            "qty": 5
        }
    ],
    "refused_supplier_id": 999,
    "failure": {
        "failed": true,
        "state": "HY000",
        "code": 787
    },
    "before_rollback": [
        {
            "id": 1,
            "sku": "CAB-7"
        },
        {
            "id": 2,
            "sku": "TAP-2"
        },
        {
            "id": 3,
            "sku": "CASE-1"
        }
    ],
    "final_catalog": [
        {
            "sku": "CAB-7",
            "title": "Кабель",
            "supplier": "Север",
            "qty": 3
        },
        {
            "sku": "TAP-2",
            "title": "Изолента",
            "supplier": "Юг",
            "qty": 5
        }
    ],
    "final_counts": {
        "suppliers": 2,
        "items": 2
    },
    "foreign_keys": 1,
    "foreign_key_check": [],
    "receipt": [
        [
            "batch",
            "status",
            "new_suppliers",
            "new_items",
            "reason"
        ],
        [
            "A",
            "committed",
            2,
            2,
            "ok"
        ],
        [
            "B",
            "rolled_back",
            0,
            0,
            "unknown_supplier"
        ]
    ]
}

result.json содержит те же данные.