{
    "schema": 1,
    "mechanism": "recorded-real-php-sqlite-execution",
    "recorded_at": "2026-11-12T15:04:07+00:00",
    "runtime": {
        "php": "8.3.33",
        "os": "Windows",
        "workflow": "v7.4.20",
        "sqlite": "3.53.2"
    },
    "source_hashes": {
        "src/Processes.php": "05fd4db64ea951861fcd0b8af8f788de3a8f0831e25e65e34b95aceae3f6f003",
        "src/Repository.php": "eb37d711e6b5961b6f79481bccae5b18a3c8a24ece232783322dc66ab1ae4c86",
        "src/Review.php": "b96560dc56358f8057b003c0a73721f50b00c277e3178341a64364524c294011",
        "src/Ticket.php": "b2e7a02ab7340e32af104d7df318d64f1767f6c76e5f23d212d9aebeecbdf080",
        "composer.lock": "4cf852191652af21d5af944d6fd2640b1cbf9f8300a81829347015fbe153ac7c"
    },
    "scenarios": [
        {
            "id": "lifecycle",
            "title": "1. Жизненный цикл заявки",
            "use": "Сервисная CRM: не разрешать согласование незаполненного черновика.",
            "lesson": "Состояние меняется только допустимым переходом; исключение не является успешным ответом.",
            "source": "src/Processes.php",
            "initial": {
                "marking": {
                    "draft": 1
                },
                "allowed": [
                    "submit"
                ],
                "blocked": {
                    "approve": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reject": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reopen": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
            },
            "steps": [
                {
                    "label": "Согласовать черновик",
                    "explanation": "Получаем отказ из-за текущего места. Заявка остаётся draft.",
                    "operation": "approve",
                    "ok": false,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": {
                        "class": "Symfony\\Component\\Workflow\\Exception\\NotEnabledTransitionException",
                        "message": "Cannot apply transition \"approve\" on workflow \"ticket\"."
                    },
                    "actor": "manager",
                    "amount": 45000,
                    "reason": ""
                },
                {
                    "label": "Отправить заявку",
                    "explanation": "После submit PHP записывает submitted. Теперь можно решать по заявке.",
                    "operation": "submit",
                    "ok": true,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "leave",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "transition",
                            "transition": "submit",
                            "marking": []
                        },
                        {
                            "event": "enter",
                            "transition": "submit",
                            "marking": []
                        },
                        {
                            "event": "entered",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "completed",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "announce",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "reject",
                            "marking": {
                                "submitted": 1
                            }
                        }
                    ],
                    "error": null,
                    "actor": "manager",
                    "amount": 45000,
                    "reason": ""
                },
                {
                    "label": "Подтвердить заявку",
                    "explanation": "Переход approve разрешён для manager и суммы 45 000 ₽.",
                    "operation": "approve",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "approved": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "leave",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "transition",
                            "transition": "approve",
                            "marking": []
                        },
                        {
                            "event": "enter",
                            "transition": "approve",
                            "marking": []
                        },
                        {
                            "event": "entered",
                            "transition": "approve",
                            "marking": {
                                "approved": 1
                            }
                        },
                        {
                            "event": "completed",
                            "transition": "approve",
                            "marking": {
                                "approved": 1
                            }
                        },
                        {
                            "event": "announce",
                            "transition": "approve",
                            "marking": {
                                "approved": 1
                            }
                        }
                    ],
                    "error": null,
                    "actor": "manager",
                    "amount": 45000,
                    "reason": ""
                }
            ]
        },
        {
            "id": "guards",
            "title": "2. Роль и лимит суммы",
            "use": "Разделение полномочий: оператор, менеджер, руководитель.",
            "lesson": "Одна кнопка может блокироваться сразу по нескольким причинам. Guard возвращает объяснение, а не только false.",
            "source": "src/Processes.php",
            "initial": {
                "marking": {
                    "submitted": 1
                },
                "allowed": [],
                "blocked": {
                    "submit": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "approve": [
                        {
                            "code": "role_required",
                            "message": "Нужна роль manager или director."
                        },
                        {
                            "code": "amount_limit",
                            "message": "Сумму больше 100 000 ₽ подтверждает director."
                        }
                    ],
                    "reject": [
                        {
                            "code": "role_required",
                            "message": "Нужна роль manager или director."
                        },
                        {
                            "code": "reason_required",
                            "message": "Укажите причину возврата."
                        }
                    ],
                    "reopen": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
            },
            "steps": [
                {
                    "label": "Оператор: отказ по двум правилам",
                    "explanation": "Посмотрите блокирующие причины approve: роль и предел суммы.",
                    "operation": "approve",
                    "ok": false,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "role_required",
                                    "message": "Нужна роль manager или director."
                                },
                                {
                                    "code": "amount_limit",
                                    "message": "Сумму больше 100 000 ₽ подтверждает director."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "role_required",
                                    "message": "Нужна роль manager или director."
                                },
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "role_required",
                                    "message": "Нужна роль manager или director."
                                },
                                {
                                    "code": "amount_limit",
                                    "message": "Сумму больше 100 000 ₽ подтверждает director."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "role_required",
                                    "message": "Нужна роль manager или director."
                                },
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        }
                    ],
                    "error": {
                        "class": "Symfony\\Component\\Workflow\\Exception\\NotEnabledTransitionException",
                        "message": "Cannot apply transition \"approve\" on workflow \"ticket\"."
                    },
                    "actor": "operator",
                    "amount": 150000,
                    "reason": ""
                },
                {
                    "label": "Менеджер: превышен лимит",
                    "explanation": "Роль подходит, но сумма 150 000 ₽ требует director.",
                    "operation": "approve",
                    "ok": false,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "amount_limit",
                                    "message": "Сумму больше 100 000 ₽ подтверждает director."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "amount_limit",
                                    "message": "Сумму больше 100 000 ₽ подтверждает director."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        }
                    ],
                    "error": {
                        "class": "Symfony\\Component\\Workflow\\Exception\\NotEnabledTransitionException",
                        "message": "Cannot apply transition \"approve\" on workflow \"ticket\"."
                    },
                    "actor": "manager",
                    "amount": 150000,
                    "reason": ""
                },
                {
                    "label": "Директор: согласовано",
                    "explanation": "Те же данные заявки проходят guard с доверенной ролью director.",
                    "operation": "approve",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "approved": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "leave",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "transition",
                            "transition": "approve",
                            "marking": []
                        },
                        {
                            "event": "enter",
                            "transition": "approve",
                            "marking": []
                        },
                        {
                            "event": "entered",
                            "transition": "approve",
                            "marking": {
                                "approved": 1
                            }
                        },
                        {
                            "event": "completed",
                            "transition": "approve",
                            "marking": {
                                "approved": 1
                            }
                        },
                        {
                            "event": "announce",
                            "transition": "approve",
                            "marking": {
                                "approved": 1
                            }
                        }
                    ],
                    "error": null,
                    "actor": "director",
                    "amount": 150000,
                    "reason": ""
                }
            ]
        },
        {
            "id": "rework",
            "title": "3. Возврат на доработку",
            "use": "Заявки, документы и закупки с обязательным замечанием.",
            "lesson": "Отказ, исправление и повторная отправка описаны явно; причина относится к действию.",
            "source": "src/Processes.php",
            "initial": {
                "marking": {
                    "draft": 1
                },
                "allowed": [
                    "submit"
                ],
                "blocked": {
                    "approve": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reject": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reopen": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
            },
            "steps": [
                {
                    "label": "Отправить на проверку",
                    "explanation": "Переходим в submitted.",
                    "operation": "submit",
                    "ok": true,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "leave",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "transition",
                            "transition": "submit",
                            "marking": []
                        },
                        {
                            "event": "enter",
                            "transition": "submit",
                            "marking": []
                        },
                        {
                            "event": "entered",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "completed",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "announce",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "reject",
                            "marking": {
                                "submitted": 1
                            }
                        }
                    ],
                    "error": null,
                    "actor": "manager",
                    "amount": 45000,
                    "reason": ""
                },
                {
                    "label": "Вернуть без причины",
                    "explanation": "Guard reason_required сохраняет submitted.",
                    "operation": "reject",
                    "ok": false,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "reject",
                            "marking": {
                                "submitted": 1
                            }
                        }
                    ],
                    "error": {
                        "class": "Symfony\\Component\\Workflow\\Exception\\NotEnabledTransitionException",
                        "message": "Cannot apply transition \"reject\" on workflow \"ticket\"."
                    },
                    "actor": "manager",
                    "amount": 45000,
                    "reason": ""
                },
                {
                    "label": "Вернуть со замечанием",
                    "explanation": "Причина передана доменному объекту до apply.",
                    "operation": "reject",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve",
                            "reject"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "rejected": 1
                        },
                        "allowed": [
                            "reopen"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "reject",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "leave",
                            "transition": "reject",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "transition",
                            "transition": "reject",
                            "marking": []
                        },
                        {
                            "event": "enter",
                            "transition": "reject",
                            "marking": []
                        },
                        {
                            "event": "entered",
                            "transition": "reject",
                            "marking": {
                                "rejected": 1
                            }
                        },
                        {
                            "event": "completed",
                            "transition": "reject",
                            "marking": {
                                "rejected": 1
                            }
                        },
                        {
                            "event": "announce",
                            "transition": "reject",
                            "marking": {
                                "rejected": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "reopen",
                            "marking": {
                                "rejected": 1
                            }
                        }
                    ],
                    "error": null,
                    "actor": "manager",
                    "amount": 45000,
                    "reason": "Не приложена смета"
                },
                {
                    "label": "Открыть доработку",
                    "explanation": "У заявки снова draft; данные и историю не нужно уничтожать.",
                    "operation": "reopen",
                    "ok": true,
                    "before": {
                        "marking": {
                            "rejected": 1
                        },
                        "allowed": [
                            "reopen"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "reopen",
                            "marking": {
                                "rejected": 1
                            }
                        },
                        {
                            "event": "leave",
                            "transition": "reopen",
                            "marking": {
                                "rejected": 1
                            }
                        },
                        {
                            "event": "transition",
                            "transition": "reopen",
                            "marking": []
                        },
                        {
                            "event": "enter",
                            "transition": "reopen",
                            "marking": []
                        },
                        {
                            "event": "entered",
                            "transition": "reopen",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "completed",
                            "transition": "reopen",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "announce",
                            "transition": "reopen",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        }
                    ],
                    "error": null,
                    "actor": "manager",
                    "amount": 45000,
                    "reason": "Не приложена смета"
                },
                {
                    "label": "Отправить исправление",
                    "explanation": "Повторная отправка является отдельным действием.",
                    "operation": "submit",
                    "ok": true,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "leave",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "transition",
                            "transition": "submit",
                            "marking": []
                        },
                        {
                            "event": "enter",
                            "transition": "submit",
                            "marking": []
                        },
                        {
                            "event": "entered",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "completed",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "announce",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "reject",
                            "marking": {
                                "submitted": 1
                            }
                        }
                    ],
                    "error": null,
                    "actor": "manager",
                    "amount": 45000,
                    "reason": ""
                }
            ]
        },
        {
            "id": "parallel",
            "title": "4. Параллельное согласование",
            "use": "Договор одновременно проверяют юрист и инженер.",
            "lesson": "Workflow хранит несколько мест; state machine использовали для одного статуса. Это два разных определения.",
            "source": "src/Processes.php",
            "initial": {
                "marking": {
                    "draft": 1
                },
                "allowed": [
                    "start"
                ],
                "blocked": {
                    "legal_ok": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "tech_ok": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "finish": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
            },
            "steps": [
                {
                    "label": "Запустить две проверки",
                    "explanation": "В marking одновременно legal_pending и tech_pending.",
                    "operation": "start",
                    "ok": true,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "start"
                        ],
                        "blocked": {
                            "legal_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "tech_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "legal_pending": 1,
                            "tech_pending": 1
                        },
                        "allowed": [
                            "legal_ok",
                            "tech_ok"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": null,
                    "actor": null,
                    "amount": null,
                    "reason": null
                },
                {
                    "label": "Завершить слишком рано",
                    "explanation": "finish требует оба места *_done.",
                    "operation": "finish",
                    "ok": false,
                    "before": {
                        "marking": {
                            "legal_pending": 1,
                            "tech_pending": 1
                        },
                        "allowed": [
                            "legal_ok",
                            "tech_ok"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "legal_pending": 1,
                            "tech_pending": 1
                        },
                        "allowed": [
                            "legal_ok",
                            "tech_ok"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": {
                        "class": "Symfony\\Component\\Workflow\\Exception\\NotEnabledTransitionException",
                        "message": "Cannot apply transition \"finish\" on workflow \"parallel_review\"."
                    },
                    "actor": null,
                    "amount": null,
                    "reason": null
                },
                {
                    "label": "Юрист согласовал",
                    "explanation": "Юридическая ветка завершена; техническая всё ещё ожидает.",
                    "operation": "legal_ok",
                    "ok": true,
                    "before": {
                        "marking": {
                            "legal_pending": 1,
                            "tech_pending": 1
                        },
                        "allowed": [
                            "legal_ok",
                            "tech_ok"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "tech_pending": 1,
                            "legal_done": 1
                        },
                        "allowed": [
                            "tech_ok"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "legal_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": null,
                    "actor": null,
                    "amount": null,
                    "reason": null
                },
                {
                    "label": "Одной проверки недостаточно",
                    "explanation": "Нельзя потерять вторую обязательную ветку.",
                    "operation": "finish",
                    "ok": false,
                    "before": {
                        "marking": {
                            "tech_pending": 1,
                            "legal_done": 1
                        },
                        "allowed": [
                            "tech_ok"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "legal_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "tech_pending": 1,
                            "legal_done": 1
                        },
                        "allowed": [
                            "tech_ok"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "legal_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": {
                        "class": "Symfony\\Component\\Workflow\\Exception\\NotEnabledTransitionException",
                        "message": "Cannot apply transition \"finish\" on workflow \"parallel_review\"."
                    },
                    "actor": null,
                    "amount": null,
                    "reason": null
                },
                {
                    "label": "Инженер согласовал",
                    "explanation": "Обе проверки завершены независимо.",
                    "operation": "tech_ok",
                    "ok": true,
                    "before": {
                        "marking": {
                            "tech_pending": 1,
                            "legal_done": 1
                        },
                        "allowed": [
                            "tech_ok"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "legal_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "legal_done": 1,
                            "tech_done": 1
                        },
                        "allowed": [
                            "finish"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "legal_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "tech_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": null,
                    "actor": null,
                    "amount": null,
                    "reason": null
                },
                {
                    "label": "Завершить согласование",
                    "explanation": "Объединяющий переход потребляет два места и даёт ready.",
                    "operation": "finish",
                    "ok": true,
                    "before": {
                        "marking": {
                            "legal_done": 1,
                            "tech_done": 1
                        },
                        "allowed": [
                            "finish"
                        ],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "legal_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "tech_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "ready": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "start": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "legal_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "tech_ok": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "finish": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [label=\"legal_pending\", shape=circle];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f [label=\"tech_pending\", shape=circle];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 [label=\"legal_done\", shape=circle];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [label=\"tech_done\", shape=circle];\n  place_75c0533730caf1f78561c0883fb87bc8d98ef04b [label=\"ready\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"start\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"legal_ok\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"tech_ok\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"finish\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_c646fa618c79f4c928f0b222ea1b332a9c55c671 [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fe462b80d943878ecddf5904b565a8c2bb60087f [style=\"solid\"];\n  place_c646fa618c79f4c928f0b222ea1b332a9c55c671 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_73fe745898ab094bb5d365b7da9f278ca6778b31 [style=\"solid\"];\n  place_fe462b80d943878ecddf5904b565a8c2bb60087f -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_d4d4e9a720de9c5173d54d81004bed602b7c9979 [style=\"solid\"];\n  place_73fe745898ab094bb5d365b7da9f278ca6778b31 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  place_d4d4e9a720de9c5173d54d81004bed602b7c9979 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_75c0533730caf1f78561c0883fb87bc8d98ef04b [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": null,
                    "actor": null,
                    "amount": null,
                    "reason": null
                }
            ]
        },
        {
            "id": "events",
            "title": "5. События и повторные guards",
            "use": "Аудит действий и точка для постановки события в outbox.",
            "lesson": "Лог в опыте — память процесса. Он показывает вызовы Symfony; надёжное хранение сделано отдельно в repository.",
            "source": "src/Processes.php",
            "initial": {
                "marking": {
                    "draft": 1
                },
                "allowed": [
                    "submit"
                ],
                "blocked": {
                    "approve": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reject": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reopen": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
            },
            "steps": [
                {
                    "label": "Дважды спросить can(submit)",
                    "explanation": "Проверка доступности вызвала guard дважды, не изменила marking и ничего не отправила во внешние сервисы.",
                    "operation": "can(submit) × 2",
                    "ok": true,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        }
                    ],
                    "error": null,
                    "response": {
                        "can": [
                            true,
                            true
                        ]
                    }
                },
                {
                    "label": "Применить submit",
                    "explanation": "Смотрите последовательность guard → leave → transition → enter → entered → completed → announce и дополнительные guards доступных действий.",
                    "operation": "submit",
                    "ok": true,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [
                        {
                            "event": "guard",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "leave",
                            "transition": "submit",
                            "marking": {
                                "draft": 1
                            }
                        },
                        {
                            "event": "transition",
                            "transition": "submit",
                            "marking": []
                        },
                        {
                            "event": "enter",
                            "transition": "submit",
                            "marking": []
                        },
                        {
                            "event": "entered",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "completed",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "announce",
                            "transition": "submit",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "approve",
                            "marking": {
                                "submitted": 1
                            }
                        },
                        {
                            "event": "guard",
                            "transition": "reject",
                            "marking": {
                                "submitted": 1
                            }
                        }
                    ],
                    "error": null,
                    "actor": "manager",
                    "amount": 45000,
                    "reason": ""
                }
            ]
        },
        {
            "id": "persistence",
            "title": "6. Сохранение в SQLite",
            "use": "Статус должен переживать завершение HTTP-запроса и перезапуск PHP.",
            "lesson": "Объект, маркировка и сохранение — разные слои. Здесь SQLite хранит результат явно.",
            "source": "src/Repository.php",
            "initial": {
                "marking": {
                    "draft": 1
                },
                "allowed": [
                    "submit"
                ],
                "blocked": {
                    "approve": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reject": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reopen": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                "row": {
                    "id": "REQ-1042",
                    "marking": "draft",
                    "amount": 45000,
                    "version": 1
                }
            },
            "steps": [
                {
                    "label": "Записать в другом PHP-процессе",
                    "explanation": "Дочерний процесс выполнил переход и транзакцию SQLite.",
                    "operation": "php bin/child.php persistence apply 1 submit persist-1",
                    "ok": true,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "draft",
                            "amount": 45000,
                            "version": 1
                        }
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "response": {
                        "ok": true,
                        "result": {
                            "replayed": false,
                            "ticket": {
                                "id": "REQ-1042",
                                "marking": "submitted",
                                "amount": 45000,
                                "version": 2
                            }
                        },
                        "counts": {
                            "outbox": 1,
                            "receipts": 1
                        },
                        "exit_code": 0,
                        "command": "php bin/child.php persistence apply 1 submit persist-1"
                    },
                    "events": [],
                    "error": null
                },
                {
                    "label": "Перечитать новым PHP-процессом",
                    "explanation": "Свежий процесс видит submitted и version=2. MethodMarkingStore сам не записывает БД.",
                    "operation": "php bin/child.php persistence read",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "response": {
                        "ok": true,
                        "result": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        },
                        "counts": {
                            "outbox": 1,
                            "receipts": 1
                        },
                        "exit_code": 0,
                        "command": "php bin/child.php persistence read"
                    },
                    "events": [],
                    "error": null
                }
            ]
        },
        {
            "id": "concurrency",
            "title": "7. Конфликт двух клиентов",
            "use": "Два сотрудника открыли карточку до изменения; второй не должен перезаписать решение первого.",
            "lesson": "Версия проверяется внутри транзакции. Получив конфликт, интерфейс загружает актуальную карточку.",
            "source": "src/Repository.php",
            "initial": {
                "marking": {
                    "submitted": 1
                },
                "allowed": [
                    "approve"
                ],
                "blocked": {
                    "submit": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reject": [
                        {
                            "code": "reason_required",
                            "message": "Укажите причину возврата."
                        }
                    ],
                    "reopen": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                "row": {
                    "id": "REQ-1042",
                    "marking": "submitted",
                    "amount": 45000,
                    "version": 1
                }
            },
            "steps": [
                {
                    "label": "Два клиента прочитали version=1",
                    "explanation": "Это контролируемое чередование двух читателей; следующие записи будут последовательными.",
                    "operation": "php bin/child.php concurrency read (два процесса)",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 1
                        }
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 1
                        }
                    },
                    "response": {
                        "ok": true,
                        "command": "php bin/child.php concurrency read (два процесса)",
                        "A": {
                            "ok": true,
                            "result": {
                                "id": "REQ-1042",
                                "marking": "submitted",
                                "amount": 45000,
                                "version": 1
                            },
                            "counts": {
                                "outbox": 0,
                                "receipts": 0
                            },
                            "exit_code": 0,
                            "command": "php bin/child.php concurrency read"
                        },
                        "B": {
                            "ok": true,
                            "result": {
                                "id": "REQ-1042",
                                "marking": "submitted",
                                "amount": 45000,
                                "version": 1
                            },
                            "counts": {
                                "outbox": 0,
                                "receipts": 0
                            },
                            "exit_code": 0,
                            "command": "php bin/child.php concurrency read"
                        }
                    },
                    "events": [],
                    "error": null
                },
                {
                    "label": "Клиент A подтверждает",
                    "explanation": "Первый процесс обновляет строку, version=2, создаёт одно событие outbox.",
                    "operation": "php bin/child.php concurrency apply 1 approve client-A",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 1
                        }
                    },
                    "after": {
                        "marking": {
                            "approved": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "approved",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "response": {
                        "ok": true,
                        "result": {
                            "replayed": false,
                            "ticket": {
                                "id": "REQ-1042",
                                "marking": "approved",
                                "amount": 45000,
                                "version": 2
                            }
                        },
                        "counts": {
                            "outbox": 1,
                            "receipts": 1
                        },
                        "exit_code": 0,
                        "command": "php bin/child.php concurrency apply 1 approve client-A"
                    },
                    "events": [],
                    "error": null
                },
                {
                    "label": "Клиент B отправляет старую версию",
                    "explanation": "Второй процесс получает version_conflict. Событий по-прежнему одно. Это конфликт устаревшего снимка, не измерение одновременной нагрузки.",
                    "operation": "php bin/child.php concurrency apply 1 approve client-B",
                    "ok": false,
                    "before": {
                        "marking": {
                            "approved": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "approved",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "after": {
                        "marking": {
                            "approved": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "approved",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "response": {
                        "ok": false,
                        "error": "version_conflict",
                        "class": "RuntimeException",
                        "ticket": {
                            "id": "REQ-1042",
                            "marking": "approved",
                            "amount": 45000,
                            "version": 2
                        },
                        "counts": {
                            "outbox": 1,
                            "receipts": 1
                        },
                        "exit_code": 1,
                        "command": "php bin/child.php concurrency apply 1 approve client-B"
                    },
                    "events": [],
                    "error": {
                        "message": "version_conflict",
                        "class": "RuntimeException"
                    }
                }
            ]
        },
        {
            "id": "idempotency",
            "title": "8. Идемпотентность и outbox",
            "use": "Вебхуки, повтор запроса после потери ответа и фоновые интеграции.",
            "lesson": "Idempotency и outbox реализует наше приложение. Доставка из outbox обычно at-least-once: получателю тоже нужна идемпотентность.",
            "source": "src/Repository.php",
            "initial": {
                "marking": {
                    "draft": 1
                },
                "allowed": [
                    "submit"
                ],
                "blocked": {
                    "approve": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reject": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reopen": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                "row": {
                    "id": "REQ-1042",
                    "marking": "draft",
                    "amount": 45000,
                    "version": 1
                }
            },
            "steps": [
                {
                    "label": "Впервые получить webhook-001",
                    "explanation": "Одна транзакция сохраняет marking, version, receipt и outbox.",
                    "operation": "php bin/child.php idempotency apply 1 submit webhook-001",
                    "ok": true,
                    "before": {
                        "marking": {
                            "draft": 1
                        },
                        "allowed": [
                            "submit"
                        ],
                        "blocked": {
                            "approve": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\" color=\"#FF0000\" shape=\"doublecircle\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "draft",
                            "amount": 45000,
                            "version": 1
                        }
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "response": {
                        "ok": true,
                        "result": {
                            "replayed": false,
                            "ticket": {
                                "id": "REQ-1042",
                                "marking": "submitted",
                                "amount": 45000,
                                "version": 2
                            }
                        },
                        "counts": {
                            "outbox": 1,
                            "receipts": 1
                        },
                        "exit_code": 0,
                        "command": "php bin/child.php idempotency apply 1 submit webhook-001"
                    },
                    "events": [],
                    "error": null
                },
                {
                    "label": "Повторить тот же webhook",
                    "explanation": "Возвращается сохранённый результат с replayed=true; версии и события не размножаются.",
                    "operation": "php bin/child.php idempotency apply 1 submit webhook-001",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "response": {
                        "ok": true,
                        "result": {
                            "replayed": true,
                            "ticket": {
                                "id": "REQ-1042",
                                "marking": "submitted",
                                "amount": 45000,
                                "version": 2
                            }
                        },
                        "counts": {
                            "outbox": 1,
                            "receipts": 1
                        },
                        "exit_code": 0,
                        "command": "php bin/child.php idempotency apply 1 submit webhook-001"
                    },
                    "events": [],
                    "error": null
                },
                {
                    "label": "Повторить ключ с другим действием",
                    "explanation": "Fingerprint отличается: idempotency_key_reused. Повторный ключ не разрешает подменить действие.",
                    "operation": "php bin/child.php idempotency apply 1 approve webhook-001",
                    "ok": false,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n",
                        "row": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        }
                    },
                    "response": {
                        "ok": false,
                        "error": "idempotency_key_reused",
                        "class": "RuntimeException",
                        "ticket": {
                            "id": "REQ-1042",
                            "marking": "submitted",
                            "amount": 45000,
                            "version": 2
                        },
                        "counts": {
                            "outbox": 1,
                            "receipts": 1
                        },
                        "exit_code": 1,
                        "command": "php bin/child.php idempotency apply 1 approve webhook-001"
                    },
                    "events": [],
                    "error": {
                        "message": "idempotency_key_reused",
                        "class": "RuntimeException"
                    }
                }
            ]
        },
        {
            "id": "operator",
            "title": "9. Карточка оператора",
            "use": "Интерфейс согласования: текущий статус, доступные действия и причины отказа.",
            "lesson": "Скрытая кнопка не защищает API. При действии сервер заново загружает объект и вызывает apply.",
            "source": "src/Processes.php",
            "initial": {
                "marking": {
                    "submitted": 1
                },
                "allowed": [
                    "approve"
                ],
                "blocked": {
                    "submit": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ],
                    "reject": [
                        {
                            "code": "reason_required",
                            "message": "Укажите причину возврата."
                        }
                    ],
                    "reopen": [
                        {
                            "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                            "message": "The marking does not enable the transition."
                        }
                    ]
                },
                "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
            },
            "steps": [
                {
                    "label": "Карточка для operator",
                    "explanation": "Набор доступных кнопок получен от Symfony. Браузер лишь отображает записанный результат этой роли; роль не является настоящей авторизацией.",
                    "operation": "getEnabledTransitions / blockers",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "approve": [
                                {
                                    "code": "role_required",
                                    "message": "Нужна роль manager или director."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "role_required",
                                    "message": "Нужна роль manager или director."
                                },
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": null,
                    "actor": "operator",
                    "amount": 45000
                },
                {
                    "label": "Карточка для manager",
                    "explanation": "Набор доступных кнопок получен от Symfony. Браузер лишь отображает записанный результат этой роли; роль не является настоящей авторизацией.",
                    "operation": "getEnabledTransitions / blockers",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": null,
                    "actor": "manager",
                    "amount": 45000
                },
                {
                    "label": "Карточка для director",
                    "explanation": "Набор доступных кнопок получен от Symfony. Браузер лишь отображает записанный результат этой роли; роль не является настоящей авторизацией.",
                    "operation": "getEnabledTransitions / blockers",
                    "ok": true,
                    "before": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "after": {
                        "marking": {
                            "submitted": 1
                        },
                        "allowed": [
                            "approve"
                        ],
                        "blocked": {
                            "submit": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ],
                            "reject": [
                                {
                                    "code": "reason_required",
                                    "message": "Укажите причину возврата."
                                }
                            ],
                            "reopen": [
                                {
                                    "code": "19beefc8-6b1e-4716-9d07-a39bd6d16e34",
                                    "message": "The marking does not enable the transition."
                                }
                            ]
                        },
                        "dot": "digraph workflow {\n  ratio=\"compress\" rankdir=\"LR\"\n  node [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" fillcolor=\"lightblue\" fixedsize=\"false\" width=\"1\"];\n  edge [fontsize=\"9\" fontname=\"Arial\" color=\"#333333\" arrowhead=\"normal\" arrowsize=\"0.5\"];\n\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [label=\"draft\", shape=circle style=\"filled\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 [label=\"submitted\", shape=circle color=\"#FF0000\" shape=\"doublecircle\"];\n  place_c9560d94ee19830374678a9c9f9a0833801c9f62 [label=\"approved\", shape=circle];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 [label=\"rejected\", shape=circle];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [label=\"submit\", shape=\"box\" regular=\"1\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab [label=\"approve\", shape=\"box\" regular=\"1\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [label=\"reject\", shape=\"box\" regular=\"1\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb [label=\"reopen\", shape=\"box\" regular=\"1\"];\n  place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 -> transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c [style=\"solid\"];\n  transition_b6589fc6ab0dc82cf12099d1c2d40ab994e8410c -> place_fda43783be8e0b3f9206a57f2248c2237f049f81 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_356a192b7913b04c54574d18c28d46e6395428ab [style=\"solid\"];\n  transition_356a192b7913b04c54574d18c28d46e6395428ab -> place_c9560d94ee19830374678a9c9f9a0833801c9f62 [style=\"solid\"];\n  place_fda43783be8e0b3f9206a57f2248c2237f049f81 -> transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 [style=\"solid\"];\n  transition_da4b9237bacccdf19c0760cab7aec4a8359010b0 -> place_1f087a5954f6249bb7245576c304a0520d4178c5 [style=\"solid\"];\n  place_1f087a5954f6249bb7245576c304a0520d4178c5 -> transition_77de68daecd823babbb58edb1c8e14d7106e83bb [style=\"solid\"];\n  transition_77de68daecd823babbb58edb1c8e14d7106e83bb -> place_0e7766b460fd2a39a2fd81d4a3a636b033b52be4 [style=\"solid\"];\n}\n"
                    },
                    "events": [],
                    "error": null,
                    "actor": "director",
                    "amount": 45000
                }
            ]
        }
    ]
}
