業務フローでよく使われるスイムレーンの悩ましいところ

PlantUML アクティビティ図で描画する業務フローは、差戻しの処理を前のレーンで描画するケース
repeat backward を前のレーンで書くと

@startuml

|A|
start
:新規作成;

|B|
repeat 
|A|
backward :修正;
|B|
repeat while (検証?) is (差戻し)
:登録;
end

@enduml

これは repeat while (検証?) の箇所に線が被ってしまう。

それなら、最初のレーンで if 文を使って表現する方法

@startuml

|A|
start

repeat
if (未作成?) then (yes)
:新規作成;
else (no)
:修正;
endif
|B|
repeat while (検証?) is (差戻し)
->OK;
:登録;
end

@enduml


実際のコーディングでは if 制御文が入らないであろうから
正確かどうかでいうとこの方法が見送られることもあろう。

while 文で表現する方法、こちらの方が実際のコーディングに近いのであるが。

@startuml

|A|
start
:新規作成;

|B|
while (検証) is (差戻し)
    |A|
    :修正;
    |B|
endwhile(OK)
:登録;
end

@enduml


戻りループの線が、レーンの線と重なってしまうとこの書き方は使えない。
最初に戻って、repeat backward を前のレーンで書かずに、
逆にすれば、( Aレーンの先にBレーンの存在を記述する)
  |B| の後に |A|

@startuml

|B|
|A|
start
:新規作成;

|B|
repeat 
|A|
backward :修正;
|B|
repeat while (検証?) is (差戻し)
:登録;
end

@enduml


でも、業務フローのレーンの左右、左側から開始しなければならないという
厳格なルールにするならこれは適合しない。