{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://platoskallipolis.com/schemas/provider-contribution-review.v1.json",
  "schema": "kallipolis.provider-contribution-review-state-machine.v1",
  "version": "1.0.0",
  "states": [
    {"id": "draft", "terminal": false},
    {"id": "validation-failed", "terminal": false},
    {"id": "ready-for-review", "terminal": false},
    {"id": "under-review", "terminal": false},
    {"id": "changes-requested", "terminal": false},
    {"id": "accepted", "terminal": false},
    {"id": "rejected", "terminal": false},
    {"id": "withdrawn", "terminal": true}
  ],
  "transitions": [
    {"from": "draft", "to": "validation-failed", "actor": "validator"},
    {"from": "draft", "to": "ready-for-review", "actor": "validator"},
    {"from": "draft", "to": "withdrawn", "actor": "provider"},
    {"from": "validation-failed", "to": "draft", "actor": "provider"},
    {"from": "validation-failed", "to": "withdrawn", "actor": "provider"},
    {"from": "ready-for-review", "to": "under-review", "actor": "reviewer"},
    {"from": "ready-for-review", "to": "withdrawn", "actor": "provider"},
    {"from": "under-review", "to": "changes-requested", "actor": "reviewer"},
    {"from": "under-review", "to": "accepted", "actor": "reviewer"},
    {"from": "under-review", "to": "rejected", "actor": "reviewer"},
    {"from": "under-review", "to": "withdrawn", "actor": "provider"},
    {"from": "changes-requested", "to": "draft", "actor": "provider"},
    {"from": "changes-requested", "to": "withdrawn", "actor": "provider"},
    {"from": "accepted", "to": "withdrawn", "actor": "reviewer"},
    {"from": "rejected", "to": "draft", "actor": "provider"}
  ],
  "previewRules": {
    "inputState": "draft",
    "validOutputState": "ready-for-review",
    "invalidOutputState": "validation-failed",
    "canSubmit": false,
    "canAccept": false,
    "canWrite": false,
    "authenticationRequired": false
  }
}
