{
  "$id": "https://tcpp.digital/schema/1.3.0/charge_process_request.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "tcpp charge_process_request schema",
  "x-tcpp-version": "1.3.0",
  "description": "tcpp charge_process_request schema",
  "type": "object",
  "properties": {
    "tcpp": {
      "description": "url to tcpp version infos",
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,63}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$"
    },
    "head": {
      "$ref": "#/$defs/definition_head"
    },
    "record": {
      "description": "'record_type':'charge_process', 'record_direction':'request'",
      "type": "object",
      "properties": {
        "base": {
          "description": "base informations",
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "process_number": {
              "description": "process pagination",
              "type": [
                "number",
                "null"
              ],
              "minimum": 0,
              "multipleOf": 1
            },
            "process_sign": {
              "description": "CHARGE.AC|CHARGE.DC|...",
              "type": "string",
              "minLength": 5,
              "maxLength": 50,
              "pattern": "^[0-9A-Z._\\-]*$"
            },
            "cp_evseid": {
              "description": "id of chargepoint",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "cp_operator_name": {
              "description": "name of operator company",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 250,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
            },
            "cp_operator_id": {
              "description": "id of operator",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "cp_administrator_id": {
              "description": "optional id of administrator",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "cp_administrator_name": {
              "description": "optional name of administrator",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 250,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
            },
            "cp_location_name": {
              "description": "name of location",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 250,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
            },
            "cp_location_id": {
              "description": "id of location",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "user_emaid": {
              "description": "id of user/car",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "user_msp_name": {
              "description": "name eMSP",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 250,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
            },
            "user_msp_id": {
              "description": "id eMSP",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "meter_sign": {
              "description": "CHARGE.AC|CHARGE.DC|...",
              "type": "string",
              "minLength": 5,
              "maxLength": 50,
              "pattern": "^[0-9A-Z._\\-]*$"
            },
            "meter_id": {
              "description": "id meter",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "reference_id": {
              "description": "id of internal reference / can be empty",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "tariffs": {
              "description": "default tariffs ID and DATE",
              "type": [
                "object",
                "null"
              ]
            },
            "reservation": {
              "description": "one reservation see reservation details",
              "type": [
                "object",
                "null"
              ]
            },
            "limits": {
              "description": "(tech) limits default",
              "type": [
                "object",
                "null"
              ]
            }
          },
          "required": [
            "process_number",
            "process_sign",
            "cp_evseid",
            "cp_operator_id",
            "cp_administrator_id",
            "cp_location_id",
            "user_emaid",
            "user_msp_id",
            "meter_id",
            "tariffs",
            "reservation",
            "limits"
          ]
        },
        "status": {
          "description": "start/actual/end status",
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "actual_process_sign": {
              "description": "INIT|CHARGING|BREAK|END|...",
              "type": "string",
              "minLength": 5,
              "maxLength": 50,
              "pattern": "^[0-9A-Z._\\-]*$"
            },
            "start": {
              "description": "start informations",
              "type": [
                "object",
                "null"
              ]
            },
            "actual": {
              "description": "actual informations",
              "type": [
                "object",
                "null"
              ]
            }
          },
          "required": [
            "actual_process_sign"
          ]
        },
        "events": {
          "description": "events to process",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "properties": {
              "event_udt": {
                "description": "event udt",
                "type": "string",
                "format": "date-time"
              },
              "event_sign": {
                "description": "EVENT.START|...",
                "type": "string",
                "minLength": 5,
                "maxLength": 50,
                "pattern": "^[0-9A-Z._\\-]*$"
              },
              "event_kwh": {
                "description": "charge point kwh",
                "type": [
                  "number",
                  "null"
                ]
              },
              "event_process_sign": {
                "description": "INIT|CHARGING|BREAK|END|...",
                "type": "string",
                "minLength": 5,
                "maxLength": 50,
                "pattern": "^[0-9A-Z._\\-]*$"
              },
              "event_origin_id": {
                "description": "id of origin, can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "event_origin_type": {
                "description": "tcpp type of origin, can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 3,
                "pattern": "^[A-Z]*$"
              },
              "event_reference_id": {
                "description": "id of internal reference / can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "event_subject_id": {
                "description": "id of legal_subject / can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "event_knowledge": {
                "description": "set/change values KW.MAX|KW.MIN|PHASES.MAX|....",
                "type": [
                  "object",
                  "null"
                ]
              },
              "event_values": {
                "description": "set/change values KW.MAX|KW.MIN|PHASES.MAX|....",
                "type": [
                  "object",
                  "null"
                ]
              }
            },
            "required": [
              "event_udt",
              "event_sign"
            ]
          }
        },
        "display": {
          "description": "display output",
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "display_sign": {
              "description": "DISPLAY.CHARGEPOINT.AC|{.DC}...",
              "type": "string",
              "minLength": 5,
              "maxLength": 50,
              "pattern": "^[0-9A-Z._\\-]*$"
            },
            "display_mask_sign": {
              "description": "MASK.CHARGEPOINT.AC.L004C080 = 4 Lines, 80 Chars",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 50,
              "pattern": "^[0-9A-Z._\\-]*$"
            },
            "display_subject_id": {
              "description": "id of internal reference | ",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 120,
              "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
            },
            "display_regions": {
              "description": "supports regions",
              "type": [
                "array",
                "null"
              ]
            },
            "display_region_default": {
              "description": "default, format 'DE-de'",
              "type": [
                "string",
                "null"
              ],
              "minLength": 0,
              "maxLength": 5,
              "pattern": "^[0-9a-zA-Z._\\-]*$"
            },
            "display_fields": {
              "description": "fields: values, label, input, ...",
              "type": [
                "array",
                "null"
              ],
              "items": {
                "properties": {
                  "field_sign": {
                    "description": "CHARGE.EVSEID...",
                    "type": "string",
                    "minLength": 5,
                    "maxLength": 50,
                    "pattern": "^[0-9A-Z._\\-]*$"
                  },
                  "field_type": {
                    "description": "OUTPUT.STRING...",
                    "type": "string",
                    "minLength": 5,
                    "maxLength": 50,
                    "pattern": "^[0-9A-Z._\\-]*$"
                  },
                  "field_id": {
                    "description": "id of internal reference / can be empty",
                    "type": [
                      "string",
                      "null"
                    ],
                    "minLength": 0,
                    "maxLength": 120,
                    "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
                  },
                  "field_pattern": {
                    "description": "json pattern",
                    "type": [
                      "string",
                      "null"
                    ],
                    "minLength": 0,
                    "maxLength": 250,
                    "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
                  },
                  "field_mandatory": {
                    "description": "for measurement mandatory",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "field_size_chars": {
                    "description": "size of chars",
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "field_size_pixel_x": {
                    "description": "size in pixel x",
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "field_size_pixel_y": {
                    "description": "size in pixel y",
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "field_value": {
                    "description": "one value, but based on regions chosen",
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "required": [
                  "field_sign",
                  "field_type",
                  "field_id"
                ]
              }
            }
          },
          "required": [
            "display_sign",
            "display_subject_id",
            "display_fields"
          ]
        },
        "curves": {
          "description": "curves charge or status or informations",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "properties": {
              "curve_sign": {
                "description": "sign of curve: CURVE.G2V.NETTO",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "curve_label": {
                "description": "KW|AMPERE|VOLT|PHASES|REGISTER|PERCENT|STATUS|...",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 50,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "curve_beat": {
                "description": "interval in minutes: 1|5|15|60",
                "type": [
                  "number",
                  "null"
                ]
              },
              "curve_beat_rounded": {
                "description": "rounded to beat based on the time clock / but 1st and last not rounded",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "curve_module_id": {
                "description": "id of module id",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "curve_module_sign": {
                "description": "sign of curve like CURVE.G2V.NETTO|CURVE.STATUS.CONTROLER|...",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "curve_subject_id": {
                "description": "id of legal subject",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "curve_values": {
                "description": "based on sign and label 'date-time': value|'value'",
                "type": [
                  "object",
                  "null"
                ],
                "propertyNames": {
                  "format": "date-time",
                  "minItems": 1,
                  "uniqueItems": true
                },
                "additionalProperties": {
                  "type": [
                    "string",
                    "number",
                    "boolean",
                    "null"
                  ]
                }
              }
            },
            "required": [
              "curve_sign",
              "curve_label",
              "curve_beat",
              "curve_values"
            ]
          }
        },
        "legal_subjects": {
          "description": "other subjects/backends/services linked",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "properties": {
              "subject_id": {
                "description": "id of internal subject",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "backend_id": {
                "description": "id of external backend / can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "backend_type": {
                "description": "tcpp type external backend, can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 3,
                "pattern": "^[A-Z]*$"
              },
              "backend_name": {
                "description": "name of operator company",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "client_sign": {
                "description": "sign of client maybe external backend / can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "client_id": {
                "description": "id of client in external backend / can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "client_name": {
                "description": "name of client maybe external backend",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "object_sign": {
                "description": "sign of object",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "object_id": {
                "description": "id of object of client in external backend (f.e. car of customer of garage)/ can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "object_name": {
                "description": "name of object of client in external backend (f.e. car of customer of garage)/ can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "process_sign": {
                "description": "sign of process of object/client",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "process_id": {
                "description": "id of process of object/client",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "process_name": {
                "description": "name of process of object/client",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 250,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=^]*$"
              },
              "reference_id": {
                "description": "id of internal reference / can be empty",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 0,
                "maxLength": 120,
                "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
              },
              "subject_values": {
                "description": "based on subject extra informations",
                "type": [
                  "object",
                  "null"
                ]
              }
            },
            "required": [
              "subject_id",
              "backend_id",
              "client_id",
              "process_id"
            ]
          }
        },
        "backward_compatible": {
          "description": "backward to old formats",
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "backward_type": {
              "description": "f.e. 'OCMF' or 'EDLxx'",
              "type": [
                "string",
                "null"
              ]
            },
            "backward_record": {
              "description": "f.e. 'FV': '1.5' if 'OCMF' or Hex values for EDL",
              "type": [
                "object",
                "null"
              ]
            },
            "backward_signature": {
              "description": "f.e. 'SD':'21232..' if 'OCMF', others like JWS based don't need separated signatures",
              "type": [
                "object",
                "null"
              ]
            }
          },
          "required": [
            "backward_type"
          ]
        },
        "features": {
          "description": "extra features",
          "type": [
            "object",
            "null"
          ]
        }
      },
      "required": [
        "base",
        "status",
        "events",
        "display",
        "curves",
        "legal_subjects"
      ]
    },
    "participants": {
      "description": "participants of process or communication",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/definition_participant"
      }
    },
    "references": {
      "description": "references to request or process(es)",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "properties": {
          "reference_id": {
            "description": "id of internal reference / can be empty",
            "type": [
              "string",
              "null"
            ],
            "minLength": 0,
            "maxLength": 120,
            "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
          },
          "head": {
            "description": "referencing head 1:1",
            "$ref": "#/$defs/definition_head"
          },
          "jws": {
            "description": "jws signature",
            "type": [
              "object",
              "null"
            ]
          }
        },
        "required": [
          "reference_id",
          "head"
        ]
      }
    }
  },
  "required": [
    "tcpp",
    "head",
    "record",
    "references"
  ],
  "$defs": {
    "definition_head": {
      "description": "unified head informations",
      "type": "object",
      "properties": {
        "record_type": {
          "description": "tcpp record",
          "type": "string",
          "minLength": 3,
          "maxLength": 50,
          "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
        },
        "record_direction": {
          "description": "request|response|internal",
          "type": "string",
          "minLength": 3,
          "maxLength": 8,
          "pattern": "^[a-z]*$"
        },
        "record_udt": {
          "description": "universal datetime",
          "type": "string",
          "format": "date-time"
        },
        "record_pagination": {
          "description": "unique creating number",
          "type": "number",
          "minimum": 1,
          "multipleOf": 1
        },
        "record_version": {
          "description": "version",
          "type": "string",
          "minLength": 5,
          "maxLength": 10,
          "default": "1.3.0",
          "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
        },
        "origin_type": {
          "description": "tcpp type of origin",
          "type": "string",
          "minLength": 3,
          "maxLength": 3,
          "pattern": "^[A-Z]*$"
        },
        "origin_id": {
          "description": "tcpp id of origin",
          "type": "string",
          "minLength": 3,
          "maxLength": 120,
          "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
        },
        "target_type": {
          "description": "tcpp type of target",
          "type": "string",
          "minLength": 3,
          "maxLength": 3,
          "pattern": "^[A-Z]*$"
        },
        "target_id": {
          "description": "tcpp id of target",
          "type": "string",
          "minLength": 3,
          "maxLength": 120,
          "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
        },
        "context_type": {
          "description": "tcpp type of context / can be empty",
          "type": [
            "string",
            "null"
          ],
          "minLength": 0,
          "maxLength": 3,
          "pattern": "^[A-Z]*$"
        },
        "context_id": {
          "description": "id of context / can be empty",
          "type": [
            "string",
            "null"
          ],
          "minLength": 0,
          "maxLength": 120,
          "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
        },
        "error_code": {
          "description": "tcpp error handling, Hex",
          "type": "string",
          "pattern": "^[0-9A-F]{6}$"
        },
        "error_text": {
          "description": "tcpp error text (optional)",
          "type": [
            "string",
            "null"
          ],
          "minLength": 0,
          "maxLength": 120,
          "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
        }
      },
      "required": [
        "record_type",
        "record_direction",
        "record_udt",
        "record_pagination",
        "record_version",
        "origin_type",
        "origin_id",
        "target_type",
        "target_id",
        "context_id",
        "context_type",
        "error_code"
      ]
    },
    "definition_participant": {
      "description": "unified participant informations",
      "type": "object",
      "properties": {
        "participant_type": {
          "description": "tcpp type",
          "type": "string",
          "minLength": 3,
          "maxLength": 3,
          "pattern": "^[A-Z]*$"
        },
        "participant_id": {
          "description": "tcpp id",
          "type": "string",
          "minLength": 3,
          "maxLength": 120,
          "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
        },
        "participant_perms": {
          "description": "rights/functions of participation",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string",
            "description": "read|control|push|broker|...",
            "minLength": 3,
            "maxLength": 10,
            "pattern": "^[a-z]*$"
          }
        },
        "forwarder_type": {
          "description": "forwarder type",
          "type": [
            "string",
            "null"
          ],
          "minLength": 3,
          "maxLength": 3,
          "pattern": "^[A-Z]*$"
        },
        "forwarder_id": {
          "description": "forwarder id",
          "type": [
            "string",
            "null"
          ],
          "minLength": 3,
          "maxLength": 120,
          "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
        },
        "approver_type": {
          "description": "approved by type",
          "type": [
            "string",
            "null"
          ],
          "minLength": 3,
          "maxLength": 3,
          "pattern": "^[A-Z]*$"
        },
        "approver_id": {
          "description": "approved by id",
          "type": [
            "string",
            "null"
          ],
          "minLength": 3,
          "maxLength": 120,
          "pattern": "^[0-9A-Za-z.,;:%&$#*_/\\-+ !?(){}\\[\\]@~=]*$"
        }
      },
      "required": [
        "participant_type",
        "participant_id",
        "participant_perms",
        "approver_type",
        "approver_id"
      ]
    }
  }
}
