Отменить весь резерв, если второй позиции не хватает

Фактические данные получены через SQLSRV от отдельного SQL Server. Созданные программой учебные таблицы удалены после чтения.

Наблюдаемый результат программы
НаблюдениеРезультат
Первая команда изменила строк1
Вторая команда изменила строк0
SQL второй команды выполнилсяда
До отката, остаток первой позиции5
Резерв отклонён целикомда
После отката, позиция 18
После отката, позиция 21
Строки и дополнительные наблюдения
{
    "requested": [
        {
            "id": 1,
            "qty": 3
        },
        {
            "id": 2,
            "qty": 2
        }
    ],
    "inside_before_rollback": [
        {
            "id": 1,
            "available": 5
        },
        {
            "id": 2,
            "available": 1
        }
    ],
    "after_rollback": [
        {
            "id": 1,
            "available": 8
        },
        {
            "id": 2,
            "available": 1
        }
    ]
}

При самостоятельном запуске рядом с example.php создаются result.json с данными и metrics.json с проверками.