Построй блок-схему потока управления по коду ниже — такую, как код работает сейчас, а не как задумывалось.
Код: [КОД:
def process_order(order, user, stock):
if not order.get("items"):
return {"status": "empty"}
if user["blocked"]:
return {"status": "rejected"}
total = 0
for item in order["items"]:
if stock.get(item["sku"], 0) < item["qty"]:
if user["vip"]:
item["qty"] = stock.get(item["sku"], 0)
else:
return {"status": "no_stock", "sku": item["sku"]}
total += item["qty"] * item["price"]
if total > 100000 and not user["verified"]:
return {"status": "manual_review"}
return {"status": "ok", "total": total}
]
Формат: [ФОРМАТ: Mermaid, flowchart TD; для Confluence — PlantUML]
Подписи узлов — по-русски и по смыслу шага («хватает ли товара на складе»), а не именами переменных. Каждый ранний выход — отдельный конечный узел с текстом своего статуса. Цикл покажи явно, с ребром возврата. После схемы — до трёх мест, где логика запутана: одной строкой каждое, где именно и чем грозит.
Отсечка. Не чини код и не рисуй, как было бы правильно. Если ветка тихо меняет входные данные или обрывает выполнение без объяснения, это должно быть видно на схеме, а не исправлено по дороге. Не сворачивай два условия в один узел ради компактности и не добавляй узлов, которым в коде ничего не соответствует.
Проверка. Сосчитай в коде if-ы и добавь по одному ромбу на каждый цикл — столько ромбов обязано быть на схеме; сосчитай return-ы — столько конечных узлов. Не сошлось — назови расхождение прямо под схемой и скажи, какой узел потерян. Отдельно проверь синтаксис выбранного формата перед выдачей: подпись каждого узла взята в кавычки, а скобки, кавычки и стрелки из кода внутри подписей не оставлены голыми — иначе схема не отрендерится.