flow審査 v1examples/review/temporal/review.ja.flow · dandori doc
Jev が申込を採点してその確信度も返し、その判断をそのまま実行するか、人の承認に回すかを規則が決める。人の承認は、受け付けた日から 3 営業日後の 17 時までに受ける。そのまま承認するには、そのまま却下するより高い確信度が要る。Temporal 向けの版:採点は生成したアクティビティで、専用のタスクキューのワーカーの上で、TypeSafe の API キー(TYPESAFE_API_KEY)で Jev を呼ぶ。そのワーカーは別の言語で書かれていてもよい。お知らせも専用のタスクキューで動く、自分で書くアクティビティ。規則と承認の期日はワークフローのワーカーで動く。承認する人のツールは、生成したクライアントが送る Update でコールバックに応答する
flow| 行 | 呼び出し | 呼ぶもの | リトライ | タイムアウト | 失敗したとき |
|---|---|---|---|---|---|
| 51 | 結果 = 採点する(…) | jev · jev-1.13.0 | 10 秒おきに 2 回(混雑・過負荷) | 10 秒 | 混雑・過負荷・timeout・failure → 52 行目 |
| 53 | 判定 = 方針(…) | 規則 審査の方針.rule | 1 秒後と 2 秒後の 2 回(failure・timeout) | 10 秒 | timeout・failure → ワークフローが失敗する |
| 57 | 承認の期限 = 承認の期日.期限(…) | 承認の期日.cal の日付 期限 | 1 秒後と 2 秒後の 2 回(failure・timeout) | 10 秒 | timeout・failure → ワークフローが失敗する |
| 58 | 返事 = 承認を求める(…) | 自分で書くタスク(応答はコールバック) | — | ID を渡すのに 1 分、そのあと 承認の期限.at まで | timeout → 59 行目failure → ワークフローが失敗する |
| 60 | 知らせる(…) | 自分で書くタスク・idempotent | — | — | timeout・failure → ワークフローが失敗する |
| 62 | 知らせる(…) | 自分で書くタスク・idempotent | — | — | timeout・failure → ワークフローが失敗する |
| 行 | 終わり方 |
|---|---|
| 52 | fail 採点不能 "申込 {申込.id} を採点できませんでした" |
| 59 | fail 承認なし "3 営業日後の 17 時までに承認がありません" |
| 61 | succeed 判断 = 承認 |
| 63 | succeed 判断 = 結果.判断 |
ステップを選ぶと、そこについて検査で分かったことが出ます。左のシナリオを選ぶと、その実行が通るところが光ります。ステップの横の数は、その実行が通った回数です。
審査 v1Jev が申込を採点してその確信度も返し、その判断をそのまま実行するか、人の承認に回すかを規則が決める。人の承認は、受け付けた日から 3 営業日後の 17 時までに受ける。そのまま承認するには、そのまま却下するより高い確信度が要る。Temporal 向けの版:採点は生成したアクティビティで、専用のタスクキューのワーカーの上で、TypeSafe の API キー(TYPESAFE_API_KEY)で Jev を呼ぶ。そのワーカーは別の言語で書かれていてもよい。お知らせも専用のタスクキューで動く、自分で書くアクティビティ。規則と承認の期日はワークフローのワーカーで動く。承認する人のツールは、生成したクライアントが送る Update でコールバックに応答する
申込: 申込判断: 方針.判断examples/review/temporal/review.ja.flow結果 = 採点する(…) 51 行目51 let 結果 = 採点する(用途: 申込.用途) 52 on failure => fail 採点不能 "申込 {申込.id} を採点できませんでした"
jev · jev-1.13.0混雑・過負荷・timeout・failure → 52 行目25 # Jev は申込者が書いた用途を読み、判断の段階(低いほうから)のどこに当たるかと、その確信度を返す。 26 # 確信度は率で受け取り、規則が判断と一緒に見て決める。 27 task 採点する(用途: string) -> 採点 28 jev 29 判断 score "資金は、どれだけはっきり事業に使われるか" 30 却下 "私用や投機、法に反することに使う" 31 保留 "事業に使うが、何に払うのかがはっきりしない" 32 承認 "仕入れ、設備、人件費、店舗など、事業のはっきりした費目に使う" 33 確信度 confidence of 判断 34 model "jev-1.13.0" 35 queue "採点" 36 errors 混雑 = 429, 過負荷 = 529 37 retry 2 times every 10 seconds on 混雑, 過負荷 38 timeout 10 seconds
fail 採点不能 52 行目 52 on failure => fail 採点不能 "申込 {申込.id} を採点できませんでした"
判定 = 方針(…) 53 行目 53 let 判定 = 方針(判断: 結果.判断, 確信度: 結果.確信度)
審査の方針.ruletimeout・failure → ワークフローが失敗する 4 use rule 方針 from "../rules/審査の方針.rule"
match 判定.決定 54 行目54 match 判定.決定 55 承認, 却下 => pass 56 人に回す =>
承認の期限 = 承認の期日.期限(…) 57 行目 57 let 承認の期限 = 承認の期日.期限(受付日: now)
承認の期日.cal の日付 期限timeout・failure → ワークフローが失敗する 5 use dates 承認の期日 from "../dates/承認の期日.cal"
返事 = 承認を求める(…) 58 行目58 let 返事 = 承認を求める(申込ID: 申込.id, 金額: 申込.金額, 確信度: 結果.確信度, 期限: 承認の期限.at) 59 on timeout => fail 承認なし "3 営業日後の 17 時までに承認がありません"
承認の期限.at までtimeout → 59 行目failure → ワークフローが失敗する40 # 承認する人が自分のツールで承認し、その結果がコールバックの ID と一緒に返ってくる。承認する人には 41 # 期限も渡し、待つのはその時刻まで。 42 task 承認を求める(申込ID: string, 金額: int, 確信度: rate[step 1%], 期限: timestamp) -> 承認 43 callback 44 timeout until 期限
fail 承認なし 59 行目 59 on timeout => fail 承認なし "3 営業日後の 17 時までに承認がありません"
知らせる(…) 60 行目 60 知らせる(申込ID: 申込.id, 本文: "{返事.承認者} さんが申込 {申込.id} を承認しました")
idempotenttimeout・failure → ワークフローが失敗する46 task 知らせる(申込ID: string, 本文: string) 47 queue "お知らせ" 48 idempotent
succeed 判断 = 承認 61 行目 61 succeed 判断 = 承認
知らせる(…) 62 行目 62 知らせる(申込ID: 申込.id, 本文: "申込 {申込.id} の審査が済みました: {結果.判断}")
idempotenttimeout・failure → ワークフローが失敗する46 task 知らせる(申込ID: string, 本文: string) 47 queue "お知らせ" 48 idempotent
succeed 判断 = 結果.判断 63 行目 63 succeed 判断 = 結果.判断
終わり(成功)flow が最後まで走り、ワークフローは成功します。
結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 承認, 却下知らせる(…) oksucceed 判断 = 結果.判断結果 = 採点する(…) failure → on failurefail 採点不能結果 = 採点する(…) 混雑 ok判定 = 方針(…) failure failure failure → ここでは処理しない結果 = 採点する(…) ok結果 = 採点する(…) ok判定 = 方針(…) ok結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 承認, 却下知らせる(…) failure → ここでは処理しない結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す承認の期限 = 承認の期日.期限(…) ok返事 = 承認を求める(…) ok知らせる(…) oksucceed 判断 = 承認結果 = 採点する(…) 混雑 ok判定 = 方針(…) okmatch 判定.決定 → 人に回す承認の期限 = 承認の期日.期限(…) failure failure failure → ここでは処理しない結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す承認の期限 = 承認の期日.期限(…) ok結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す承認の期限 = 承認の期日.期限(…) ok返事 = 承認を求める(…) timeout → on timeoutfail 承認なし結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す承認の期限 = 承認の期日.期限(…) ok返事 = 承認を求める(…) failure → ここでは処理しない結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す承認の期限 = 承認の期日.期限(…) ok返事 = 承認を求める(…) ok結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す承認の期限 = 承認の期日.期限(…) ok返事 = 承認を求める(…) ok知らせる(…) failure → ここでは処理しない