diff --git a/.github/workflows/build-and-push-performance-test-image.yml b/.github/workflows/build-and-push-data-generator-image.yml similarity index 73% rename from .github/workflows/build-and-push-performance-test-image.yml rename to .github/workflows/build-and-push-data-generator-image.yml index 8fe9821..3b8957e 100644 --- a/.github/workflows/build-and-push-performance-test-image.yml +++ b/.github/workflows/build-and-push-data-generator-image.yml @@ -1,4 +1,4 @@ -name: Build and Push Perftest Image +name: Build and Push Images on: push: @@ -8,12 +8,20 @@ on: jobs: build-and-push: runs-on: ubuntu-24.04 - + name: ${{ matrix.image_name }} permissions: contents: read packages: write + strategy: + fail-fast: false + matrix: + include: + - image_name: opencrvs-data-generator + dockerfile: Dockerfile.data-generator + - image_name: opencrvs-perf-test + dockerfile: Dockerfile.perf-test env: - image_path: ghcr.io/opencrvs/opencrvs-perftest-data-generator + image_path: ghcr.io/opencrvs/${{ matrix.image_name }} steps: - name: Checkout code uses: actions/checkout@v6 @@ -35,7 +43,7 @@ jobs: fi - name: Build Docker image run: | - docker build -t ${{ env.image_path }}:${{ env.image_tag }} -f Dockerfile . + docker build -t ${{ env.image_path }}:${{ env.image_tag }} -f ${{ matrix.dockerfile }} . - name: Push Docker image run: | diff --git a/.gitignore b/.gitignore index e19e2d0..937344d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ node_modules local-README.md +dist/ +.env diff --git a/Dockerfile b/Dockerfile.data-generator similarity index 100% rename from Dockerfile rename to Dockerfile.data-generator diff --git a/Dockerfile.perf-test b/Dockerfile.perf-test new file mode 100644 index 0000000..7e96e5f --- /dev/null +++ b/Dockerfile.perf-test @@ -0,0 +1,31 @@ +FROM node:22-slim AS base + +RUN apt-get update && apt-get upgrade -y + +RUN apt-get clean && \ + rm -rf /var/cache/apt/archives /var/lib/apt/lists/* + +WORKDIR /app + +COPY --chown=node:node *.json . +COPY --chown=node:node yarn.lock . +COPY --chown=node:node build.mjs . +COPY --chown=node:node src ./src +COPY --chown=node:node tests ./tests +RUN yarn install && yarn build + +# Build the k6 binary with the elasticsearch output extension +# See reference: +# https://grafana.com/docs/k6/latest/results-output/real-time/elasticsearch/ +# https://hub.docker.com/r/grafana/xk6/ +FROM grafana/xk6:latest AS k6-builder +WORKDIR /app +RUN xk6 build --with github.com/elastic/xk6-output-elasticsearch +RUN ls -la /app + +# Final image with k6 and test script +FROM alpine:latest +WORKDIR /app +COPY --from=k6-builder /app/k6 /usr/bin/k6 +COPY --from=base /app/dist /app +ENTRYPOINT ["/usr/bin/k6"] \ No newline at end of file diff --git a/build.mjs b/build.mjs new file mode 100644 index 0000000..6c9d2cb --- /dev/null +++ b/build.mjs @@ -0,0 +1,26 @@ +import esbuild from 'esbuild'; +import { readdir } from 'fs/promises'; + +// Usage: node build.mjs [testName...] +// node build.mjs → builds all tests/*.ts +// node build.mjs smoke → builds tests/smoke.ts only +const names = process.argv.slice(2); + +const entryPoints = + names.length > 0 + ? names.map((n) => `tests/${n}.ts`) + : (await readdir('tests')) + .filter((f) => f.endsWith('.ts')) + .map((f) => `tests/${f}`); + +await esbuild.build({ + entryPoints, + bundle: true, + platform: 'browser', + format: 'cjs', + target: 'es2015', + outdir: 'dist', + // k6 built-in modules must stay external — not bundled + external: ['k6', 'k6/*', 'https://jslib.k6.io/*'], + logLevel: 'info', +}); diff --git a/charts/performance-test/Chart.yaml b/charts/generate-data/Chart.yaml similarity index 85% rename from charts/performance-test/Chart.yaml rename to charts/generate-data/Chart.yaml index f8fc6b8..e28e6dd 100644 --- a/charts/performance-test/Chart.yaml +++ b/charts/generate-data/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -name: performance-test +name: data-generator description: Run a one-off job to generate performance test data type: application version: 0.1.0 diff --git a/charts/performance-test/README.md b/charts/generate-data/README.md similarity index 100% rename from charts/performance-test/README.md rename to charts/generate-data/README.md diff --git a/charts/performance-test/templates/_helpers.tpl b/charts/generate-data/templates/_helpers.tpl similarity index 100% rename from charts/performance-test/templates/_helpers.tpl rename to charts/generate-data/templates/_helpers.tpl diff --git a/charts/performance-test/templates/generate-data-job.yaml b/charts/generate-data/templates/generate-data-job.yaml similarity index 93% rename from charts/performance-test/templates/generate-data-job.yaml rename to charts/generate-data/templates/generate-data-job.yaml index 97e54e0..b54e5a7 100644 --- a/charts/performance-test/templates/generate-data-job.yaml +++ b/charts/generate-data/templates/generate-data-job.yaml @@ -2,6 +2,9 @@ apiVersion: batch/v1 kind: Job metadata: name: {{ include "perf-test-generator.fullname" . }}-{{ .Release.Revision }} + labels: + app.kubernetes.io/name: {{ include "perf-test-generator.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} spec: backoffLimit: {{ .Values.job.backoffLimit }} ttlSecondsAfterFinished: {{ .Values.job.ttlSecondsAfterFinished }} diff --git a/charts/performance-test/templates/secret.yaml b/charts/generate-data/templates/secret.yaml similarity index 100% rename from charts/performance-test/templates/secret.yaml rename to charts/generate-data/templates/secret.yaml diff --git a/charts/performance-test/values.yaml b/charts/generate-data/values.yaml similarity index 100% rename from charts/performance-test/values.yaml rename to charts/generate-data/values.yaml diff --git a/charts/perf-test/Chart.yaml b/charts/perf-test/Chart.yaml new file mode 100644 index 0000000..087045c --- /dev/null +++ b/charts/perf-test/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: perf-test +description: Run a one-off performance test job +type: application +version: 0.1.0 +appVersion: "1.0.0" \ No newline at end of file diff --git a/charts/perf-test/README.md b/charts/perf-test/README.md new file mode 100644 index 0000000..fcae89f --- /dev/null +++ b/charts/perf-test/README.md @@ -0,0 +1,47 @@ +# General informaiton + +Goal of this helm chart is to provide developer and tester a way to run performance data generator on remote server. + +Helm chart creates one time kubernetes job to generate data. + +# Values + +Create you own `values.yaml` using values.yaml as reference. + + +# Install/Upgrade from your laptop + +Example of custom perf-test.yaml file** + +```yaml +env: + GATEWAY_URL: https://gateway.tmp-prod.opencrvs.dev + EVENTS_URL: https://events.tmp-prod.opencrvs.dev + +``` + + +**Install/upgrade command** + +``` +helm upgrade \ + --install \ + -f perf-test.yaml \ + perf-test-job chart/perf-test/ +``` + + +# Install/Upgrade from GitHub Actions workflow + +Please create all required secrets/variables before adding this code snipped to GitHub actions + +``` +helm upgrade \ + --install \ + --set env.GATEWAY_URL=https://gateway.${{ vars.domain }} \ + --set env.EVENTS_URL=https://events.${{ vars.domain }} \ + --set postgres.user=${{ secrets.POSTGRES_USER }} \ + --set postgres.password=${{ secrets.POSTGRES_PASSWORD }} \ + --set postgres.host=${{ vars.POSTGRES_HOSTNAME }} \ + perf-test-job oci://ghcr.io/opencrvs/perf-test:0.1.0 +``` diff --git a/charts/perf-test/templates/_helpers.tpl b/charts/perf-test/templates/_helpers.tpl new file mode 100644 index 0000000..4f912ce --- /dev/null +++ b/charts/perf-test/templates/_helpers.tpl @@ -0,0 +1,11 @@ +{{- define "perf-test-generator.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "perf-test-generator.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name (include "perf-test-generator.name" .) | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} diff --git a/charts/perf-test/templates/perf-test-job.yaml b/charts/perf-test/templates/perf-test-job.yaml new file mode 100644 index 0000000..4e5c4fa --- /dev/null +++ b/charts/perf-test/templates/perf-test-job.yaml @@ -0,0 +1,75 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ include "perf-test-generator.fullname" . }}-{{ .Release.Revision }} + labels: + app.kubernetes.io/name: {{ include "perf-test-generator.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} +spec: + backoffLimit: {{ .Values.job.backoffLimit }} + ttlSecondsAfterFinished: {{ .Values.job.ttlSecondsAfterFinished }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "perf-test-generator.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + restartPolicy: Never + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + containers: + - name: generator + command: + {{- if .Values.command }} + {{- toYaml .Values.command | nindent 10 }} + {{- else }} + ["k6"] + {{- end }} + args: + {{- if .Values.command }} + {{- toYaml .Values.command | nindent 10 }} + {{- else }} + - run + - /app/{{ .Values.k6_script }}.js + {{- if .Values.k6_output }} + - --out + - {{ .Values.k6_output }} + {{- end }} + {{- range $k, $v := .Values.k6_env_args }} + - -e + - {{ $k }}={{ $v }} + {{- end }} + {{- end }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + {{- range $k, $v := .Values.env }} + - name: {{ $k }} + value: {{ $v | quote }} + {{- end }} + {{- range $secretName, $mappings := .Values.perf_test.secrets }} + {{- range $mappings }} + {{- $parts := splitList ":" . }} + - name: {{ index $parts 1 }} + valueFrom: + secretKeyRef: + name: {{ $secretName }} + key: {{ index $parts 0 }} + {{- end }} + {{- end }} + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/perf-test/values.yaml b/charts/perf-test/values.yaml new file mode 100644 index 0000000..6759b55 --- /dev/null +++ b/charts/perf-test/values.yaml @@ -0,0 +1,27 @@ +image: + repository: ghcr.io/opencrvs/opencrvs-perf-test + tag: latest + pullPolicy: Always + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +job: + backoffLimit: 0 + ttlSecondsAfterFinished: 3600 + +resources: {} + +nodeSelector: {} +tolerations: [] +affinity: {} + +# Optional: override command/args if your image does not already have the right entrypoint +command: [] +args: [] + +k6_script: "smoke" + +k6_env_args: + GATEWAY_URL: "http://opencrvs-gateway:3000" \ No newline at end of file diff --git a/opencrvs_events.yml b/opencrvs_events.yml new file mode 100644 index 0000000..c4c86de --- /dev/null +++ b/opencrvs_events.yml @@ -0,0 +1,16595 @@ +openapi: 3.1.0 +info: + title: OpenCRVS API + version: 1.8.0 +servers: + - url: http://localhost:3000/api/events +paths: + /events/reindex: + post: + operationId: event-reindex-trigger + summary: Triggers reindexing of search, workqueues and notifies country config + tags: + - events + security: + - Authorization: [] + parameters: [] + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + waitForCompletion: + default: true + type: boolean + responses: + '200': + description: Successful response + content: + application/json: + schema: {} + '400': &a1 + description: Invalid input data + content: + application/json: + schema: + $ref: '#/components/schemas/error.BAD_REQUEST' + '401': &a2 + description: Authorization not provided + content: + application/json: + schema: + $ref: '#/components/schemas/error.UNAUTHORIZED' + '403': &a3 + description: Insufficient access + content: + application/json: + schema: + $ref: '#/components/schemas/error.FORBIDDEN' + '500': &a4 + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/error.INTERNAL_SERVER_ERROR' + get: + operationId: event-reindex-status + summary: Returns the status of current and past reindexing calls + tags: + - events + security: + - Authorization: [] + parameters: + - in: query + name: limit + schema: + type: integer + minimum: 1 + maximum: 100 + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + timestamp: + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + status: + type: string + enum: + - running + - completed + - failed + progress: + type: object + properties: + processed: + type: integer + minimum: -9007199254740991 + maximum: 9007199254740991 + required: + - processed + additionalProperties: false + error_message: + anyOf: + - type: string + - type: 'null' + completed_at: + anyOf: + - type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + - type: 'null' + required: + - id + - timestamp + - status + - progress + - error_message + - completed_at + additionalProperties: false + '400': *a1 + '401': *a2 + '403': *a3 + '404': &a5 + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/error.NOT_FOUND' + '500': *a4 + /config: + get: + operationId: event-config-get + summary: List event configurations + tags: + - events + security: + - Authorization: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + description: Configuration defining an event type. + $ref: '#/components/schemas/EventConfig' + '401': *a2 + '403': *a3 + '500': *a4 + /events: + post: + operationId: event-create + summary: Create event + tags: + - events + security: + - Authorization: [] + parameters: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + transactionId: + type: string + type: + type: string + createdAtLocation: + description: Location where the event occurred. Required for system users. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + required: + - transactionId + - type + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventDocument' + '400': *a1 + '401': *a2 + '403': *a3 + '500': *a4 + /events/{eventId}: + get: + operationId: event-get + summary: Fetch full event document + tags: + - events + security: + - Authorization: [] + parameters: + - in: path + name: eventId + schema: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: true + - in: query + name: customActionType + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventDocument' + '400': *a1 + '401': *a2 + '403': *a3 + '404': *a5 + '500': *a4 + /events/{eventId}/notify: + post: + operationId: event-actions-notify-request + summary: Notify an event + tags: + - events + security: + - Authorization: [] + parameters: + - in: path + name: eventId + schema: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: true + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + transactionId: + type: string + declaration: + default: {} + description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best + matching schema is chosen by priority. + annotation: + description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best + matching schema is chosen by priority. + originalActionId: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + keepAssignment: + type: boolean + createdAtLocation: + description: + A valid office location ID. This is required for system users + performing actions. The provided location must be a + leaf-location, i.e. it must not have any children locations. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + default: NOTIFY + type: string + const: NOTIFY + required: + - transactionId + additionalProperties: false + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventDocument' + '400': *a1 + '401': *a2 + '403': *a3 + '500': *a4 + /events/{eventId}/correction/request: + post: + operationId: event-actions-correction-request-request + summary: Request correction for an event + tags: + - events + security: + - Authorization: [] + parameters: + - in: path + name: eventId + schema: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: true + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + transactionId: + type: string + declaration: + default: {} + description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best + matching schema is chosen by priority. + annotation: + description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best + matching schema is chosen by priority. + originalActionId: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + keepAssignment: + type: boolean + createdAtLocation: + description: + A valid office location ID. This is required for system users + performing actions. The provided location must be a + leaf-location, i.e. it must not have any children locations. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + default: REQUEST_CORRECTION + type: string + const: REQUEST_CORRECTION + required: + - transactionId + additionalProperties: false + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventDocument' + '400': *a1 + '401': *a2 + '403': *a3 + '500': *a4 + /events/{eventId}/correction/approve: + post: + operationId: event-actions-correction-approve-request + summary: Approve correction for an event + tags: + - events + security: + - Authorization: [] + parameters: + - in: path + name: eventId + schema: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: true + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + transactionId: + type: string + declaration: + default: {} + description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best + matching schema is chosen by priority. + annotation: + description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best + matching schema is chosen by priority. + originalActionId: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + keepAssignment: + type: boolean + createdAtLocation: + description: + A valid office location ID. This is required for system users + performing actions. The provided location must be a + leaf-location, i.e. it must not have any children locations. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + requestId: + type: string + type: + default: APPROVE_CORRECTION + type: string + const: APPROVE_CORRECTION + required: + - transactionId + - requestId + additionalProperties: false + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventDocument' + '400': *a1 + '401': *a2 + '403': *a3 + '500': *a4 + /events/{eventId}/correction/reject: + post: + operationId: event-actions-correction-reject-request + summary: Reject correction for an event + tags: + - events + security: + - Authorization: [] + parameters: + - in: path + name: eventId + schema: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: true + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + transactionId: + type: string + declaration: + default: {} + description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best + matching schema is chosen by priority. + annotation: + description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best + matching schema is chosen by priority. + originalActionId: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + keepAssignment: + type: boolean + createdAtLocation: + description: + A valid office location ID. This is required for system users + performing actions. The provided location must be a + leaf-location, i.e. it must not have any children locations. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + requestId: + type: string + type: + default: REJECT_CORRECTION + type: string + const: REJECT_CORRECTION + content: + type: object + properties: + reason: + description: Message describing the reason for rejecting or archiving the event. + type: string + minLength: 1 + required: + - reason + required: + - transactionId + - requestId + - content + additionalProperties: false + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventDocument' + '400': *a1 + '401': *a2 + '403': *a3 + '500': *a4 + /events/search: + post: + operationId: event-search + summary: Search for events + tags: + - Search + security: + - Authorization: [] + parameters: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + query: + $ref: '#/components/schemas/QueryType' + limit: + default: 100 + type: number + offset: + default: 0 + type: number + sort: + type: array + items: + type: object + properties: + field: + type: string + direction: + default: asc + type: string + enum: + - asc + - desc + required: + - field + required: + - query + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + results: + type: array + items: + $ref: '#/components/schemas/EventIndex' + total: + type: number + required: + - results + - total + additionalProperties: false + '400': *a1 + '401': *a2 + '403': *a3 + '500': *a4 + /locations: + get: + operationId: locations-list + summary: List locations + description: Retrieve a list of locations based on provided filters. + tags: + - locations + security: + - Authorization: [] + parameters: + - in: query + name: isActive + schema: + type: boolean + - in: query + name: locationIds + schema: + type: array + items: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - in: query + name: locationType + schema: + type: string + - in: query + name: externalId + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + name: + type: string + externalId: + anyOf: + - type: string + - type: 'null' + administrativeAreaId: + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + validUntil: + anyOf: + - type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + - type: 'null' + locationType: + anyOf: + - type: string + - type: 'null' + required: + - id + - name + - administrativeAreaId + - validUntil + - locationType + additionalProperties: false + '400': *a1 + '401': *a2 + '403': *a3 + '404': *a5 + '500': *a4 + /integrations: + post: + operationId: integrations-create + summary: Create a new integration client + tags: + - Integrations + security: + - Authorization: [] + parameters: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + minLength: 1 + scopes: + minItems: 1 + type: array + items: + type: string + required: + - name + - scopes + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + clientId: + type: string + shaSecret: + type: string + clientSecret: + type: string + required: + - clientId + - shaSecret + - clientSecret + additionalProperties: false + '400': *a1 + '401': *a2 + '403': *a3 + '500': *a4 + get: + operationId: integrations-list + summary: List integration clients + tags: + - Integrations + security: + - Authorization: [] + parameters: + - in: query + name: status + schema: + type: string + enum: + - active + - disabled + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + scopes: + type: array + items: + type: string + status: + type: string + createdAt: + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + type: string + required: + - id + - name + - scopes + - status + - createdAt + - createdBy + additionalProperties: false + '400': *a1 + '401': *a2 + '403': *a3 + '404': *a5 + '500': *a4 + /attachments: + post: + summary: Upload a file attachment + tags: + - Attachments + security: + - bearerAuth: + - attachment.upload + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + path: + type: string + description: Optional path in S3 where the file should be stored + transactionId: + type: string + description: Transaction ID + file: + type: string + format: binary + description: File to upload + required: + - transactionId + - file + responses: + '200': + description: File uploaded successfully. Requires authentication and + attachment.upload scope. + content: + application/json: + schema: + type: object + properties: + result: + type: object + properties: + data: + type: object + properties: + json: + type: string +components: + schemas: + QueryType: + type: object + properties: + type: + default: and + anyOf: + - type: string + const: and + - type: string + const: or + clauses: + default: + - eventType: tennis-club-membership + status: + type: anyOf + terms: + - CREATED + - NOTIFIED + - DECLARED + - REGISTERED + - ARCHIVED + updatedAt: + type: range + gte: 2025-05-22 + lte: 2025-05-29 + data: {} + minItems: 1 + type: array + items: + anyOf: + - $ref: '#/components/schemas/QueryExpression' + - $ref: '#/components/schemas/QueryType' + required: + - type + - clauses + QueryExpression: + type: object + properties: + id: + type: string + eventType: + type: string + status: + anyOf: + - $ref: '#/components/schemas/AnyOfStatus' + - $ref: '#/components/schemas/ExactStatus' + createdAt: + $ref: '#/components/schemas/DateCondition' + updatedAt: + $ref: '#/components/schemas/DateCondition' + legalStatuses.DECLARED.createdAtLocation: + anyOf: + - $ref: '#/components/schemas/Within' + - type: 'null' + legalStatuses.DECLARED.createdByRole: + $ref: '#/components/schemas/AnyOf' + legalStatuses.REGISTERED.acceptedAt: + $ref: '#/components/schemas/DateCondition' + legalStatuses.REGISTERED.createdAtLocation: + anyOf: + - $ref: '#/components/schemas/Within' + - type: 'null' + legalStatuses.REGISTERED.createdByRole: + $ref: '#/components/schemas/AnyOf' + legalStatuses.REGISTERED.registrationNumber: + $ref: '#/components/schemas/Exact' + createdAtLocation: + $ref: '#/components/schemas/Within' + updatedAtLocation: + $ref: '#/components/schemas/Within' + assignedTo: + $ref: '#/components/schemas/Exact' + createdByUserType: + $ref: '#/components/schemas/ExactUserType' + updatedByUserRole: + $ref: '#/components/schemas/Exact' + createdBy: + $ref: '#/components/schemas/Exact' + updatedBy: + $ref: '#/components/schemas/Exact' + trackingId: + $ref: '#/components/schemas/Exact' + flags: + $ref: '#/components/schemas/ContainsFlags' + data: + $ref: '#/components/schemas/QueryInput' + AnyOfStatus: + type: object + properties: + type: + type: string + const: anyOf + terms: + type: array + items: + type: string + enum: + - CREATED + - NOTIFIED + - DECLARED + - REGISTERED + - ARCHIVED + required: + - type + - terms + ExactStatus: + type: object + properties: + type: + type: string + const: exact + term: + type: string + enum: + - CREATED + - NOTIFIED + - DECLARED + - REGISTERED + - ARCHIVED + required: + - type + - term + DateCondition: + anyOf: + - $ref: '#/components/schemas/ExactDate' + - $ref: '#/components/schemas/RangeDate' + - $ref: '#/components/schemas/TimePeriod' + ExactDate: + type: object + properties: + type: + type: string + const: exact + term: + anyOf: + - type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + required: + - type + - term + RangeDate: + type: object + properties: + type: + type: string + const: range + gte: + anyOf: + - type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + lte: + anyOf: + - type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + required: + - type + - gte + - lte + TimePeriod: + type: object + properties: + type: + type: string + const: timePeriod + term: + type: string + enum: + - last7Days + - last30Days + - last90Days + - last365Days + required: + - type + - term + Within: + type: object + properties: + type: + type: string + const: within + location: + type: string + required: + - type + - location + AnyOf: + type: object + properties: + type: + type: string + const: anyOf + terms: + type: array + items: + type: string + required: + - type + - terms + Exact: + type: object + properties: + type: + type: string + const: exact + term: + type: string + required: + - type + - term + ExactUserType: + type: object + properties: + type: + type: string + const: exact + term: + type: string + enum: + - user + - system + required: + - type + - term + ContainsFlags: + type: object + properties: + anyOf: + type: array + items: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + noneOf: + type: array + items: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + QueryInput: + anyOf: + - oneOf: + - $ref: '#/components/schemas/Fuzzy' + - $ref: '#/components/schemas/Exact' + - $ref: '#/components/schemas/Range' + - $ref: '#/components/schemas/Within' + - $ref: '#/components/schemas/AnyOf' + type: object + discriminator: + propertyName: type + mapping: + fuzzy: '#/components/schemas/Fuzzy' + exact: '#/components/schemas/Exact' + range: '#/components/schemas/Range' + within: '#/components/schemas/Within' + anyOf: '#/components/schemas/AnyOf' + - type: object + propertyNames: + type: string + additionalProperties: + $ref: '#/components/schemas/QueryInput' + Fuzzy: + type: object + properties: + type: + type: string + const: fuzzy + term: + type: string + required: + - type + - term + Range: + type: object + properties: + type: + type: string + const: range + gte: + type: string + lte: + type: string + required: + - type + - gte + - lte + error.BAD_REQUEST: + title: Invalid input data error (400) + description: The error information + example: + code: BAD_REQUEST + message: Invalid input data + issues: [] + type: object + properties: + message: + description: The error message + example: Invalid input data + type: string + code: + description: The error code + example: BAD_REQUEST + type: string + issues: + description: An array of issues that were responsible for the error + example: [] + type: array + items: + type: object + properties: + message: + type: string + required: + - message + additionalProperties: false + required: + - message + - code + additionalProperties: false + error.UNAUTHORIZED: + title: Authorization not provided error (401) + description: The error information + example: + code: UNAUTHORIZED + message: Authorization not provided + issues: [] + type: object + properties: + message: + description: The error message + example: Authorization not provided + type: string + code: + description: The error code + example: UNAUTHORIZED + type: string + issues: + description: An array of issues that were responsible for the error + example: [] + type: array + items: + type: object + properties: + message: + type: string + required: + - message + additionalProperties: false + required: + - message + - code + additionalProperties: false + error.FORBIDDEN: + title: Insufficient access error (403) + description: The error information + example: + code: FORBIDDEN + message: Insufficient access + issues: [] + type: object + properties: + message: + description: The error message + example: Insufficient access + type: string + code: + description: The error code + example: FORBIDDEN + type: string + issues: + description: An array of issues that were responsible for the error + example: [] + type: array + items: + type: object + properties: + message: + type: string + required: + - message + additionalProperties: false + required: + - message + - code + additionalProperties: false + error.INTERNAL_SERVER_ERROR: + title: Internal server error error (500) + description: The error information + example: + code: INTERNAL_SERVER_ERROR + message: Internal server error + issues: [] + type: object + properties: + message: + description: The error message + example: Internal server error + type: string + code: + description: The error code + example: INTERNAL_SERVER_ERROR + type: string + issues: + description: An array of issues that were responsible for the error + example: [] + type: array + items: + type: object + properties: + message: + type: string + required: + - message + additionalProperties: false + required: + - message + - code + additionalProperties: false + error.NOT_FOUND: + title: Not found error (404) + description: The error information + example: + code: NOT_FOUND + message: Not found + issues: [] + type: object + properties: + message: + description: The error message + example: Not found + type: string + code: + description: The error code + example: NOT_FOUND + type: string + issues: + description: An array of issues that were responsible for the error + example: [] + type: array + items: + type: object + properties: + message: + type: string + required: + - message + additionalProperties: false + required: + - message + - code + additionalProperties: false + EventConfig: + type: object + properties: + id: + description: Machine-readable identifier of the event (e.g. "birth", "death"). + type: string + dateOfEvent: + description: + Reference to the field capturing the date of the event (e.g. date + of birth). Defaults to the event creation date if unspecified. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - description: + Reference to a field defined in the event metadata, using the field + id. + type: object + properties: + $$event: + type: string + enum: + - createdAt + - updatedAt + - legalStatuses.DECLARED.createdAt + - legalStatuses.DECLARED.acceptedAt + - legalStatuses.REGISTERED.createdAt + - legalStatuses.REGISTERED.acceptedAt + required: + - $$event + additionalProperties: false + placeOfEvent: + description: + Reference to the field capturing the place of the event (e.g. place + of birth). Defaults to the meta.createdAtLocation if unspecified. + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + title: + description: + Title template for the singular event, supporting variables (e.g. + "{applicant.name.firstname} {applicant.name.surname}"). + $ref: '#/components/schemas/TranslationConfig' + fallbackTitle: + description: Fallback title shown when the main title resolves to an empty value. + $ref: '#/components/schemas/TranslationConfig' + summary: + description: Summary information displayed in the event overview. + type: object + properties: + fields: + description: Fields displayed in the event summary view. + type: array + items: + anyOf: + - description: Custom field defined for the summary view. + type: object + properties: + emptyValueMessage: + description: Default message displayed when the field value is empty. + $ref: '#/components/schemas/TranslationConfig' + conditionals: + default: [] + type: array + items: + description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + id: + description: Identifier of the summary field. + type: string + value: + description: + Field value template supporting variables from configuration and + EventMetadata (e.g. "{informant.phoneNo} + {informant.email}"). + $ref: '#/components/schemas/TranslationConfig' + label: + $ref: '#/components/schemas/TranslationConfig' + required: + - id + - value + - label + additionalProperties: false + - description: Field referencing existing event data by field ID. + type: object + properties: + emptyValueMessage: + description: Default message displayed when the field value is empty. + $ref: '#/components/schemas/TranslationConfig' + conditionals: + default: [] + type: array + items: + description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + fieldId: + type: string + label: + description: + Overrides the default label from the referenced field when + provided. + $ref: '#/components/schemas/TranslationConfig' + required: + - fieldId + additionalProperties: false + required: + - fields + additionalProperties: false + label: + description: Human-readable label for the event type. + $ref: '#/components/schemas/TranslationConfig' + actions: + description: Configuration of system-defined actions associated with the event. + type: array + items: + $ref: '#/components/schemas/ActionConfig' + actionOrder: + description: + Order of actions in the action menu. Use either the action type for + core actions or the customActionType for custom actions. + type: array + items: + type: string + declaration: + description: Configuration of the form used to gather event data. + type: object + properties: + label: + description: Human readable description of the form + $ref: '#/components/schemas/TranslationConfig' + pages: + type: array + items: + type: object + properties: + id: + description: Unique identifier for the page + type: string + title: + description: Header title of the page + $ref: '#/components/schemas/TranslationConfig' + requireCompletionToContinue: + description: + If true, all required fields must be filled before continuing to + the next page + default: false + type: boolean + fields: + description: Fields to be rendered on the page + type: array + items: + $ref: '#/components/schemas/FieldConfig' + conditional: + description: + Page will be shown if condition is met. If conditional is not + defined, the page will be always shown. + $ref: '#/components/schemas/Conditional' + type: + default: FORM + type: string + const: FORM + required: + - id + - title + - requireCompletionToContinue + - fields + - type + additionalProperties: false + required: + - label + - pages + additionalProperties: false + advancedSearch: + description: Configuration of fields available in the advanced search feature. + default: [] + type: array + items: + type: object + properties: + title: + description: Advanced search tab title + $ref: '#/components/schemas/TranslationConfig' + fields: + description: Advanced search fields within the tab. + type: array + items: + oneOf: + - type: object + properties: + config: + type: object + properties: + type: + description: Determines the search type of field. How to match value. + type: string + enum: + - fuzzy + - exact + - range + - within + searchFields: + description: " + + \ Defines multiple form fields that should + be searched when this field has a value. + + \ All specified fields will be combined + using OR logic. + + + \ Example: { searchFields: ['mother.name', + 'father.name', 'informant.name'] } + + \ Will search all fields and return a + record if any of the fields match the search + value. \ + + \ " + type: array + items: + type: string + required: + - type + additionalProperties: false + type: + description: " + + \ Explicitly specify the field type for + searchFields. + + \ This is required when searchFields is + defined, to show the correct control in the UI. + + \ \ + + \ Example: FieldType.NAME for name fields, + FieldType.TEXT for text fields, FieldType.DATE for + date fields, etc. + + \ " + type: string + enum: + - NAME + - PHONE + - ID + - ADDRESS + - TEXT + - NUMBER + - NUMBER_WITH_UNIT + - TEXTAREA + - EMAIL + - DATE + - AGE + - DATE_RANGE + - SELECT_DATE_RANGE + - TIME + - IMAGE_VIEW + - PARAGRAPH + - HEADING + - PAGE_HEADER + - RADIO_GROUP + - FILE + - FILE_WITH_OPTIONS + - BULLET_LIST + - CHECKBOX + - SELECT + - COUNTRY + - LOCATION + - DIVIDER + - ADMINISTRATIVE_AREA + - FACILITY + - OFFICE + - SIGNATURE + - DATA + - BUTTON + - SEARCH + - ALPHA_PRINT_BUTTON + - HTTP + - LINK_BUTTON + - VERIFICATION_STATUS + - QUERY_PARAM_READER + - QR_READER + - ID_READER + - LOADER + - ALPHA_HIDDEN + - USER_ROLE + - CUSTOM + label: + description: " + + \ Explicitly specify the label for + searchFields. + + \ This is required when searchFields is + defined. \ + + \ " + $ref: '#/components/schemas/TranslationConfig' + options: + type: array + items: + type: object + properties: + value: + description: The value of the option + type: string + label: + description: The label of the option + anyOf: + - type: string + - $ref: '#/components/schemas/TranslationConfig' + required: + - value + - label + additionalProperties: false + searchCriteriaLabelPrefix: + description: " + + \ This property determines whether to add a + prefix (such as \"Child\" or \"Applicant\") before + the field label + + \ when rendering search parameter labels — for + example, in the search results page to indicate + which fields were used in the search. + + + \ For example, a field config like { id: + \"child.name.firstname\", label: { defaultMessage: + \"First Name(s)\" } } would render as \"First + Name(s)\" by default. + + + \ A field config like { id: \"mother.firstname\", + label: { defaultMessage: \"First Name(s)\" } } would + also render as \"First Name(s)\" by default. + + + \ So, if both child.name.firstname and + mother.firstname are used in a search, the resulting + search criteria labels would be \"First Name(s)\", + \"First Name(s)\", + + \ which is ambiguous. + + + \ Now, if we treat the field ID prefix as a label + (e.g., \"applicant.firstname\" → \"Applicant\"), and + the field label is already + + \ descriptive — like { id: + \"applicant.firstname\", label: { defaultMessage: + \"Applicant's First Name\" } } — then the resulting + + \ label would be \"Applicant Applicant's First + Name\", which is redundant and awkward. + + + \ By setting searchCriteriaLabelPrefix to a + translation config object, we can explicitly define + the desired prefix + + \ in the country-config > event.advancedSearch + configuration. For example: field(\"child.dob\", { + searchCriteriaLabelPrefix: TranslationConfig }). + + \ " + $ref: '#/components/schemas/TranslationConfig' + conditionals: + description: " + + \ In advanced search, we sometimes need to + override the default field visibility conditionals. + + + \ For example, Informant fields in the + declaration form may have conditional logic + + \ that hides them based on other field values. + Since the advanced search form reuses + + \ the declaration form config, those same + conditionals would apply by default. + + + \ However, in advanced search we often want to + make all Informant fields searchable, + + \ regardless of their original visibility + logic. To do this, we explicitly set their + + \ 'conditionals' to an empty array ('[]') in + the search config. This ensures they + + \ are always rendered in the advanced search + form. + + \ " + type: array + items: + $ref: '#/components/schemas/FieldConditional' + validations: + description: + Option for overriding the field validations specifically for + advanced search form. + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + fieldId: + type: string + fieldType: + type: string + const: field + required: + - config + - fieldId + - fieldType + additionalProperties: false + - type: object + properties: + config: + type: object + properties: + type: + description: Determines the search type of field. How to match value. + type: string + enum: + - fuzzy + - exact + - range + - within + searchFields: + description: " + + \ Defines multiple form fields that should + be searched when this field has a value. + + \ All specified fields will be combined + using OR logic. + + + \ Example: { searchFields: ['mother.name', + 'father.name', 'informant.name'] } + + \ Will search all fields and return a + record if any of the fields match the search + value. \ + + \ " + type: array + items: + type: string + required: + - type + additionalProperties: false + type: + description: " + + \ Explicitly specify the field type for + searchFields. + + \ This is required when searchFields is + defined, to show the correct control in the UI. + + \ \ + + \ Example: FieldType.NAME for name fields, + FieldType.TEXT for text fields, FieldType.DATE for + date fields, etc. + + \ " + type: string + enum: + - NAME + - PHONE + - ID + - ADDRESS + - TEXT + - NUMBER + - NUMBER_WITH_UNIT + - TEXTAREA + - EMAIL + - DATE + - AGE + - DATE_RANGE + - SELECT_DATE_RANGE + - TIME + - IMAGE_VIEW + - PARAGRAPH + - HEADING + - PAGE_HEADER + - RADIO_GROUP + - FILE + - FILE_WITH_OPTIONS + - BULLET_LIST + - CHECKBOX + - SELECT + - COUNTRY + - LOCATION + - DIVIDER + - ADMINISTRATIVE_AREA + - FACILITY + - OFFICE + - SIGNATURE + - DATA + - BUTTON + - SEARCH + - ALPHA_PRINT_BUTTON + - HTTP + - LINK_BUTTON + - VERIFICATION_STATUS + - QUERY_PARAM_READER + - QR_READER + - ID_READER + - LOADER + - ALPHA_HIDDEN + - USER_ROLE + - CUSTOM + label: + description: " + + \ Explicitly specify the label for + searchFields. + + \ This is required when searchFields is + defined. \ + + \ " + $ref: '#/components/schemas/TranslationConfig' + options: + type: array + items: + type: object + properties: + value: + description: The value of the option + type: string + label: + description: The label of the option + anyOf: + - type: string + - $ref: '#/components/schemas/TranslationConfig' + required: + - value + - label + additionalProperties: false + searchCriteriaLabelPrefix: + description: " + + \ This property determines whether to add a + prefix (such as \"Child\" or \"Applicant\") before + the field label + + \ when rendering search parameter labels — for + example, in the search results page to indicate + which fields were used in the search. + + + \ For example, a field config like { id: + \"child.name.firstname\", label: { defaultMessage: + \"First Name(s)\" } } would render as \"First + Name(s)\" by default. + + + \ A field config like { id: \"mother.firstname\", + label: { defaultMessage: \"First Name(s)\" } } would + also render as \"First Name(s)\" by default. + + + \ So, if both child.name.firstname and + mother.firstname are used in a search, the resulting + search criteria labels would be \"First Name(s)\", + \"First Name(s)\", + + \ which is ambiguous. + + + \ Now, if we treat the field ID prefix as a label + (e.g., \"applicant.firstname\" → \"Applicant\"), and + the field label is already + + \ descriptive — like { id: + \"applicant.firstname\", label: { defaultMessage: + \"Applicant's First Name\" } } — then the resulting + + \ label would be \"Applicant Applicant's First + Name\", which is redundant and awkward. + + + \ By setting searchCriteriaLabelPrefix to a + translation config object, we can explicitly define + the desired prefix + + \ in the country-config > event.advancedSearch + configuration. For example: field(\"child.dob\", { + searchCriteriaLabelPrefix: TranslationConfig }). + + \ " + $ref: '#/components/schemas/TranslationConfig' + conditionals: + description: " + + \ In advanced search, we sometimes need to + override the default field visibility conditionals. + + + \ For example, Informant fields in the + declaration form may have conditional logic + + \ that hides them based on other field values. + Since the advanced search form reuses + + \ the declaration form config, those same + conditionals would apply by default. + + + \ However, in advanced search we often want to + make all Informant fields searchable, + + \ regardless of their original visibility + logic. To do this, we explicitly set their + + \ 'conditionals' to an empty array ('[]') in + the search config. This ensures they + + \ are always rendered in the advanced search + form. + + \ " + type: array + items: + $ref: '#/components/schemas/FieldConditional' + validations: + description: + Option for overriding the field validations specifically for + advanced search form. + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + fieldId: + type: string + enum: + - event.trackingId + - event.status + - event.legalStatuses.REGISTERED.acceptedAt + - event.legalStatuses.REGISTERED.createdAtLocation + - event.legalStatuses.REGISTERED.registrationNumber + - event.updatedAt + fieldType: + type: string + const: event + required: + - config + - fieldId + - fieldType + additionalProperties: false + type: object + required: + - title + - fields + additionalProperties: false + flags: + description: + Configuration of flags associated with the actions of this event + type. + default: [] + type: array + items: + type: object + properties: + id: + description: Custom flag identifier defined by the country config. + type: string + requiresAction: + description: + Indicates if this flag expects an action to be performed to be + cleared. + type: boolean + label: + description: Human readable label of the flag. + $ref: '#/components/schemas/TranslationConfig' + required: + - id + - requiresAction + - label + additionalProperties: false + required: + - id + - title + - summary + - label + - actions + - declaration + - advancedSearch + - flags + additionalProperties: false + TranslationConfig: + description: Translation configuration + type: object + properties: + id: + description: The identifier of the translation referred in translation CSV files + type: string + defaultMessage: + description: Default translation message + type: string + description: + description: Describe the translation for a translator to be able to identify it. + type: string + required: + - id + - defaultMessage + - description + additionalProperties: false + Conditional: + description: JSON schema conditional configuration + ActionConfig: + description: + Configuration of an action available for an event. Data collected + depends on the action type and is accessible through the annotation + property in ActionDocument. + oneOf: + - $ref: '#/components/schemas/ReadActionConfig' + - $ref: '#/components/schemas/DeclareActionConfig' + - $ref: '#/components/schemas/RejectActionConfig' + - $ref: '#/components/schemas/RegisterActionConfig' + - $ref: '#/components/schemas/PrintCertificateActionConfig' + - $ref: '#/components/schemas/RequestCorrectionActionConfig' + - $ref: '#/components/schemas/EditActionConfig' + - $ref: '#/components/schemas/ArchiveActionConfig' + - $ref: '#/components/schemas/CustomActionConfig' + type: object + discriminator: + propertyName: type + mapping: + READ: '#/components/schemas/ReadActionConfig' + DECLARE: '#/components/schemas/DeclareActionConfig' + REJECT: '#/components/schemas/RejectActionConfig' + REGISTER: '#/components/schemas/RegisterActionConfig' + PRINT_CERTIFICATE: '#/components/schemas/PrintCertificateActionConfig' + REQUEST_CORRECTION: '#/components/schemas/RequestCorrectionActionConfig' + EDIT: '#/components/schemas/EditActionConfig' + ARCHIVE: '#/components/schemas/ArchiveActionConfig' + CUSTOM: '#/components/schemas/CustomActionConfig' + ReadActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Read-action can not be disabled or hidden with conditionals. + not: {} + type: + type: string + const: READ + review: + description: Configuration of the review page for read-only view. + type: object + properties: + title: + description: Title of the review page + $ref: '#/components/schemas/TranslationConfig' + fields: + description: Fields displayed on the review page for annotations. + type: array + items: + $ref: '#/components/schemas/FieldConfig' + required: + - title + - fields + additionalProperties: false + required: + - label + - flags + - type + - review + additionalProperties: false + FieldConfig: + description: Form field configuration + oneOf: + - description: Address input field – a combination of location and text fields + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: ADDRESS + configuration: + type: object + properties: + lineSeparator: + type: string + fields: + type: array + items: + type: string + enum: + - country + - administrativeArea + administrativeLevels: + type: array + items: + type: string + streetAddressForm: + type: array + items: + type: object + properties: + id: + type: string + required: + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + label: + $ref: '#/components/schemas/TranslationConfig' + type: + type: string + const: TEXT + conditionals: + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + parent: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + allowedLocations: + description: + Limits which location options are selectable depending on user + jurisdiction and location. + type: object + properties: + $jurisdiction: + anyOf: + - description: + Filters based on user jurisdiction relative to their office + location in hierarchy. + type: string + enum: + - administrativeArea + - location + - all + - type: object + properties: + $scope: + type: string + enum: + - organisation.read-locations + - user.read + - user.create + - user.edit + - record.search + - record.create + - record.read + - record.declare + - record.notify + - record.edit + - record.reject + - record.archive + - record.review-duplicates + - record.register + - record.print-certified-copies + - record.request-correction + - record.correct + - record.unassign-others + - record.custom-action + - bypassratelimit + - record.reindex + - user.data-seeding + - integration.create + - record.import + - config.update-all + - attachment.upload + - profile.electronic-signature + - user.read-only-my-audit + - performance.read + - performance.read-dashboards + - performance.vital-statistics-export + - record.confirm-registration + - record.reject-registration + - workqueue + $option: + type: string + enum: + - event + - placeOfEvent + - declaredIn + - declaredBy + - registeredIn + - registeredBy + - accessLevel + - ids + required: + - $scope + - $option + additionalProperties: false + required: + - $jurisdiction + additionalProperties: false + additionalProperties: false + defaultValue: + type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: DOMESTIC + administrativeArea: + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: object + properties: + $userField: + type: string + enum: + - id + - name + - role + - fullHonorificName + - device + - firstname + - middlename + - surname + - signature + - avatar + - primaryOfficeId + - administrativeAreaId + $location: + type: string + required: + - $userField + additionalProperties: false + required: + - country + - addressType + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: Text input + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: TEXT + defaultValue: + anyOf: + - type: string + minLength: 1 + - type: object + properties: + $userField: + type: string + enum: + - id + - name + - role + - fullHonorificName + - device + - firstname + - middlename + - surname + - signature + - avatar + - primaryOfficeId + - administrativeAreaId + $location: + type: string + required: + - $userField + additionalProperties: false + configuration: + default: + type: text + type: object + properties: + maxLength: + description: Maximum length of the text + type: number + type: + type: string + enum: + - text + - password + prefix: + $ref: '#/components/schemas/TranslationConfig' + postfix: + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: Number input + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: NUMBER + defaultValue: + type: number + configuration: + type: object + properties: + min: + description: Minimum value + type: number + max: + description: Maximum value + type: number + prefix: + $ref: '#/components/schemas/TranslationConfig' + postfix: + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: Number with unit input + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: NUMBER_WITH_UNIT + defaultValue: + type: object + properties: + numericValue: + type: number + unit: + type: string + required: + - numericValue + - unit + additionalProperties: false + options: + description: A list of options for the unit select + type: array + items: + type: object + properties: + value: + description: The value of the option + type: string + label: + description: The label of the option + anyOf: + - type: string + - $ref: '#/components/schemas/TranslationConfig' + required: + - value + - label + additionalProperties: false + configuration: + type: object + properties: + min: + description: Minimum value of the number field + type: number + max: + description: Maximum value of the number field + type: number + numberFieldPlaceholder: + description: Placeholder for the number field + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + required: + - id + - label + - type + - options + additionalProperties: false + - description: Multiline text input + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: TEXTAREA + defaultValue: + type: string + minLength: 1 + configuration: + default: + rows: 4 + type: object + properties: + maxLength: + description: Maximum length of the text + type: number + rows: + description: Number of visible text lines + type: number + cols: + description: Number of visible columns + type: number + prefix: + $ref: '#/components/schemas/TranslationConfig' + postfix: + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: An age input field which uses the current date as the asOfDate + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: AGE + defaultValue: + type: number + configuration: + type: object + properties: + asOfDate: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + prefix: + $ref: '#/components/schemas/TranslationConfig' + postfix: + $ref: '#/components/schemas/TranslationConfig' + required: + - asOfDate + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: A single date input (yyyy-MM-dd) + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: DATE + defaultValue: + description: Default date value(yyyy-MM-dd) + anyOf: + - type: object + properties: + $$now: + type: boolean + const: true + required: + - $$now + additionalProperties: false + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + configuration: + type: object + properties: + notice: + description: Text to display above the date input + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: A single date input (HH-mm) + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: TIME + defaultValue: + description: Default time value (HH-mm) + anyOf: + - type: object + properties: + $$now: + type: boolean + const: true + required: + - $$now + additionalProperties: false + - type: string + pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$ + configuration: + type: object + properties: + use12HourFormat: + description: Whether to use 12-hour format + type: boolean + notice: + description: Text to display above the time input + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: 'A date range input ({ start: yyyy-MM-dd, end: yyyy-MM-dd })' + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: DATE_RANGE + defaultValue: + description: + Date range with start and end dates in the format YYYY-MM-DD. + Inclusive start, exclusive end. + anyOf: + - type: object + properties: + start: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + end: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + required: + - start + - end + additionalProperties: false + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + configuration: + type: object + properties: + notice: + description: Text to display above the date input + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: Select input with date range options + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: SELECT_DATE_RANGE + defaultValue: + type: string + enum: + - last7Days + - last30Days + - last90Days + - last365Days + options: + description: A list of options + type: array + items: + type: object + properties: + value: + description: The value of the option + type: string + enum: + - last7Days + - last30Days + - last90Days + - last365Days + label: + description: The label of the option + $ref: '#/components/schemas/TranslationConfig' + required: + - value + - label + additionalProperties: false + required: + - id + - label + - type + - options + additionalProperties: false + - description: A read-only image component for form pages + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: IMAGE_VIEW + defaultValue: + type: string + minLength: 1 + configuration: + type: object + properties: + alt: + description: Alternative text for the image + type: string + width: + description: CSS width value for the image + type: string + height: + description: CSS height value for the image + type: string + textAlign: + description: Text alignment for positioning the image in its container + type: string + enum: + - left + - center + - right + - start + - end + objectFit: + description: How the image should be resized to fit the container + type: string + enum: + - contain + - cover + - fill + - none + - scale-down + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: A read-only HTML

paragraph + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: PARAGRAPH + defaultValue: + type: string + minLength: 1 + configuration: + default: {} + type: object + properties: + styles: + type: object + properties: + hint: + description: When true, paragraph is styled as a hint with grey color + type: boolean + textAlign: + description: Text alignment for the paragraph + type: string + enum: + - left + - center + - right + - start + - end + additionalProperties: false + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: A read-only heading component for form pages + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: HEADING + defaultValue: + type: string + minLength: 1 + configuration: + default: {} + type: object + properties: + styles: + type: object + properties: + fontVariant: + description: Font variant to use for the paragraph text + type: string + enum: + - reg12 + - reg14 + - reg16 + - reg18 + - h4 + - h3 + textAlign: + description: Text alignment for the paragraph + type: string + enum: + - left + - center + - right + - start + - end + additionalProperties: false + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: Grouped radio options + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: RADIO_GROUP + defaultValue: + type: string + options: + description: A list of options + type: array + items: + type: object + properties: + value: + description: The value of the option + type: string + label: + description: The label of the option + anyOf: + - type: string + - $ref: '#/components/schemas/TranslationConfig' + required: + - value + - label + additionalProperties: false + configuration: + type: object + properties: + styles: + type: object + properties: + size: + type: string + enum: + - NORMAL + - LARGE + additionalProperties: false + additionalProperties: false + required: + - id + - label + - type + - options + additionalProperties: false + - description: A list of bullet points + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: BULLET_LIST + defaultValue: + type: string + items: + description: A list of items + type: array + items: + $ref: '#/components/schemas/TranslationConfig' + configuration: + default: {} + type: object + properties: + styles: + type: object + properties: + fontVariant: + type: string + enum: + - reg12 + - reg14 + - reg16 + - reg18 + - h4 + - h3 + - h2 + - h1 + additionalProperties: false + additionalProperties: false + required: + - id + - label + - type + - items + - configuration + additionalProperties: false + - description: A read-only header component for form pages + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: PAGE_HEADER + defaultValue: + type: string + minLength: 1 + required: + - id + - label + - type + additionalProperties: false + - description: Select input + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: SELECT + defaultValue: + type: string + options: + description: A list of options + type: array + items: + type: object + properties: + value: + description: The value of the option + type: string + label: + description: The label of the option + anyOf: + - type: string + - $ref: '#/components/schemas/TranslationConfig' + required: + - value + - label + additionalProperties: false + noOptionsMessage: + description: " + + \ A translation configuration object used to display a + message when no options are available. + + \ It must follow the shape: { id: string; defaultMessage: + string; description?: string }. + + \ The message is rendered via + intl.formatMessage(noOptionsMessage, { input }), + + \ where 'input' represents the text entered in the Select + field. + + \ You can reference this variable in your message, for + example: + + \ { ..., defaultMessage: \"'{input}' is not listed among the + health facilities.\" } + + \ " + $ref: '#/components/schemas/TranslationConfig' + required: + - id + - label + - type + - options + additionalProperties: false + - description: Name input field + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: NAME + defaultValue: + type: object + properties: + firstname: + anyOf: + - type: object + properties: + $userField: + type: string + enum: + - id + - name + - role + - fullHonorificName + - device + - firstname + - middlename + - surname + - signature + - avatar + - primaryOfficeId + - administrativeAreaId + $location: + type: string + required: + - $userField + additionalProperties: false + - type: string + minLength: 1 + middlename: + anyOf: + - type: object + properties: + $userField: + type: string + enum: + - id + - name + - role + - fullHonorificName + - device + - firstname + - middlename + - surname + - signature + - avatar + - primaryOfficeId + - administrativeAreaId + $location: + type: string + required: + - $userField + additionalProperties: false + - type: string + minLength: 1 + surname: + anyOf: + - type: object + properties: + $userField: + type: string + enum: + - id + - name + - role + - fullHonorificName + - device + - firstname + - middlename + - surname + - signature + - avatar + - primaryOfficeId + - administrativeAreaId + $location: + type: string + required: + - $userField + additionalProperties: false + - type: string + minLength: 1 + additionalProperties: false + configuration: + default: + name: + firstname: + required: true + surname: + required: true + type: object + properties: + name: + default: + firstname: + required: true + surname: + required: true + type: object + properties: + firstname: + type: object + properties: + required: + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + label: + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + middlename: + type: object + properties: + required: + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + label: + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + surname: + type: object + properties: + required: + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + label: + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + additionalProperties: false + order: + type: array + items: + type: string + enum: + - firstname + - middlename + - surname + maxLength: + description: Maximum length of the text + type: number + prefix: + $ref: '#/components/schemas/TranslationConfig' + postfix: + $ref: '#/components/schemas/TranslationConfig' + showParentFieldError: + description: If true, shows the parent field error and hides the subfield error + default: false + type: boolean + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: Phone input field + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + defaultValue: + type: string + minLength: 1 + type: + type: string + const: PHONE + required: + - id + - label + - type + additionalProperties: false + - description: ID input field + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + defaultValue: + type: string + minLength: 1 + type: + type: string + const: ID + required: + - id + - label + - type + additionalProperties: false + - description: Boolean checkbox field + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: CHECKBOX + defaultValue: + default: false + type: boolean + required: + - id + - label + - type + - defaultValue + additionalProperties: false + - description: File upload + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: FILE + defaultValue: + type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + originalFilename: + type: string + type: + type: string + required: + - path + - originalFilename + - type + additionalProperties: false + configuration: + default: + maxFileSize: 5242880 + type: object + properties: + maxFileSize: + default: 5242880 + description: Maximum file size in bytes + type: number + acceptedFileTypes: + description: List of allowed file formats for the signature + type: array + items: + type: string + enum: + - image/png + - image/jpg + - image/jpeg + - image/svg+xml + - application/pdf + - application/msword + - application/vnd.openxmlformats-officedocument.wordprocessingml.document + - application/vnd.oasis.opendocument.text + maxImageSize: + type: object + properties: + targetSize: + type: object + properties: + width: + type: number + height: + type: number + required: + - width + - height + additionalProperties: false + required: + - targetSize + additionalProperties: false + style: + type: object + properties: + width: + description: + Whether the file upload button should take the full width of the + container or not + type: string + enum: + - full + - auto + additionalProperties: false + fileName: + $ref: '#/components/schemas/TranslationConfig' + required: + - maxFileSize + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: Country select field + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: COUNTRY + defaultValue: + type: string + minLength: 1 + required: + - id + - label + - type + additionalProperties: false + - description: Administrative area input field e.g. facility, office + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: ADMINISTRATIVE_AREA + defaultValue: + type: string + minLength: 1 + configuration: + description: Administrative area options + type: object + properties: + partOf: + description: Parent location + type: object + properties: + $declaration: + type: string + required: + - $declaration + additionalProperties: false + type: + type: string + enum: + - ADMIN_STRUCTURE + - HEALTH_FACILITY + - CRVS_OFFICE + allowedLocations: + description: + Limits which location options are selectable depending on user + jurisdiction and location. + type: object + properties: + $jurisdiction: + anyOf: + - description: + Filters based on user jurisdiction relative to their office + location in hierarchy. + type: string + enum: + - administrativeArea + - location + - all + - type: object + properties: + $scope: + type: string + enum: + - organisation.read-locations + - user.read + - user.create + - user.edit + - record.search + - record.create + - record.read + - record.declare + - record.notify + - record.edit + - record.reject + - record.archive + - record.review-duplicates + - record.register + - record.print-certified-copies + - record.request-correction + - record.correct + - record.unassign-others + - record.custom-action + - bypassratelimit + - record.reindex + - user.data-seeding + - integration.create + - record.import + - config.update-all + - attachment.upload + - profile.electronic-signature + - user.read-only-my-audit + - performance.read + - performance.read-dashboards + - performance.vital-statistics-export + - record.confirm-registration + - record.reject-registration + - workqueue + $option: + type: string + enum: + - event + - placeOfEvent + - declaredIn + - declaredBy + - registeredIn + - registeredBy + - accessLevel + - ids + required: + - $scope + - $option + additionalProperties: false + required: + - $jurisdiction + additionalProperties: false + required: + - type + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: DIVIDER + required: + - id + - label + - type + additionalProperties: false + - description: Input field for a location + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: LOCATION + defaultValue: + type: string + minLength: 1 + configuration: + type: object + properties: + locationTypes: + description: Types of the locations that are available for selection. + type: array + items: + type: string + allowedLocations: + description: + Limits which location options are selectable depending on user + jurisdiction and location. + type: object + properties: + $jurisdiction: + anyOf: + - description: + Filters based on user jurisdiction relative to their office + location in hierarchy. + type: string + enum: + - administrativeArea + - location + - all + - type: object + properties: + $scope: + type: string + enum: + - organisation.read-locations + - user.read + - user.create + - user.edit + - record.search + - record.create + - record.read + - record.declare + - record.notify + - record.edit + - record.reject + - record.archive + - record.review-duplicates + - record.register + - record.print-certified-copies + - record.request-correction + - record.correct + - record.unassign-others + - record.custom-action + - bypassratelimit + - record.reindex + - user.data-seeding + - integration.create + - record.import + - config.update-all + - attachment.upload + - profile.electronic-signature + - user.read-only-my-audit + - performance.read + - performance.read-dashboards + - performance.vital-statistics-export + - record.confirm-registration + - record.reject-registration + - workqueue + $option: + type: string + enum: + - event + - placeOfEvent + - declaredIn + - declaredBy + - registeredIn + - registeredBy + - accessLevel + - ids + required: + - $scope + - $option + additionalProperties: false + required: + - $jurisdiction + additionalProperties: false + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: Input field for a facility + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: FACILITY + defaultValue: + type: string + minLength: 1 + configuration: + type: object + properties: + allowedLocations: + description: + Limits which location options are selectable depending on user + jurisdiction and location. + type: object + properties: + $jurisdiction: + anyOf: + - description: + Filters based on user jurisdiction relative to their office + location in hierarchy. + type: string + enum: + - administrativeArea + - location + - all + - type: object + properties: + $scope: + type: string + enum: + - organisation.read-locations + - user.read + - user.create + - user.edit + - record.search + - record.create + - record.read + - record.declare + - record.notify + - record.edit + - record.reject + - record.archive + - record.review-duplicates + - record.register + - record.print-certified-copies + - record.request-correction + - record.correct + - record.unassign-others + - record.custom-action + - bypassratelimit + - record.reindex + - user.data-seeding + - integration.create + - record.import + - config.update-all + - attachment.upload + - profile.electronic-signature + - user.read-only-my-audit + - performance.read + - performance.read-dashboards + - performance.vital-statistics-export + - record.confirm-registration + - record.reject-registration + - workqueue + $option: + type: string + enum: + - event + - placeOfEvent + - declaredIn + - declaredBy + - registeredIn + - registeredBy + - accessLevel + - ids + required: + - $scope + - $option + additionalProperties: false + required: + - $jurisdiction + additionalProperties: false + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: Input field for an office + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: OFFICE + defaultValue: + type: string + minLength: 1 + configuration: + type: object + properties: + allowedLocations: + description: + Limits which location options are selectable depending on user + jurisdiction and location. + type: object + properties: + $jurisdiction: + anyOf: + - description: + Filters based on user jurisdiction relative to their office + location in hierarchy. + type: string + enum: + - administrativeArea + - location + - all + - type: object + properties: + $scope: + type: string + enum: + - organisation.read-locations + - user.read + - user.create + - user.edit + - record.search + - record.create + - record.read + - record.declare + - record.notify + - record.edit + - record.reject + - record.archive + - record.review-duplicates + - record.register + - record.print-certified-copies + - record.request-correction + - record.correct + - record.unassign-others + - record.custom-action + - bypassratelimit + - record.reindex + - user.data-seeding + - integration.create + - record.import + - config.update-all + - attachment.upload + - profile.electronic-signature + - user.read-only-my-audit + - performance.read + - performance.read-dashboards + - performance.vital-statistics-export + - record.confirm-registration + - record.reject-registration + - workqueue + $option: + type: string + enum: + - event + - placeOfEvent + - declaredIn + - declaredBy + - registeredIn + - registeredBy + - accessLevel + - ids + required: + - $scope + - $option + additionalProperties: false + required: + - $jurisdiction + additionalProperties: false + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + - description: Signature input field + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: SIGNATURE + signaturePromptLabel: + description: Title of the signature modal + $ref: '#/components/schemas/TranslationConfig' + defaultValue: + anyOf: + - anyOf: + - oneOf: + - type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: DOMESTIC + administrativeArea: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: + - country + - addressType + - administrativeArea + additionalProperties: false + - type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: INTERNATIONAL + required: + - country + - addressType + additionalProperties: false + type: object + - type: string + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: object + properties: + age: + type: number + asOfDateRef: + type: string + required: + - age + - asOfDateRef + additionalProperties: false + - type: string + pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$ + - description: + Date range with start and end dates in the format YYYY-MM-DD. + Inclusive start, exclusive end. + anyOf: + - type: object + properties: + start: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + end: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + required: + - start + - end + additionalProperties: false + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + enum: + - last7Days + - last30Days + - last90Days + - last365Days + - type: boolean + - type: number + - type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The + document service constructs the full /bucket/path + internally. + type: string + originalFilename: + type: string + type: + type: string + required: + - path + - originalFilename + - type + additionalProperties: false + - type: array + items: + type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The + document service constructs the full /bucket/path + internally. + type: string + originalFilename: + type: string + type: + type: string + option: + type: string + required: + - path + - originalFilename + - type + - option + additionalProperties: false + - type: object + properties: + firstname: + type: string + surname: + type: string + middlename: + type: string + required: + - firstname + - surname + additionalProperties: false + - anyOf: + - anyOf: + - type: object + properties: + firstname: + anyOf: + - type: string + - type: 'null' + surname: + anyOf: + - type: string + - type: 'null' + middlename: + anyOf: + - type: string + - type: 'null' + additionalProperties: false + - type: 'null' + - not: {} + - type: number + - type: object + properties: + loading: + type: boolean + error: + anyOf: + - type: object + properties: + statusCode: + type: number + message: + type: string + required: + - statusCode + - message + additionalProperties: false + - type: 'null' + data: {} + required: + - loading + - data + additionalProperties: false + - type: string + enum: + - verified + - authenticated + - failed + - pending + - anyOf: + - type: object + properties: + data: + type: object + propertyNames: + type: string + additionalProperties: + type: string + updatedAt: + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + required: + - data + - updatedAt + additionalProperties: false + - type: 'null' + - type: object + properties: + data: {} + required: + - data + additionalProperties: false + - type: object + properties: + data: {} + required: + - data + additionalProperties: false + - type: object + properties: + numericValue: + type: number + unit: + type: string + required: + - numericValue + - unit + additionalProperties: false + - type: object + properties: + numericValue: + type: number + unit: + type: string + additionalProperties: false + - {} + - anyOf: + - type: object + properties: + data: + type: object + propertyNames: + type: string + additionalProperties: + anyOf: + - oneOf: + - type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: DOMESTIC + administrativeArea: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: + - country + - addressType + - administrativeArea + additionalProperties: false + - type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: INTERNATIONAL + required: + - country + - addressType + additionalProperties: false + type: object + - type: string + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: object + properties: + age: + type: number + asOfDateRef: + type: string + required: + - age + - asOfDateRef + additionalProperties: false + - type: string + pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$ + - description: + Date range with start and end dates in the format YYYY-MM-DD. + Inclusive start, exclusive end. + anyOf: + - type: object + properties: + start: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + end: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + required: + - start + - end + additionalProperties: false + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + enum: + - last7Days + - last30Days + - last90Days + - last365Days + - type: boolean + - type: number + - type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or + directory/document-id.jpg. The document + service constructs the full /bucket/path + internally. + type: string + originalFilename: + type: string + type: + type: string + required: + - path + - originalFilename + - type + additionalProperties: false + - type: array + items: + type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or + directory/document-id.jpg. The document + service constructs the full /bucket/path + internally. + type: string + originalFilename: + type: string + type: + type: string + option: + type: string + required: + - path + - originalFilename + - type + - option + additionalProperties: false + - type: object + properties: + firstname: + type: string + surname: + type: string + middlename: + type: string + required: + - firstname + - surname + additionalProperties: false + - anyOf: + - anyOf: + - type: object + properties: + firstname: + anyOf: + - type: string + - type: 'null' + surname: + anyOf: + - type: string + - type: 'null' + middlename: + anyOf: + - type: string + - type: 'null' + additionalProperties: false + - type: 'null' + - not: {} + - type: number + - type: object + properties: + loading: + type: boolean + error: + anyOf: + - type: object + properties: + statusCode: + type: number + message: + type: string + required: + - statusCode + - message + additionalProperties: false + - type: 'null' + data: {} + required: + - loading + - data + additionalProperties: false + - type: string + enum: + - verified + - authenticated + - failed + - pending + - anyOf: + - type: object + properties: + data: + type: object + propertyNames: + type: string + additionalProperties: + type: string + updatedAt: + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + required: + - data + - updatedAt + additionalProperties: false + - type: 'null' + - type: object + properties: + data: {} + required: + - data + additionalProperties: false + - type: object + properties: + data: {} + required: + - data + additionalProperties: false + - type: object + properties: + numericValue: + type: number + unit: + type: string + required: + - numericValue + - unit + additionalProperties: false + - type: object + properties: + numericValue: + type: number + unit: + type: string + additionalProperties: false + - {} + required: + - data + additionalProperties: false + - type: 'null' + configuration: + default: + maxFileSize: 5242880 + type: object + properties: + maxFileSize: + default: 5242880 + description: Maximum file size in bytes + type: number + acceptedFileTypes: + description: List of allowed file formats for the signature + type: array + items: + type: string + enum: + - image/png + - image/jpg + - image/jpeg + - image/svg+xml + - application/pdf + - application/msword + - application/vnd.openxmlformats-officedocument.wordprocessingml.document + - application/vnd.oasis.opendocument.text + required: + - maxFileSize + additionalProperties: false + required: + - id + - label + - type + - signaturePromptLabel + - configuration + additionalProperties: false + - type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: EMAIL + configuration: + default: + maxLength: 255 + type: object + properties: + maxLength: + description: Maximum length of the text + type: number + additionalProperties: false + defaultValue: + type: string + minLength: 1 + required: + - id + - label + - type + additionalProperties: false + - type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: FILE_WITH_OPTIONS + options: + description: A list of options + type: array + items: + type: object + properties: + value: + description: The value of the option + type: string + label: + description: The label of the option + anyOf: + - type: string + - $ref: '#/components/schemas/TranslationConfig' + required: + - value + - label + additionalProperties: false + defaultValue: + type: array + items: + type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + originalFilename: + type: string + type: + type: string + option: + type: string + required: + - path + - originalFilename + - type + - option + additionalProperties: false + configuration: + default: + maxFileSize: 5242880 + type: object + properties: + maxFileSize: + default: 5242880 + description: Maximum file size in bytes + type: number + maxImageSize: + type: object + properties: + targetSize: + type: object + properties: + width: + type: number + height: + type: number + required: + - width + - height + additionalProperties: false + required: + - targetSize + additionalProperties: false + acceptedFileTypes: + description: List of allowed file formats for the signature + type: array + items: + type: string + enum: + - image/png + - image/jpg + - image/jpeg + - image/svg+xml + - application/pdf + - application/msword + - application/vnd.openxmlformats-officedocument.wordprocessingml.document + - application/vnd.oasis.opendocument.text + required: + - maxFileSize + additionalProperties: false + required: + - id + - label + - type + - options + - configuration + additionalProperties: false + - description: Data field for displaying read-only data + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: DATA + configuration: + type: object + properties: + subtitle: + $ref: '#/components/schemas/TranslationConfig' + data: + type: array + items: + description: + Data entry can be either a static data entry, or a reference to + another field in the current form or the declaration. + anyOf: + - description: Static data entry + type: object + properties: + id: + description: ID for the data entry. + type: string + label: + $ref: '#/components/schemas/TranslationConfig' + value: + anyOf: + - anyOf: + - $ref: '#/components/schemas/TranslationConfig' + - type: string + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 + } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + - id + - label + - value + additionalProperties: false + - type: object + properties: + fieldId: + type: string + required: + - fieldId + additionalProperties: false + required: + - data + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: Generic button without any built-in functionality + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: BUTTON + defaultValue: + type: number + configuration: + type: object + properties: + icon: + description: Icon for the button. You can find icons from OpenCRVS UI-Kit. + type: string + loading: + description: Whether the button is in a loading state and shows a spinner + type: boolean + text: + description: Text to display on the button + $ref: '#/components/schemas/TranslationConfig' + required: + - text + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: Print button field for printing certificates + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: ALPHA_PRINT_BUTTON + configuration: + type: object + properties: + template: + description: Template ID from countryconfig templates to use for printing + type: string + buttonLabel: + description: Label for the print button + $ref: '#/components/schemas/TranslationConfig' + required: + - template + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: HTTP request function triggered by a button click or other event + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: HTTP + defaultValue: + type: object + properties: + loading: + type: boolean + error: + anyOf: + - type: object + properties: + statusCode: + type: number + message: + type: string + required: + - statusCode + - message + additionalProperties: false + - type: 'null' + data: {} + required: + - loading + - data + additionalProperties: false + configuration: + type: object + properties: + trigger: + description: + Reference to the field that triggers the HTTP request when its + value changes. If not provided, the HTTP request is + triggered once on component mount. + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + url: + description: URL to send the HTTP request to + type: string + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + headers: + type: object + propertyNames: + type: string + additionalProperties: + type: string + body: + type: object + propertyNames: + type: string + additionalProperties: {} + errorValue: + description: Value to set if the request fails + params: + type: object + propertyNames: + type: string + additionalProperties: + anyOf: + - type: string + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + timeout: + description: Request timeout in milliseconds + default: 15000 + type: number + required: + - url + - method + - timeout + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: Button that opens a link + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: LINK_BUTTON + configuration: + type: object + properties: + url: + description: URL to open + type: string + text: + description: Text to display on the button + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon for the button. You can find icons from OpenCRVS UI-Kit. + type: string + required: + - url + - text + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: VERIFICATION_STATUS + defaultValue: + type: string + enum: + - verified + - authenticated + - failed + - pending + configuration: + type: object + properties: + status: + description: Text to display on the status pill. + $ref: '#/components/schemas/TranslationConfig' + description: + description: Explaining text on the banner in form. + $ref: '#/components/schemas/TranslationConfig' + required: + - status + - description + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - $ref: '#/components/schemas/QrReaderField' + - type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: ID_READER + defaultValue: + type: object + properties: + data: {} + required: + - data + additionalProperties: false + methods: + type: array + items: + description: Methods for reading an ID + anyOf: + - $ref: '#/components/schemas/QrReaderField' + - description: Button that opens a link + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } + }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } + }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when + explicitly assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If + multiple references are provided, the first truthy + value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } + }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } + }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics + dashboard. + default: false + type: boolean + type: + type: string + const: LINK_BUTTON + configuration: + type: object + properties: + url: + description: URL to open + type: string + text: + description: Text to display on the button + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon for the button. You can find icons from OpenCRVS UI-Kit. + type: string + required: + - url + - text + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + required: + - id + - label + - type + - methods + additionalProperties: false + - description: + A field that maps URL query params into form values and clears them + afterward + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: QUERY_PARAM_READER + configuration: + type: object + properties: + pickParams: + description: List of query parameters to read from the URL + type: array + items: + type: string + required: + - pickParams + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - description: + A non-interactive field that indicates an in progress operation in + form + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: LOADER + configuration: + type: object + properties: + text: + description: Display text above the loading spinner + $ref: '#/components/schemas/TranslationConfig' + required: + - text + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: SEARCH + defaultValue: + type: object + properties: + loading: + type: boolean + error: + anyOf: + - type: object + properties: + statusCode: + type: number + message: + type: string + required: + - statusCode + - message + additionalProperties: false + - type: 'null' + data: {} + required: + - loading + - data + additionalProperties: false + configuration: + type: object + properties: + query: + default: + type: and + clauses: + - eventType: tennis-club-membership + status: + type: anyOf + terms: + - CREATED + - NOTIFIED + - DECLARED + - REGISTERED + - ARCHIVED + updatedAt: + type: range + gte: 2025-05-22 + lte: 2025-05-29 + data: {} + $ref: '#/components/schemas/QueryTypeOutput' + limit: + default: 100 + type: number + offset: + default: 0 + type: number + validation: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + indicators: + type: object + properties: + loading: + description: Text to display while the search is in progress + $ref: '#/components/schemas/TranslationConfig' + offline: + description: Text to display when the application is offline + $ref: '#/components/schemas/TranslationConfig' + noResultsError: + description: Text to display when no results are found during the search + $ref: '#/components/schemas/TranslationConfig' + httpError: + description: Text to display when there is an HTTP error during the search + $ref: '#/components/schemas/TranslationConfig' + confirmButton: + $ref: '#/components/schemas/TranslationConfig' + clearButton: + $ref: '#/components/schemas/TranslationConfig' + clearModal: + type: object + properties: + title: + $ref: '#/components/schemas/TranslationConfig' + description: + $ref: '#/components/schemas/TranslationConfig' + cancel: + $ref: '#/components/schemas/TranslationConfig' + confirm: + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + ok: + $ref: '#/components/schemas/TranslationConfig' + additionalProperties: false + required: + - query + - limit + - offset + - validation + additionalProperties: false + required: + - id + - label + - type + - configuration + additionalProperties: false + - type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: CUSTOM + defaultValue: {} + src: + description: Module source path for the custom field component + type: string + configuration: {} + required: + - id + - label + - type + - src + additionalProperties: false + - description: A non-interactive, hidden field that only hold a value in the form + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + default: false + type: boolean + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: ALPHA_HIDDEN + defaultValue: + type: string + required: + - id + - label + - type + additionalProperties: false + - description: + A select dropdown that is automatically populated with available + user roles + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly + assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: + Indicates whether the field can be modified during record + correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: USER_ROLE + defaultValue: + type: string + required: + - id + - label + - type + additionalProperties: false + type: object + FieldConditional: + description: Field conditional configuration + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'DISPLAY_ON_REVIEW' conditional is defined, the component is + shown on the review page only if both the 'DISPLAY_ON_REVIEW' and + 'SHOW' conditions are met. This should only be used for fields + within declaration forms, as they are the only ones with review + pages. + type: object + properties: + type: + type: string + const: DISPLAY_ON_REVIEW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + QrReaderField: + description: + Configuration for QR code reader field, including optional JSON + Schema validator. + type: object + properties: + id: + description: Unique identifier of the field. + type: string + label: + description: Human-readable label of the field. + $ref: '#/components/schemas/TranslationConfig' + parent: + description: + Reference to the parent field or fields. When a parent field + changes, this field is reset. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + required: + description: Indicates whether the field is mandatory. + default: false + anyOf: + - type: boolean + - type: object + properties: + message: + description: Custom required validation message + $ref: '#/components/schemas/TranslationConfig' + required: + - message + additionalProperties: false + conditionals: + description: + Conditions determining when the field is shown or enabled. By + default, the field is always shown and enabled. + default: [] + type: array + items: + $ref: '#/components/schemas/FieldConditional' + secured: + description: + Indicates whether the field is secured. Secured fields are not + indexed for search and are only visible when explicitly assigned. + default: false + type: boolean + placeholder: + $ref: '#/components/schemas/TranslationConfig' + validation: + description: Additional validation rules applied to the field. + default: [] + type: array + items: + type: object + properties: + validator: + $ref: '#/components/schemas/Conditional' + message: + $ref: '#/components/schemas/TranslationConfig' + required: + - validator + - message + additionalProperties: false + helperText: + $ref: '#/components/schemas/TranslationConfig' + hideLabel: + default: false + type: boolean + uncorrectable: + description: Indicates whether the field can be modified during record correction. + default: false + type: boolean + value: + description: + Reference to the source field or fields. When a value is defined, + it is copied from the parent field when changed. If multiple + references are provided, the first truthy value is used. + anyOf: + - description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + - type: array + items: + description: Reference to a field by its ID + type: object + properties: + $$field: + description: Unique identifier for the field + type: string + $$subfield: + description: + 'If the FieldValue is an object, subfield can be used to refer to + e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`' + default: [] + type: array + items: + type: string + required: + - $$field + - $$subfield + additionalProperties: false + analytics: + description: + Indicates whether the field is included in analytics. When enabled, + its value becomes available in the analytics dashboard. + default: false + type: boolean + type: + type: string + const: QR_READER + defaultValue: + type: object + properties: + data: {} + required: + - data + additionalProperties: false + configuration: + type: object + properties: + validator: + $ref: '#/components/schemas/QrReaderFieldValidator' + required: + - validator + additionalProperties: false + required: + - id + - label + - type + additionalProperties: false + QrReaderFieldValidator: + description: + JSON Schema to validate the scanned QR code data against before + populating the form fields. + DeclareActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Conditionals which can disable or hide actions. + type: array + items: + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + deduplication: + type: object + properties: + id: + type: string + label: + $ref: '#/components/schemas/TranslationConfig' + query: + $ref: '#/components/schemas/Clause' + required: + - id + - label + - query + additionalProperties: false + type: + type: string + const: DECLARE + review: + description: Configuration of the review page fields. + type: object + properties: + title: + description: Title of the review page + $ref: '#/components/schemas/TranslationConfig' + fields: + description: Fields displayed on the review page for annotations. + type: array + items: + $ref: '#/components/schemas/FieldConfig' + required: + - title + - fields + additionalProperties: false + dialogCopy: + type: object + properties: + notify: + description: Confirmation text for the notify action + $ref: '#/components/schemas/TranslationConfig' + declare: + description: Confirmation text for the declare action + $ref: '#/components/schemas/TranslationConfig' + register: + description: Confirmation text for the register action + $ref: '#/components/schemas/TranslationConfig' + required: + - notify + - declare + - register + additionalProperties: false + required: + - label + - flags + - type + - review + additionalProperties: false + Clause: + oneOf: + - type: object + properties: + type: + type: string + const: not + clause: + $ref: '#/components/schemas/Clause' + required: + - type + - clause + additionalProperties: false + - type: object + properties: + type: + type: string + const: and + clauses: + type: array + items: + $ref: '#/components/schemas/Clause' + required: + - type + - clauses + additionalProperties: false + - type: object + properties: + type: + type: string + const: or + clauses: + type: array + items: + $ref: '#/components/schemas/Clause' + required: + - type + - clauses + additionalProperties: false + - type: object + properties: + fieldId: + type: string + options: + default: + fuzziness: AUTO:4,7 + boost: 1 + type: object + properties: + fuzziness: + default: AUTO:4,7 + anyOf: + - type: string + - type: number + boost: + default: 1 + type: number + matchAgainst: + type: string + required: + - fuzziness + - boost + additionalProperties: false + type: + type: string + const: fuzzy + required: + - fieldId + - options + - type + additionalProperties: false + - type: object + properties: + fieldId: + type: string + options: + default: + boost: 1 + type: object + properties: + boost: + default: 1 + type: number + value: + type: string + matchAgainst: + type: string + required: + - boost + additionalProperties: false + type: + type: string + const: strict + required: + - fieldId + - options + - type + additionalProperties: false + - type: object + properties: + fieldId: + type: string + options: + type: object + properties: + pivot: + type: number + days: + type: number + boost: + default: 1 + type: number + matchAgainst: + type: string + required: + - days + - boost + additionalProperties: false + type: + type: string + const: dateRange + required: + - fieldId + - options + - type + additionalProperties: false + type: object + RejectActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Conditionals which can disable or hide actions. + type: array + items: + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + type: + type: string + const: REJECT + required: + - label + - flags + - type + additionalProperties: false + RegisterActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Conditionals which can disable or hide actions. + type: array + items: + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + deduplication: + type: object + properties: + id: + type: string + label: + $ref: '#/components/schemas/TranslationConfig' + query: + $ref: '#/components/schemas/Clause' + required: + - id + - label + - query + additionalProperties: false + type: + type: string + const: REGISTER + required: + - label + - flags + - type + additionalProperties: false + PrintCertificateActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Conditionals which can disable or hide actions. + type: array + items: + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + type: + type: string + const: PRINT_CERTIFICATE + printForm: + description: Configuration of the form used for system actions beyond + declaration, supporting a wider range of page types. + type: object + properties: + label: + description: Human readable description of the form + $ref: '#/components/schemas/TranslationConfig' + pages: + type: array + items: + oneOf: + - type: object + properties: + id: + description: Unique identifier for the page + type: string + title: + description: Header title of the page + $ref: '#/components/schemas/TranslationConfig' + requireCompletionToContinue: + description: + If true, all required fields must be filled before continuing to + the next page + default: false + type: boolean + fields: + description: Fields to be rendered on the page + type: array + items: + $ref: '#/components/schemas/FieldConfig' + conditional: + description: + Page will be shown if condition is met. If conditional is not + defined, the page will be always shown. + $ref: '#/components/schemas/Conditional' + type: + default: FORM + type: string + const: FORM + required: + - id + - title + - requireCompletionToContinue + - fields + - type + additionalProperties: false + - type: object + properties: + id: + description: Unique identifier for the page + type: string + title: + description: Header title of the page + $ref: '#/components/schemas/TranslationConfig' + requireCompletionToContinue: + description: + If true, all required fields must be filled before continuing to + the next page + default: false + type: boolean + fields: + description: Fields to be rendered on the page + type: array + items: + $ref: '#/components/schemas/FieldConfig' + conditional: + description: + Page will be shown if condition is met. If conditional is not + defined, the page will be always shown. + $ref: '#/components/schemas/Conditional' + type: + type: string + const: VERIFICATION + actions: + $ref: '#/components/schemas/VerificationActionConfig' + required: + - id + - title + - requireCompletionToContinue + - fields + - type + - actions + additionalProperties: false + type: object + required: + - label + - pages + additionalProperties: false + required: + - label + - flags + - type + - printForm + additionalProperties: false + VerificationActionConfig: + description: Verification action configuration + type: object + properties: + verify: + type: object + properties: + label: + $ref: '#/components/schemas/TranslationConfig' + required: + - label + additionalProperties: false + cancel: + type: object + properties: + label: + $ref: '#/components/schemas/TranslationConfig' + confirmation: + type: object + properties: + title: + $ref: '#/components/schemas/TranslationConfig' + body: + $ref: '#/components/schemas/TranslationConfig' + required: + - title + - body + additionalProperties: false + required: + - label + - confirmation + additionalProperties: false + required: + - verify + - cancel + additionalProperties: false + RequestCorrectionActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Conditionals which can disable or hide actions. + type: array + items: + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + type: + type: string + const: REQUEST_CORRECTION + correctionForm: + description: Configuration of the form used for system actions beyond + declaration, supporting a wider range of page types. + type: object + properties: + label: + description: Human readable description of the form + $ref: '#/components/schemas/TranslationConfig' + pages: + type: array + items: + oneOf: + - type: object + properties: + id: + description: Unique identifier for the page + type: string + title: + description: Header title of the page + $ref: '#/components/schemas/TranslationConfig' + requireCompletionToContinue: + description: + If true, all required fields must be filled before continuing to + the next page + default: false + type: boolean + fields: + description: Fields to be rendered on the page + type: array + items: + $ref: '#/components/schemas/FieldConfig' + conditional: + description: + Page will be shown if condition is met. If conditional is not + defined, the page will be always shown. + $ref: '#/components/schemas/Conditional' + type: + default: FORM + type: string + const: FORM + required: + - id + - title + - requireCompletionToContinue + - fields + - type + additionalProperties: false + - type: object + properties: + id: + description: Unique identifier for the page + type: string + title: + description: Header title of the page + $ref: '#/components/schemas/TranslationConfig' + requireCompletionToContinue: + description: + If true, all required fields must be filled before continuing to + the next page + default: false + type: boolean + fields: + description: Fields to be rendered on the page + type: array + items: + $ref: '#/components/schemas/FieldConfig' + conditional: + description: + Page will be shown if condition is met. If conditional is not + defined, the page will be always shown. + $ref: '#/components/schemas/Conditional' + type: + type: string + const: VERIFICATION + actions: + $ref: '#/components/schemas/VerificationActionConfig' + required: + - id + - title + - requireCompletionToContinue + - fields + - type + - actions + additionalProperties: false + type: object + required: + - label + - pages + additionalProperties: false + required: + - label + - flags + - type + - correctionForm + additionalProperties: false + EditActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Conditionals which can disable or hide actions. + type: array + items: + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + type: + type: string + const: EDIT + dialogCopy: + type: object + properties: + notify: + description: Confirmation text for the notify with edits action + $ref: '#/components/schemas/TranslationConfig' + declare: + description: Confirmation text for the declare with edits action + $ref: '#/components/schemas/TranslationConfig' + register: + description: Confirmation text for the register with edits action + $ref: '#/components/schemas/TranslationConfig' + required: + - notify + - declare + - register + additionalProperties: false + required: + - label + - flags + - type + - dialogCopy + additionalProperties: false + ArchiveActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Conditionals which can disable or hide actions. + type: array + items: + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + type: + type: string + const: ARCHIVE + required: + - label + - flags + - type + additionalProperties: false + CustomActionConfig: + type: object + properties: + label: + description: Human readable description of the action + $ref: '#/components/schemas/TranslationConfig' + flags: + description: Flag actions which are executed when the action is performed. + default: [] + type: array + items: + type: object + properties: + id: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + operation: + description: Operation to perform on the flag. + type: string + enum: + - add + - remove + conditional: + description: + When conditional is met, the operation is performed on the flag. If + not provided, the operation is performed unconditionally. + $ref: '#/components/schemas/Conditional' + required: + - id + - operation + additionalProperties: false + supportingCopy: + description: Text displayed on the confirmation dialog + $ref: '#/components/schemas/TranslationConfig' + icon: + description: Icon representing the action + type: string + conditionals: + description: Conditionals which can disable or hide actions. + type: array + items: + oneOf: + - description: + If 'SHOW' conditional is defined, the component is shown to the + user only if the condition is met + type: object + properties: + type: + type: string + const: SHOW + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + - description: + If 'ENABLE' conditional is defined, the component is enabled only + if the condition is met + type: object + properties: + type: + type: string + const: ENABLE + conditional: + $ref: '#/components/schemas/Conditional' + required: + - type + - conditional + additionalProperties: false + type: object + type: + type: string + const: CUSTOM + customActionType: + description: Type identifier of the custom action. + type: string + form: + description: + Form configuration for the custom action. The form configured here + will be used on the custom action confirmation modal. + type: array + items: + $ref: '#/components/schemas/FieldConfig' + auditHistoryLabel: + description: + The label to show in audit history for this action. For example + "Approved". + $ref: '#/components/schemas/TranslationConfig' + required: + - label + - flags + - type + - customActionType + - form + - auditHistoryLabel + additionalProperties: false + EventDocument: + type: object + properties: + id: + description: Unique identifier of the event. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + type: + description: Type of the event (e.g. birth, death, marriage). + type: string + createdAt: + description: Timestamp indicating when the event was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + updatedAt: + description: Timestamp of the last update, excluding changes from actions. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + actions: + description: Ordered list of actions associated with the event. + type: array + items: + anyOf: + - $ref: '#/components/schemas/ActionDocument' + - type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The + document service constructs the full /bucket/path + internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + status: + type: string + const: Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + enum: + - NOTIFY + - DECLARE + - EDIT + - REGISTER + - REJECT + - ARCHIVE + - PRINT_CERTIFICATE + - REQUEST_CORRECTION + - APPROVE_CORRECTION + - REJECT_CORRECTION + - CUSTOM + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - status + - type + additionalProperties: false + trackingId: + description: System-generated tracking identifier used to look up the event. + type: string + required: + - id + - type + - createdAt + - updatedAt + - actions + - trackingId + additionalProperties: false + ActionDocument: + oneOf: + - $ref: '#/components/schemas/CreatedAction' + - $ref: '#/components/schemas/RejectAction' + - $ref: '#/components/schemas/DuplicateDetectedAction' + - $ref: '#/components/schemas/MarkNotDuplicateAction' + - $ref: '#/components/schemas/MarkAsDuplicateAction' + - $ref: '#/components/schemas/ArchiveAction' + - $ref: '#/components/schemas/NotifiedAction' + - $ref: '#/components/schemas/RegisterAction' + - $ref: '#/components/schemas/DeclareAction' + - $ref: '#/components/schemas/AssignedAction' + - $ref: '#/components/schemas/RequestedCorrectionAction' + - $ref: '#/components/schemas/ApprovedCorrectionAction' + - $ref: '#/components/schemas/RejectedCorrectionAction' + - $ref: '#/components/schemas/UnassignedAction' + - $ref: '#/components/schemas/PrintCertificateAction' + - $ref: '#/components/schemas/ReadAction' + - $ref: '#/components/schemas/EditAction' + - $ref: '#/components/schemas/CustomAction' + type: object + discriminator: + propertyName: type + mapping: + CREATE: '#/components/schemas/CreatedAction' + REJECT: '#/components/schemas/RejectAction' + DUPLICATE_DETECTED: '#/components/schemas/DuplicateDetectedAction' + MARK_AS_NOT_DUPLICATE: '#/components/schemas/MarkNotDuplicateAction' + MARK_AS_DUPLICATE: '#/components/schemas/MarkAsDuplicateAction' + ARCHIVE: '#/components/schemas/ArchiveAction' + NOTIFY: '#/components/schemas/NotifiedAction' + REGISTER: '#/components/schemas/RegisterAction' + DECLARE: '#/components/schemas/DeclareAction' + ASSIGN: '#/components/schemas/AssignedAction' + REQUEST_CORRECTION: '#/components/schemas/RequestedCorrectionAction' + APPROVE_CORRECTION: '#/components/schemas/ApprovedCorrectionAction' + REJECT_CORRECTION: '#/components/schemas/RejectedCorrectionAction' + UNASSIGN: '#/components/schemas/UnassignedAction' + PRINT_CERTIFICATE: '#/components/schemas/PrintCertificateAction' + READ: '#/components/schemas/ReadAction' + EDIT: '#/components/schemas/EditAction' + CUSTOM: '#/components/schemas/CustomAction' + CreatedAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: CREATE + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + RejectAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: REJECT + content: + type: object + properties: + reason: + description: Message describing the reason for rejecting or archiving the event. + type: string + minLength: 1 + required: + - reason + additionalProperties: false + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + - content + additionalProperties: false + DuplicateDetectedAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: DUPLICATE_DETECTED + content: + type: object + properties: + duplicates: + type: array + items: + type: object + properties: + id: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + trackingId: + type: string + required: + - id + - trackingId + additionalProperties: false + required: + - duplicates + additionalProperties: false + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + - content + additionalProperties: false + MarkNotDuplicateAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: MARK_AS_NOT_DUPLICATE + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + MarkAsDuplicateAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: MARK_AS_DUPLICATE + content: + type: object + properties: + duplicateOf: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: + - duplicateOf + additionalProperties: false + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + ArchiveAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: ARCHIVE + content: + type: object + properties: + reason: + description: Message describing the reason for rejecting or archiving the event. + type: string + minLength: 1 + required: + - reason + additionalProperties: false + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + - content + additionalProperties: false + NotifiedAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: NOTIFY + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + RegisterAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: REGISTER + registrationNumber: + description: + Registration number of the event. Always present for accepted + registrations. + type: string + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + DeclareAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: DECLARE + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + AssignedAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: ASSIGN + assignedTo: + description: Identifier of the user to whom the action is assigned. + type: string + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + - assignedTo + additionalProperties: false + RequestedCorrectionAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: REQUEST_CORRECTION + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + ApprovedCorrectionAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: APPROVE_CORRECTION + requestId: + type: string + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + - requestId + additionalProperties: false + RejectedCorrectionAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: REJECT_CORRECTION + requestId: + type: string + content: + type: object + properties: + reason: + description: Message describing the reason for rejecting or archiving the event. + type: string + minLength: 1 + required: + - reason + additionalProperties: false + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + - requestId + - content + additionalProperties: false + UnassignedAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: UNASSIGN + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + PrintCertificateAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: PRINT_CERTIFICATE + content: + anyOf: + - type: object + properties: + templateId: + type: string + additionalProperties: false + - type: 'null' + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + ReadAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: READ + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + additionalProperties: false + EditAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: EDIT + content: + type: object + properties: + comment: + description: Comment for the edit action. + type: string + additionalProperties: false + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + - content + additionalProperties: false + CustomAction: + type: object + properties: + id: + description: Unique identifier of the action. + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + transactionId: + description: Unique identifier of the transaction. + type: string + createdByUserType: + description: + Indicates whether the action was created by a human-user or by a + system-user. + type: string + enum: + - user + - system + createdAt: + description: Timestamp indicating when the action was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: Identifier of the user who created the action. + type: string + createdByRole: + description: Role of the user who created the action. + type: string + createdBySignature: + description: Reference to the signature of the user who created the action. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + createdAtLocation: + description: Reference to the location of the user who created the action. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + declaration: + description: + Declaration data defined by the ActionConfig. Supports partial + updates. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + annotation: + description: Action-specific metadata used to annotate the event. + anyOf: + - description: + Record of field-level changes made by an action. Supports partial + updates and nullable values. + type: object + propertyNames: + type: string + additionalProperties: + description: + Value that matches exactly one of the possible schema types + (TextValue, DateValue, DateRangeFieldValue). The best matching + schema is chosen by priority. + - type: 'null' + status: + description: Current status of the action. Actions may be validated + asynchronously by third-party integrations. + type: string + enum: + - Requested + - Accepted + - Rejected + originalActionId: + description: + Reference to the original action asynchronously accepted or + rejected by a third-party integration. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + type: + type: string + const: CUSTOM + customActionType: + type: string + required: + - id + - transactionId + - createdByUserType + - createdAt + - createdBy + - declaration + - status + - type + - customActionType + additionalProperties: false + EventIndex: + type: object + properties: + id: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + type: + description: The type of event, such as birth, death, or marriage. + type: string + status: + type: string + enum: + - CREATED + - NOTIFIED + - DECLARED + - REGISTERED + - ARCHIVED + legalStatuses: + description: + Metadata related to the legal registration of the event, such as + who registered it and when. + type: object + properties: + DECLARED: + anyOf: + - type: object + properties: + createdAt: + description: The timestamp when the action request was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: ID of the user who created the action request. + type: string + createdAtLocation: + description: Location of the user who created the action request. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + createdByUserType: + description: Whether the user is a normal user or a system. + anyOf: + - type: string + enum: + - user + - system + - type: 'null' + acceptedAt: + description: Timestamp when the action request was accepted. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdByRole: + description: Role of the user at the time of action request creation. + type: string + createdBySignature: + description: Signature of the user who created the action request. + anyOf: + - type: string + - type: 'null' + required: + - createdAt + - createdBy + - acceptedAt + additionalProperties: false + - type: 'null' + REGISTERED: + anyOf: + - type: object + properties: + createdAt: + description: The timestamp when the action request was created. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdBy: + description: ID of the user who created the action request. + type: string + createdAtLocation: + description: Location of the user who created the action request. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + createdByUserType: + description: Whether the user is a normal user or a system. + anyOf: + - type: string + enum: + - user + - system + - type: 'null' + acceptedAt: + description: Timestamp when the action request was accepted. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + createdByRole: + description: Role of the user at the time of action request creation. + type: string + createdBySignature: + description: Signature of the user who created the action request. + anyOf: + - type: string + - type: 'null' + registrationNumber: + description: + Registration number of the event. Always present for accepted + registrations. + type: string + required: + - createdAt + - createdBy + - acceptedAt + - registrationNumber + additionalProperties: false + - type: 'null' + additionalProperties: false + createdAt: + description: The timestamp when the event was first created and saved. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + dateOfEvent: + anyOf: + - type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: 'null' + placeOfEvent: + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + createdBy: + description: ID of the user who created the event. + type: string + createdByUserType: + description: Whether the user is a normal user or a system. + anyOf: + - type: string + enum: + - user + - system + - type: 'null' + updatedByUserRole: + description: Role of the user who last changed the status. + anyOf: + - type: string + - type: 'null' + createdAtLocation: + description: Location of the user who created the event. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + createdBySignature: + description: Signature of the user who created the event. + anyOf: + - description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The document + service constructs the full /bucket/path internally. + type: string + - type: 'null' + updatedAtLocation: + description: Location of the user who last changed the status. + anyOf: + - type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + - type: 'null' + updatedAt: + description: + Timestamp of the most recent *accepted* status change. Possibly 3rd + party update, if action is validation asynchronously. + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + assignedTo: + description: ID of the user currently assigned to the event. + anyOf: + - type: string + - type: 'null' + updatedBy: + description: ID of the user who last changed the status. + anyOf: + - type: string + - type: 'null' + trackingId: + description: + System-generated tracking ID used by informants or registrars to + look up the event. + type: string + potentialDuplicates: + description: + List of event IDs and their tracking IDs that this event could be a + duplicate of. + type: array + items: + type: object + properties: + id: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + trackingId: + type: string + required: + - id + - trackingId + additionalProperties: false + flags: + type: array + items: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + declaration: + description: + Aggregate representation of event data after all actions have been + applied, with all updates consolidated and null values removed. + type: object + propertyNames: + type: string + additionalProperties: + anyOf: + - anyOf: + - oneOf: + - type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: DOMESTIC + administrativeArea: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: + - country + - addressType + - administrativeArea + additionalProperties: false + - type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: INTERNATIONAL + required: + - country + - addressType + additionalProperties: false + type: object + - type: string + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: object + properties: + age: + type: number + asOfDateRef: + type: string + required: + - age + - asOfDateRef + additionalProperties: false + - type: string + pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$ + - description: + Date range with start and end dates in the format YYYY-MM-DD. + Inclusive start, exclusive end. + anyOf: + - type: object + properties: + start: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + end: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + required: + - start + - end + additionalProperties: false + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + enum: + - last7Days + - last30Days + - last90Days + - last365Days + - type: boolean + - type: number + - type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The + document service constructs the full /bucket/path + internally. + type: string + originalFilename: + type: string + type: + type: string + required: + - path + - originalFilename + - type + additionalProperties: false + - type: array + items: + type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or directory/document-id.jpg. The + document service constructs the full /bucket/path + internally. + type: string + originalFilename: + type: string + type: + type: string + option: + type: string + required: + - path + - originalFilename + - type + - option + additionalProperties: false + - type: object + properties: + firstname: + type: string + surname: + type: string + middlename: + type: string + required: + - firstname + - surname + additionalProperties: false + - anyOf: + - anyOf: + - type: object + properties: + firstname: + anyOf: + - type: string + - type: 'null' + surname: + anyOf: + - type: string + - type: 'null' + middlename: + anyOf: + - type: string + - type: 'null' + additionalProperties: false + - type: 'null' + - not: {} + - type: number + - type: object + properties: + loading: + type: boolean + error: + anyOf: + - type: object + properties: + statusCode: + type: number + message: + type: string + required: + - statusCode + - message + additionalProperties: false + - type: 'null' + data: {} + required: + - loading + - data + additionalProperties: false + - type: string + enum: + - verified + - authenticated + - failed + - pending + - anyOf: + - type: object + properties: + data: + type: object + propertyNames: + type: string + additionalProperties: + type: string + updatedAt: + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + required: + - data + - updatedAt + additionalProperties: false + - type: 'null' + - type: object + properties: + data: {} + required: + - data + additionalProperties: false + - type: object + properties: + data: {} + required: + - data + additionalProperties: false + - type: object + properties: + numericValue: + type: number + unit: + type: string + required: + - numericValue + - unit + additionalProperties: false + - type: object + properties: + numericValue: + type: number + unit: + type: string + additionalProperties: false + - {} + - anyOf: + - type: object + properties: + data: + type: object + propertyNames: + type: string + additionalProperties: + anyOf: + - oneOf: + - type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: DOMESTIC + administrativeArea: + type: string + format: uuid + pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ + required: + - country + - addressType + - administrativeArea + additionalProperties: false + - type: object + properties: + country: + type: string + streetLevelDetails: + type: object + propertyNames: + type: string + additionalProperties: + type: string + addressType: + type: string + const: INTERNATIONAL + required: + - country + - addressType + additionalProperties: false + type: object + - type: string + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: object + properties: + age: + type: number + asOfDateRef: + type: string + required: + - age + - asOfDateRef + additionalProperties: false + - type: string + pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$ + - description: + Date range with start and end dates in the format YYYY-MM-DD. + Inclusive start, exclusive end. + anyOf: + - type: object + properties: + start: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + end: + description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + required: + - start + - end + additionalProperties: false + - description: Date in the format YYYY-MM-DD + type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + enum: + - last7Days + - last30Days + - last90Days + - last365Days + - type: boolean + - type: number + - type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or + directory/document-id.jpg. The document + service constructs the full /bucket/path + internally. + type: string + originalFilename: + type: string + type: + type: string + required: + - path + - originalFilename + - type + additionalProperties: false + - type: array + items: + type: object + properties: + path: + description: + A relative path within the S3 bucket, never starting with /. e.g. + document-id.jpg or + directory/document-id.jpg. The document + service constructs the full /bucket/path + internally. + type: string + originalFilename: + type: string + type: + type: string + option: + type: string + required: + - path + - originalFilename + - type + - option + additionalProperties: false + - type: object + properties: + firstname: + type: string + surname: + type: string + middlename: + type: string + required: + - firstname + - surname + additionalProperties: false + - anyOf: + - anyOf: + - type: object + properties: + firstname: + anyOf: + - type: string + - type: 'null' + surname: + anyOf: + - type: string + - type: 'null' + middlename: + anyOf: + - type: string + - type: 'null' + additionalProperties: false + - type: 'null' + - not: {} + - type: number + - type: object + properties: + loading: + type: boolean + error: + anyOf: + - type: object + properties: + statusCode: + type: number + message: + type: string + required: + - statusCode + - message + additionalProperties: false + - type: 'null' + data: {} + required: + - loading + - data + additionalProperties: false + - type: string + enum: + - verified + - authenticated + - failed + - pending + - anyOf: + - type: object + properties: + data: + type: object + propertyNames: + type: string + additionalProperties: + type: string + updatedAt: + type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + required: + - data + - updatedAt + additionalProperties: false + - type: 'null' + - type: object + properties: + data: {} + required: + - data + additionalProperties: false + - type: object + properties: + data: {} + required: + - data + additionalProperties: false + - type: object + properties: + numericValue: + type: number + unit: + type: string + required: + - numericValue + - unit + additionalProperties: false + - type: object + properties: + numericValue: + type: number + unit: + type: string + additionalProperties: false + - {} + required: + - data + additionalProperties: false + - type: 'null' + required: + - id + - type + - status + - legalStatuses + - createdAt + - createdBy + - updatedAt + - trackingId + - potentialDuplicates + - flags + - declaration + additionalProperties: false + QueryTypeOutput: + type: object + properties: + type: + default: and + anyOf: + - type: string + const: and + - type: string + const: or + clauses: + default: + - eventType: tennis-club-membership + status: + type: anyOf + terms: + - CREATED + - NOTIFIED + - DECLARED + - REGISTERED + - ARCHIVED + updatedAt: + type: range + gte: 2025-05-22 + lte: 2025-05-29 + data: {} + minItems: 1 + type: array + items: + anyOf: + - $ref: '#/components/schemas/QueryExpressionOutput' + - $ref: '#/components/schemas/QueryTypeOutput' + required: + - type + - clauses + additionalProperties: false + QueryExpressionOutput: + type: object + properties: + id: + type: string + eventType: + type: string + status: + anyOf: + - $ref: '#/components/schemas/AnyOfStatusOutput' + - $ref: '#/components/schemas/ExactStatusOutput' + createdAt: + $ref: '#/components/schemas/DateConditionOutput' + updatedAt: + $ref: '#/components/schemas/DateConditionOutput' + legalStatuses.DECLARED.createdAtLocation: + anyOf: + - $ref: '#/components/schemas/WithinOutput' + - type: 'null' + legalStatuses.DECLARED.createdByRole: + $ref: '#/components/schemas/AnyOfOutput' + legalStatuses.REGISTERED.acceptedAt: + $ref: '#/components/schemas/DateConditionOutput' + legalStatuses.REGISTERED.createdAtLocation: + anyOf: + - $ref: '#/components/schemas/WithinOutput' + - type: 'null' + legalStatuses.REGISTERED.createdByRole: + $ref: '#/components/schemas/AnyOfOutput' + legalStatuses.REGISTERED.registrationNumber: + $ref: '#/components/schemas/ExactOutput' + createdAtLocation: + $ref: '#/components/schemas/WithinOutput' + updatedAtLocation: + $ref: '#/components/schemas/WithinOutput' + assignedTo: + $ref: '#/components/schemas/ExactOutput' + createdByUserType: + $ref: '#/components/schemas/ExactUserTypeOutput' + updatedByUserRole: + $ref: '#/components/schemas/ExactOutput' + createdBy: + $ref: '#/components/schemas/ExactOutput' + updatedBy: + $ref: '#/components/schemas/ExactOutput' + trackingId: + $ref: '#/components/schemas/ExactOutput' + flags: + $ref: '#/components/schemas/ContainsFlagsOutput' + data: + $ref: '#/components/schemas/QueryInputOutput' + additionalProperties: false + AnyOfStatusOutput: + type: object + properties: + type: + type: string + const: anyOf + terms: + type: array + items: + type: string + enum: + - CREATED + - NOTIFIED + - DECLARED + - REGISTERED + - ARCHIVED + required: + - type + - terms + additionalProperties: false + ExactStatusOutput: + type: object + properties: + type: + type: string + const: exact + term: + type: string + enum: + - CREATED + - NOTIFIED + - DECLARED + - REGISTERED + - ARCHIVED + required: + - type + - term + additionalProperties: false + DateConditionOutput: + anyOf: + - $ref: '#/components/schemas/ExactDateOutput' + - $ref: '#/components/schemas/RangeDateOutput' + - $ref: '#/components/schemas/TimePeriodOutput' + ExactDateOutput: + type: object + properties: + type: + type: string + const: exact + term: + anyOf: + - type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + required: + - type + - term + additionalProperties: false + RangeDateOutput: + type: object + properties: + type: + type: string + const: range + gte: + anyOf: + - type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + lte: + anyOf: + - type: string + format: date + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ + - type: string + format: date-time + pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ + required: + - type + - gte + - lte + additionalProperties: false + TimePeriodOutput: + type: object + properties: + type: + type: string + const: timePeriod + term: + type: string + enum: + - last7Days + - last30Days + - last90Days + - last365Days + required: + - type + - term + additionalProperties: false + WithinOutput: + type: object + properties: + type: + type: string + const: within + location: + type: string + required: + - type + - location + additionalProperties: false + AnyOfOutput: + type: object + properties: + type: + type: string + const: anyOf + terms: + type: array + items: + type: string + required: + - type + - terms + additionalProperties: false + ExactOutput: + type: object + properties: + type: + type: string + const: exact + term: + type: string + required: + - type + - term + additionalProperties: false + ExactUserTypeOutput: + type: object + properties: + type: + type: string + const: exact + term: + type: string + enum: + - user + - system + required: + - type + - term + additionalProperties: false + ContainsFlagsOutput: + type: object + properties: + anyOf: + type: array + items: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + noneOf: + type: array + items: + anyOf: + - anyOf: + - type: string + pattern: ^(delete|create|notify|declare|register|edit|duplicate_detected|reject|mark_as_duplicate|mark_as_not_duplicate|archive|print_certificate|request_correction|reject_correction|approve_correction|read|assign|unassign|custom):(requested|accepted|rejected)$ + - type: string + enum: + - incomplete + - rejected + - correction-requested + - potential-duplicate + - edit-in-progress + - description: Custom flag identifier defined by the country config. + type: string + additionalProperties: false + QueryInputOutput: + anyOf: + - oneOf: + - $ref: '#/components/schemas/FuzzyOutput' + - $ref: '#/components/schemas/ExactOutput' + - $ref: '#/components/schemas/RangeOutput' + - $ref: '#/components/schemas/WithinOutput' + - $ref: '#/components/schemas/AnyOfOutput' + type: object + discriminator: + propertyName: type + mapping: + fuzzy: '#/components/schemas/FuzzyOutput' + exact: '#/components/schemas/ExactOutput' + range: '#/components/schemas/RangeOutput' + within: '#/components/schemas/WithinOutput' + anyOf: '#/components/schemas/AnyOfOutput' + - type: object + propertyNames: + type: string + additionalProperties: + $ref: '#/components/schemas/QueryInputOutput' + FuzzyOutput: + type: object + properties: + type: + type: string + const: fuzzy + term: + type: string + required: + - type + - term + additionalProperties: false + RangeOutput: + type: object + properties: + type: + type: string + const: range + gte: + type: string + lte: + type: string + required: + - type + - gte + - lte + additionalProperties: false + securitySchemes: + Authorization: + type: http + scheme: bearer diff --git a/package.json b/package.json index 0c07c00..4366a07 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,24 @@ "license": "MPL-2.0", "private": false, "scripts": { - "generate-data": "tsx generate-data.ts" + "generate-data": "tsx generate-data.ts", + "build": "node build.mjs", + "test:smoke": "yarn build smoke && k6 run dist/smoke.js", + "test:smoke:cloud": "yarn build smoke && export $(grep -v '^#' .env | xargs) && k6 run --out cloud dist/smoke.js", + "test:load": "yarn build load && k6 run dist/load.js", + "test:load:cloud": "yarn build load && export $(grep -v '^#' .env | xargs) && MAX_VUS=${MAX_VUS:-100} k6 run --out cloud dist/load.js", + "test:soak": "yarn build soak && k6 run dist/soak.js", + "test:soak:cloud": "yarn build soak && export $(grep -v '^#' .env | xargs) && k6 run --out cloud dist/soak.js", + "test:spike": "yarn build spike && k6 run dist/spike.js", + "test:spike:cloud": "yarn build spike && export $(grep -v '^#' .env | xargs) && k6 run --out cloud dist/spike.js" }, "dependencies": { "@faker-js/faker": "^10.4.0", "pg": "^8.20.0", "tsx": "^4.21.0" + }, + "devDependencies": { + "@types/k6": "^0.57.0", + "esbuild": "^0.24.0" } } diff --git a/src/auth.ts b/src/auth.ts new file mode 100644 index 0000000..3dfaab8 --- /dev/null +++ b/src/auth.ts @@ -0,0 +1,53 @@ +import http from 'k6/http'; +import { b64decode } from 'k6/encoding'; + +export interface Session { + token: string; + userId: string; + expiresAt: number; // Unix seconds +} + +/** + * Authenticates a user against the OpenCRVS gateway. + * + * Two-step flow: + * 1. POST /auth/authenticate → { nonce } + * 2. POST /auth/verifyCode → { token } + * + * In dev, 2FA is disabled so the code '000000' is always accepted. + * The userId is decoded from the `sub` claim of the returned JWT. + */ +export function authenticate(gatewayUrl: string, username: string, password: string): Session { + const authRes = http.post( + `${gatewayUrl}/auth/authenticate`, + JSON.stringify({ username, password }), + { headers: { 'Content-Type': 'application/json' }, tags: { name: 'auth.authenticate' } } + ); + + if (authRes.status !== 200) { + throw new Error(`auth.authenticate failed: ${authRes.status} ${authRes.body}`); + } + + const { nonce } = authRes.json() as { nonce: string }; + + const verifyRes = http.post( + `${gatewayUrl}/auth/verifyCode`, + JSON.stringify({ code: '000000', nonce }), + { headers: { 'Content-Type': 'application/json' }, tags: { name: 'auth.verifyCode' } } + ); + + if (verifyRes.status !== 200) { + throw new Error(`auth.verifyCode failed: ${verifyRes.status} ${verifyRes.body}`); + } + + const { token } = verifyRes.json() as { token: string }; + const { sub: userId, exp: expiresAt } = decodeJwtPayload(token); + + return { token, userId, expiresAt }; +} + +function decodeJwtPayload(token: string): { sub: string; exp: number } { + const payload = token.split('.')[1]; + const json = b64decode(payload, 'rawurl', 's') as string; + return JSON.parse(json) as { sub: string; exp: number }; +} diff --git a/src/client.ts b/src/client.ts new file mode 100644 index 0000000..c2a40cf --- /dev/null +++ b/src/client.ts @@ -0,0 +1,213 @@ +import http from 'k6/http' +import { check } from 'k6' +import { randomBytes } from 'k6/crypto' +import { config } from './config' +import type { TennisClubDeclaration } from './data' + +function uuidv4(): string { + const b = new Uint8Array(randomBytes(16)) + b[6] = (b[6] & 0x0f) | 0x40 + b[8] = (b[8] & 0x3f) | 0x80 + const h = Array.from(b).map((x) => x.toString(16).padStart(2, '0')).join('') + return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}` +} + +// ─── tRPC helpers ───────────────────────────────────────────────────────────── + +function headers(token: string) { + return { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + } +} + +/** + * tRPC mutation (POST). + * Wire format: POST {eventsUrl}/{procedure}?batch=1 + * Body: {"0": {"json": }} + * Response: [{"result": {"data": {"json": }}}] + */ +function call(token: string, procedure: string, input: object) { + const res = http.post( + `${config.eventsUrl}/${procedure}?batch=1`, + JSON.stringify({ '0': { json: input } }), + { headers: headers(token), tags: { name: procedure } } + ) + const ok = check(res, { [`${procedure}: status 200`]: (r) => r.status === 200 }) + if (!ok) { + console.error(`${procedure} ${res.status}: ${String(res.body).substring(0, 300)}`) + } + return res +} + +/** + * tRPC query (GET). + * Wire format: GET {eventsUrl}/{procedure}?batch=1&input= + */ +function query(token: string, procedure: string, input: object | string) { + const encoded = encodeURIComponent(JSON.stringify({ '0': { json: input } })) + const res = http.get( + `${config.eventsUrl}/${procedure}?batch=1&input=${encoded}`, + { headers: headers(token), tags: { name: procedure } } + ) + const ok = check(res, { [`${procedure}: status 200`]: (r) => r.status === 200 }) + if (!ok) { + console.error(`${procedure} ${res.status}: ${String(res.body).substring(0, 300)}`) + } + return res +} + +/** Extracts the result payload from a tRPC batch+SuperJSON response. Returns null on non-JSON or unexpected shape. */ +function unwrap(res: ReturnType): T | null { + try { + const batch = res.json() as Array<{ result: { data: { json: T } } }> + return batch[0]?.result?.data?.json ?? null + } catch { + return null + } +} + +// ─── Event CRUD ─────────────────────────────────────────────────────────────── + +export interface EventRef { + id: string + trackingId: string +} + +export function createEvent(token: string): EventRef | null { + const res = call(token, 'event.create', { + transactionId: uuidv4(), + type: 'tennis-club-membership' + }) + return unwrap(res) +} + +export function getEvent(token: string, eventId: string): unknown { + const res = query(token, 'event.get', { eventId }) + return unwrap(res) +} + +export function findUser(token: string, userId: string): unknown { + const res = query(token, 'user.get', userId) + return unwrap(res) +} + +// ─── Search operations ──────────────────────────────────────────────────────── + +export interface SearchResult { + results: Array<{ id: string; trackingId: string }> + total: number +} + +const EVENT_TYPE = 'tennis-club-membership' + +function search(token: string, clause: object): SearchResult | null { + const res = call(token, 'event.search', { + query: { type: 'and', clauses: [{ eventType: EVENT_TYPE, ...clause }] }, + limit: 10, + offset: 0 + }) + return unwrap(res) +} + +export function searchByTrackingId( + token: string, + trackingId: string +): SearchResult | null { + return search(token, { trackingId: { type: 'exact', term: trackingId } }) +} + +/** BRN = registration number assigned at the REGISTERED step. */ +export function searchByBRN(token: string, brn: string): SearchResult | null { + return search(token, { + 'legalStatuses.REGISTERED.registrationNumber': { type: 'exact', term: brn } + }) +} + +/** Fuzzy match on applicant first/surname (tennis-club proxy for name search). */ +export function searchByName(token: string, name: string): SearchResult | null { + return search(token, { + data: { 'applicant.name': { type: 'fuzzy', term: name } } + }) +} + +/** Exact match on recommender.id (tennis-club proxy for NID). */ +export function searchByNID(token: string, nid: string): SearchResult | null { + return search(token, { + data: { 'recommender.id': { type: 'exact', term: nid } } + }) +} + +/** Exact DoB + fuzzy name (tennis-club proxy for DoB-and-name search). */ +export function searchByDoBAndName( + token: string, + dob: string, + name: string +): SearchResult | null { + return search(token, { + data: { + 'applicant.dob': { type: 'exact', term: dob }, + 'applicant.name': { type: 'fuzzy', term: name } + } + }) +} + +export type EventStatus = + | 'CREATED' + | 'NOTIFIED' + | 'DECLARED' + | 'REGISTERED' + | 'ARCHIVED' + +export function searchByStatus( + token: string, + status: EventStatus +): SearchResult | null { + return search(token, { status: { type: 'exact', term: status } }) +} + +/** flag — e.g. 'rejected', 'incomplete', 'correction-requested', 'potential-duplicate'. */ +export function searchByFlag(token: string, flag: string): SearchResult | null { + return search(token, { flags: { anyOf: [flag] } }) +} + +// ─── Actions ────────────────────────────────────────────────────────────────── + +export function declareEvent( + token: string, + eventId: string, + declaration: TennisClubDeclaration +): void { + call(token, 'event.actions.declare.request', { + eventId, + transactionId: uuidv4(), + declaration + }) +} + +export function assignEvent( + token: string, + eventId: string, + assignedTo: string +): void { + call(token, 'event.actions.assignment.assign', { + type: 'ASSIGN', + eventId, + transactionId: uuidv4(), + assignedTo, + declaration: {} + }) +} + +export function registerEvent( + token: string, + eventId: string, + declaration: TennisClubDeclaration +): void { + call(token, 'event.actions.register.request', { + type: 'REGISTER', + eventId, + transactionId: uuidv4(), + declaration + }) +} diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..3c1bd83 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,19 @@ +/** + * Runtime configuration resolved from k6 environment variables. + * + * Local dev (defaults): + * k6 run dist/smoke.js + * + * Override any value: + * EVENTS_URL=http://... GATEWAY_URL=http://... k6 run dist/smoke.js + */ +export const config = { + /** Base URL for the events tRPC API, e.g. http://localhost:3000/api/events */ + eventsUrl: __ENV.EVENTS_URL ?? 'http://localhost:5555', + + /** Gateway base URL used for auth endpoints (/auth/authenticate, /auth/verifyCode). */ + gatewayUrl: __ENV.GATEWAY_URL ?? 'http://localhost:7070', + + username: __ENV.CRVS_USERNAME ?? 'r.flnrtzbz', + password: __ENV.CRVS_PASSWORD ?? 'test' +} diff --git a/src/data.ts b/src/data.ts new file mode 100644 index 0000000..b9919cc --- /dev/null +++ b/src/data.ts @@ -0,0 +1,162 @@ +/** + * Generates randomised tennis-club-membership declaration payloads. + * Field names mirror those used in generate-data.ts (derived from the country config). + * + * No external libraries — uses only Math.random() so it works inside k6. + */ + +// ─── Name pools ─────────────────────────────────────────────────────────────── + +const FIRST_NAMES = [ + 'James', + 'Mary', + 'John', + 'Patricia', + 'Robert', + 'Jennifer', + 'Michael', + 'Linda', + 'William', + 'Barbara', + 'David', + 'Susan', + 'Richard', + 'Jessica', + 'Joseph', + 'Sarah', + 'Thomas', + 'Karen', + 'Charles', + 'Lisa', + 'Chanda', + 'Mweene', + 'Bwalya', + 'Mutale', + 'Naledi', + 'Thandiwe', + 'Sipho', + 'Nomsa', + 'Thabo', + 'Zanele' +] + +const LAST_NAMES = [ + 'Smith', + 'Johnson', + 'Williams', + 'Brown', + 'Jones', + 'Garcia', + 'Miller', + 'Davis', + 'Mwansa', + 'Phiri', + 'Banda', + 'Tembo', + 'Mulenga', + 'Chanda', + 'Kabwe', + 'Musonda', + 'Mutale', + 'Zulu', + 'Dlamini', + 'Khumalo' +] + +const ROLES = [ + 'Registrar', + 'Coach', + 'Club President', + 'Secretary', + 'Treasurer' +] as const +const DEVICES = ['Mobile phone', 'Tablet', 'Desktop computer'] as const +const HONORIFICS = ['Mr.', 'Mrs.', 'Ms.', 'Dr.'] as const +const DURATION_UNITS = ['Hours', 'Days', 'Minutes'] as const + +// ─── Helpers ────────────────────────────────────────────────────────────────── + +function pick(arr: readonly T[]): T { + return arr[Math.floor(Math.random() * arr.length)] +} + +function randInt(min: number, max: number): number { + return Math.floor(Math.random() * (max - min + 1)) + min +} + +/** Returns a date string (YYYY-MM-DD) for an age between min and max years. */ +function randomDOB(minAge = 5, maxAge = 90): string { + const now = new Date() + const year = now.getFullYear() - randInt(minAge, maxAge) + const month = String(randInt(1, 12)).padStart(2, '0') + const day = String(randInt(1, 28)).padStart(2, '0') + return `${year}-${month}-${day}` +} + +function randomTime(): string { + return `${String(randInt(0, 23)).padStart(2, '0')}:${String(randInt(0, 59)).padStart(2, '0')}` +} + +function randomId(): string { + return String(randInt(1_000_000_000, 9_999_999_999)) +} + +// ─── Types ──────────────────────────────────────────────────────────────────── + +export interface TennisClubDeclaration { + 'applicant.name': { firstname: string; middlename: string; surname: string } + 'applicant.dob': string + 'applicant.tob': string + 'applicant.registrationDuration': { unit: string; numericValue: number } + // senior-pass page is shown when applicant is 60+ years old + 'senior-pass.id'?: string + 'recommender.name': { firstname: string; middlename: string; surname: string } + 'recommender.id': string + 'recommender.none': false + 'recommender.role': string + 'recommender.device': string + 'recommender.fullHonorificName': string + 'recommender2.id': string +} + +// ─── Generator ──────────────────────────────────────────────────────────────── + +export function generateDeclaration(): TennisClubDeclaration { + const firstName = pick(FIRST_NAMES) + const surname = pick(LAST_NAMES) + + const recFirst = pick(FIRST_NAMES) + const recSurname = pick(LAST_NAMES) + const recRole = pick(ROLES) + + const dob = randomDOB(5, 90) + + // Mirror the server's conditional: senior-pass section is shown when DOB is + // more than (365 * 60 + 15) days in the past. + const seniorThreshold = new Date() + seniorThreshold.setDate(seniorThreshold.getDate() - (365 * 60 + 15)) + const seniorPass: Pick = + new Date(dob) < seniorThreshold ? { 'senior-pass.id': randomId() } : {} + + return { + 'applicant.name': { firstname: firstName, middlename: '', surname }, + 'applicant.dob': dob, + 'applicant.tob': randomTime(), + 'applicant.registrationDuration': { + unit: pick(DURATION_UNITS), + numericValue: randInt(1, 72) + }, + 'recommender.name': { + firstname: recFirst, + middlename: '', + surname: recSurname + }, + ...seniorPass, + 'recommender.id': randomId(), + 'recommender.none': false, + 'recommender.role': recRole, + 'recommender.device': pick(DEVICES), + 'recommender.fullHonorificName': `${pick(HONORIFICS)} ${recFirst} ${recSurname}`, + 'recommender2.id': randomId() + } +} diff --git a/src/k6-summary.d.ts b/src/k6-summary.d.ts new file mode 100644 index 0000000..f3565ba --- /dev/null +++ b/src/k6-summary.d.ts @@ -0,0 +1,6 @@ +declare module 'https://jslib.k6.io/k6-summary/0.0.2/index.js' { + export function textSummary( + data: unknown, + opts?: { indent?: string; enableColors?: boolean } + ): string; +} diff --git a/src/session.ts b/src/session.ts new file mode 100644 index 0000000..08994d2 --- /dev/null +++ b/src/session.ts @@ -0,0 +1,20 @@ +import { sleep } from 'k6' +import { authenticate, type Session } from './auth' +import { config } from './config' + +// Module-level var is scoped per-VU in k6 — each VU gets its own session. +let session: Session + +export function getSession(): Session { + const nowSec = Date.now() / 1000 + const needsAuth = !session || session.expiresAt - nowSec < 60 + + if (needsAuth) { + // Spread initial auth bursts across 2 s to avoid a thundering herd at + // stage transitions when many VUs start simultaneously. + if (!session) sleep(Math.random() * 2) + session = authenticate(config.gatewayUrl, config.username, config.password) + } + + return session +} diff --git a/src/thresholds.ts b/src/thresholds.ts new file mode 100644 index 0000000..8247249 --- /dev/null +++ b/src/thresholds.ts @@ -0,0 +1,50 @@ +/** + * Threshold definitions derived from the README baseline policy. + * + * k6 threshold keys use the format: http_req_duration{name:""} + * which matches the `tags: { name }` set on each HTTP call in client.ts. + */ + +// ─── Per-operation SLOs (from README) ───────────────────────────────────────── + +/** Read operations: search, lookup, auth */ +const READ_SLO = { p50: 150, p95: 450, p99: 900 } + +/** Write operations: declare, register */ +const WRITE_SLO = { p50: 300, p95: 900, p99: 1500 } + +/** Find user by ID — tighter SLO per README baseline */ +const USER_LOOKUP_SLO = { p50: 50, p95: 150, p99: 300 } + +function slo(op: typeof READ_SLO) { + return [`p(50)<${op.p50}`, `p(95)<${op.p95}`, `p(99)<${op.p99}`] +} + +// ─── Production thresholds ──────────────────────────────────────────────────── + +export const productionThresholds = { + // Auth + 'http_req_duration{name:"auth.authenticate"}': slo(READ_SLO), + 'http_req_duration{name:"auth.verifyCode"}': slo(READ_SLO), + + // Reads — all search variants share the event.search procedure tag + 'http_req_duration{name:"event.search"}': slo(READ_SLO), + 'http_req_duration{name:"event.get"}': slo(READ_SLO), + 'http_req_duration{name:"user.get"}': slo(USER_LOOKUP_SLO), + + // Writes + 'http_req_duration{name:"event.create"}': slo(WRITE_SLO), + 'http_req_duration{name:"event.actions.declare.request"}': slo(WRITE_SLO), + 'http_req_duration{name:"event.actions.assignment.assign"}': slo(WRITE_SLO), + 'http_req_duration{name:"event.actions.register.request"}': slo(WRITE_SLO), + + // Overall error rate + http_req_failed: ['rate<0.001'] // < 0.1% +} + +// ─── Smoke thresholds (relaxed — validates connectivity, not perf) ───────────── + +export const smokeThresholds = { + http_req_duration: ['p(95)<5000'], + http_req_failed: ['rate<0.01'] +} diff --git a/tests/load.ts b/tests/load.ts new file mode 100644 index 0000000..0b62cf6 --- /dev/null +++ b/tests/load.ts @@ -0,0 +1,170 @@ +/** + * Load test — staged ramp-up to find the system's breaking point. + * + * VU workflow (per iteration): + * create event → declare → quick search → assign to self → register + * + * 20% of VUs simulate high-latency clients (200–500 ms RTT per workflow step). + * + * Termination: + * - Normal: all stages complete. + * - Early: overall p95 latency exceeds 2 s. delayAbortEval: '30s' means the + * test won't abort until the threshold has been continuously failing for + * 30 s, so brief spikes during stage transitions do not trigger early exit. + * + * Run locally: + * yarn test:load + */ + +import { check, sleep } from 'k6' +import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js' +import type { Options } from 'k6/options' +import { getSession } from '../src/session' +import { + assignEvent, + createEvent, + declareEvent, + findUser, + registerEvent, + searchByTrackingId +} from '../src/client' +import { generateDeclaration } from '../src/data' +import { productionThresholds } from '../src/thresholds' + +// ─── Ramp stages ────────────────────────────────────────────────────────────── + +/** + * MAX_VUS=100 yarn test:load:cloud # local cloud run + * yarn test:load # local run, uncapped + */ +const MAX_VUS = parseInt(__ENV.MAX_VUS ?? '300', 10) + +/** + * Total VU targets per stage. Normal and high-latency scenarios are derived + * from these by splitting 80% / 20% respectively. Each target is capped at + * MAX_VUS so the ramp still makes sense at lower ceilings. + */ +const TOTAL_STAGES = [ + { duration: '2m', target: 5 }, + { duration: '5m', target: 10 }, + { duration: '3m', target: 15 }, + { duration: '5m', target: 20 }, + { duration: '3m', target: 25 }, + { duration: '5m', target: 30 }, + { duration: '5m', target: 35 }, + { duration: '5m', target: 40 }, + { duration: '5m', target: 45 }, + { duration: '10m', target: 50 } +] + +function split(fraction: number) { + return TOTAL_STAGES.map((s) => ({ + duration: s.duration, + target: Math.min( + Math.round(s.target * fraction), + Math.round(MAX_VUS * fraction) + ) + })) +} + +// ─── Options ────────────────────────────────────────────────────────────────── + +export const options: Options = { + scenarios: { + /** 80% of VUs — standard network conditions. */ + normal: { + executor: 'ramping-vus', + stages: split(0.8), + exec: 'normalVU', + startVUs: 0 + }, + /** 20% of VUs — 200–500 ms artificial RTT delay per workflow step. */ + highLatency: { + executor: 'ramping-vus', + stages: split(0.2), + exec: 'highLatencyVU', + startVUs: 0 + }, + /** 10% of VUs — standalone user lookups to measure read-path SLO. */ + userLookup: { + executor: 'ramping-vus', + stages: split(0.1), + exec: 'userLookupVU', + startVUs: 0 + } + }, + + thresholds: { + ...productionThresholds, + // Abort early if the overall p95 sustains above 2 s for 30 s. + // k6 re-evaluates the threshold after delayAbortEval; abort fires only if + // it is still failing at that point, making this a sustained-violation check. + http_req_duration: [ + { threshold: 'p(95)<2000', abortOnFail: true, delayAbortEval: '30s' } + ] + } +} + +// ─── Workflow ───────────────────────────────────────────────────────────────── + +function runWorkflow(highLatency: boolean): void { + const { token, userId } = getSession() + + // High-latency VUs pause between steps to simulate a slow-network client. + // The delay is randomised per step (200–500 ms) to avoid lock-step patterns. + const networkDelay = () => { + if (highLatency) sleep(Math.random() * 0.3 + 0.2) + } + + // Step 1: Create event + const event = createEvent(token) + check(event, { 'event created: has id': (e) => Boolean(e?.id) }) + if (!event?.id) return + networkDelay() + + // Step 2: Declare + const declaration = generateDeclaration() + declareEvent(token, event.id, declaration) + networkDelay() + + // Wait for Elasticsearch to refresh before searching. + sleep(1.5) + + // Step 3: Quick search by tracking ID + const result = searchByTrackingId(token, event.trackingId) + check(result, { 'search: event found': (r) => (r?.total ?? 0) > 0 }) + networkDelay() + + // Step 4: Assign to self + assignEvent(token, event.id, userId) + networkDelay() + + // Step 5: Register + registerEvent(token, event.id, declaration) + + // Think time between iterations — simulates a registrar moving to the next case. + sleep(1) +} + +// ─── Exec functions ─────────────────────────────────────────────────────────── + +export function normalVU(): void { + runWorkflow(false) +} + +export function highLatencyVU(): void { + runWorkflow(true) +} + +export function userLookupVU(): void { + const { token, userId } = getSession() + findUser(token, userId) + sleep(1) +} + +export function handleSummary(data: unknown) { + return { + stdout: textSummary(data, { indent: ' ', enableColors: false }), + 'summary.json': JSON.stringify(data) + } +} diff --git a/tests/smoke.ts b/tests/smoke.ts new file mode 100644 index 0000000..6cd61de --- /dev/null +++ b/tests/smoke.ts @@ -0,0 +1,77 @@ +/** + * Smoke test — validates the full VU workflow end-to-end. + * + * Intentionally small: 1 VU, 5 iterations, relaxed thresholds. + * Purpose: catch broken endpoints before running a full load test. + * + * Run locally: + * yarn test:smoke + */ + +import { check, sleep } from 'k6' +import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js' +import type { Options } from 'k6/options' +import { getSession } from '../src/session' +import { + assignEvent, + createEvent, + declareEvent, + findUser, + registerEvent, + searchByTrackingId +} from '../src/client' +import { generateDeclaration } from '../src/data' +import { smokeThresholds } from '../src/thresholds' + +export const options: Options = { + vus: 1, + iterations: 5, + thresholds: smokeThresholds +} + +export default function () { + const { token, userId } = getSession() + + // ── Step 1: Create event ────────────────────────────────────────────────── + const event = createEvent(token) + + check(event, { + 'event created: has id': (e) => Boolean(e?.id), + 'event created: has trackingId': (e) => Boolean(e?.trackingId) + }) + + if (!event?.id) { + console.error('createEvent returned no id — skipping iteration') + return + } + + // ── Step 2: Declare ─────────────────────────────────────────────────────── + const declaration = generateDeclaration() + declareEvent(token, event.id, declaration) + + // ── Step 3: Search for the event ────────────────────────────────────────── + sleep(1.5) + const searchResult = searchByTrackingId(token, event.trackingId) + + check(searchResult, { + 'search: event found': (r) => (r?.total ?? 0) > 0 + }) + + // ── Step 4: Assign to self ──────────────────────────────────────────────── + assignEvent(token, event.id, userId) + + // ── Step 5: Register ────────────────────────────────────────────────────── + registerEvent(token, event.id, declaration) + + // ── Step 6: Find user ───────────────────────────────────────────────────── + findUser(token, userId) + + sleep(1) +} + +export function handleSummary(data: unknown) { + return { + stdout: textSummary(data, { indent: ' ', enableColors: false }), + 'summary.json': JSON.stringify(data) + } +} diff --git a/tests/soak.ts b/tests/soak.ts new file mode 100644 index 0000000..904a5ce --- /dev/null +++ b/tests/soak.ts @@ -0,0 +1,138 @@ +/** + * Soak test — validates system stability under sustained production-equivalent + * load over a long-running session. + * + * VU workflow (per iteration): + * create event → declare → quick search → assign to self → register + * + * Load profile: + * 50 constant VUs (40 normal + 10 high-latency) for 5 hours. The duration + * fits inside the 6-hour GitHub-hosted runner job ceiling with headroom for + * build, setup, and summary. + * Think time is randomised to 115–175 s per iteration so each VU completes + * one full workflow in 2–3 minutes, sustaining ~20 events/minute — matching + * the 1.5× production target (~21/min) from the README. + * + * Pass criteria: + * - All production response time thresholds hold for the full duration. + * - Error rate stays below 0.1%. + * - Memory consumption must plateau; a sustained upward trend fails the run + * (checked via infrastructure health monitoring — Section 2 of the test plan). + * + * Run locally: + * yarn test:soak + */ + +import { check, sleep } from 'k6' +import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js' +import type { Options } from 'k6/options' +import { getSession } from '../src/session' +import { + assignEvent, + createEvent, + declareEvent, + findUser, + registerEvent, + searchByTrackingId +} from '../src/client' +import { generateDeclaration } from '../src/data' +import { productionThresholds } from '../src/thresholds' + +// ─── VU counts ──────────────────────────────────────────────────────────────── + +/** + * Total concurrent VUs. Midpoint of the 40–60 range in the README. + * Override via SOAK_VUS env var when running closer to the boundary. + */ +const TOTAL_VUS = parseInt(__ENV.SOAK_VUS ?? '50', 10) +const NORMAL_VUS = Math.round(TOTAL_VUS * 0.8) +const HIGH_LATENCY_VUS = Math.round(TOTAL_VUS * 0.2) +const USER_LOOKUP_VUS = Math.max(1, Math.round(TOTAL_VUS * 0.1)) + +// ─── Options ────────────────────────────────────────────────────────────────── + +export const options: Options = { + scenarios: { + /** 80% of VUs — standard network conditions. */ + normal: { + executor: 'constant-vus', + vus: NORMAL_VUS, + duration: '5h', + exec: 'normalVU' + }, + /** 20% of VUs — 200–500 ms artificial RTT delay per workflow step. */ + highLatency: { + executor: 'constant-vus', + vus: HIGH_LATENCY_VUS, + duration: '5h', + exec: 'highLatencyVU' + }, + /** 10% of VUs — standalone user lookups to measure read-path SLO. */ + userLookup: { + executor: 'constant-vus', + vus: USER_LOOKUP_VUS, + duration: '5h', + exec: 'userLookupVU' + } + }, + + thresholds: { + ...productionThresholds + } +} + +// ─── Workflow ───────────────────────────────────────────────────────────────── + +function runWorkflow(highLatency: boolean): void { + const { token, userId } = getSession() + + const networkDelay = () => { + if (highLatency) sleep(Math.random() * 0.3 + 0.2) + } + + const event = createEvent(token) + check(event, { 'event created: has id': (e) => Boolean(e?.id) }) + if (!event?.id) return + networkDelay() + + const declaration = generateDeclaration() + declareEvent(token, event.id, declaration) + networkDelay() + sleep(1.5) + + const result = searchByTrackingId(token, event.trackingId) + check(result, { 'search: event found': (r) => (r?.total ?? 0) > 0 }) + networkDelay() + + assignEvent(token, event.id, userId) + networkDelay() + + registerEvent(token, event.id, declaration) + + // Think time: randomised 115–175 s so total iteration ≈ 2–3 min. + // At 50 VUs × 1 iter per ~2.5 min → ~20 events/min ≈ the 21/min target. + sleep(Math.random() * 60 + 115) +} + +// ─── Exec functions ─────────────────────────────────────────────────────────── + +export function normalVU(): void { + runWorkflow(false) +} + +export function highLatencyVU(): void { + runWorkflow(true) +} + +export function userLookupVU(): void { + const { token, userId } = getSession() + findUser(token, userId) + sleep(1) +} + +export function handleSummary(data: unknown) { + return { + stdout: textSummary(data, { indent: ' ', enableColors: false }), + 'summary.json': JSON.stringify(data) + } +} diff --git a/tests/spike.ts b/tests/spike.ts new file mode 100644 index 0000000..7243c0f --- /dev/null +++ b/tests/spike.ts @@ -0,0 +1,150 @@ +/** + * Spike test — validates system behaviour under sudden load spikes and confirms + * it recovers within 60 s of returning to baseline. + * + * VU workflow (per iteration): + * create event → declare → quick search → assign to self → register + * + * 20% of VUs simulate high-latency clients (200–500 ms RTT per step). + * + * Profile (three 10-minute phases, 60 s transitions): + * warm-up (10 m at BASELINE_VUS) + * → 60 s ramp to 5× spike + * → spike hold (10 m at 5× BASELINE_VUS) + * → 60 s ramp back to baseline ← recovery window + * → recovery hold (10 m at BASELINE_VUS) + * + * Recovery assertion: production thresholds are evaluated over the full run. + * The 60-second ramp-down is the recovery window — if latency has not returned + * to within-SLO by the time VUs reach baseline, the 10-minute recovery hold + * will sustain threshold violations and fail the run. + * + * Run locally: + * yarn test:spike + */ + +import { check, sleep } from 'k6' +import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js' +import type { Options } from 'k6/options' +import { getSession } from '../src/session' +import { + assignEvent, + createEvent, + declareEvent, + findUser, + registerEvent, + searchByTrackingId +} from '../src/client' +import { generateDeclaration } from '../src/data' +import { productionThresholds } from '../src/thresholds' + +// ─── VU counts ──────────────────────────────────────────────────────────────── + +/** + * Baseline VU count. Override via BASELINE_VUS env var. + * Spike is always 5× this value; normal/high-latency split is 80/20. + */ +const BASELINE_VUS = parseInt(__ENV.BASELINE_VUS ?? '20', 10) +const SPIKE_VUS = BASELINE_VUS * 5 + +function split(total: number, fraction: number): number { + return Math.max(1, Math.round(total * fraction)) +} + +function stages(fraction: number) { + const baseline = split(BASELINE_VUS, fraction) + const spike = split(SPIKE_VUS, fraction) + return [ + { duration: '10m', target: baseline }, // warm-up + { duration: '60s', target: spike }, // ramp to spike + { duration: '10m', target: spike }, // hold spike + { duration: '60s', target: baseline }, // ramp down — recovery window + { duration: '10m', target: baseline } // recovery hold + ] +} + +// ─── Options ────────────────────────────────────────────────────────────────── + +export const options: Options = { + scenarios: { + /** 80% of VUs — standard network conditions. */ + normal: { + executor: 'ramping-vus', + stages: stages(0.8), + exec: 'normalVU', + startVUs: 0 + }, + /** 20% of VUs — 200–500 ms artificial RTT delay per workflow step. */ + highLatency: { + executor: 'ramping-vus', + stages: stages(0.2), + exec: 'highLatencyVU', + startVUs: 0 + }, + /** 10% of VUs — standalone user lookups to measure read-path SLO. */ + userLookup: { + executor: 'ramping-vus', + stages: stages(0.1), + exec: 'userLookupVU', + startVUs: 0 + } + }, + + thresholds: { + ...productionThresholds + } +} + +// ─── Workflow ───────────────────────────────────────────────────────────────── + +function runWorkflow(highLatency: boolean): void { + const { token, userId } = getSession() + + const networkDelay = () => { + if (highLatency) sleep(Math.random() * 0.3 + 0.2) + } + + const event = createEvent(token) + check(event, { 'event created: has id': (e) => Boolean(e?.id) }) + if (!event?.id) return + networkDelay() + + const declaration = generateDeclaration() + declareEvent(token, event.id, declaration) + networkDelay() + sleep(1.5) + + const result = searchByTrackingId(token, event.trackingId) + check(result, { 'search: event found': (r) => (r?.total ?? 0) > 0 }) + networkDelay() + + assignEvent(token, event.id, userId) + networkDelay() + + registerEvent(token, event.id, declaration) + + sleep(1) +} + +// ─── Exec functions ─────────────────────────────────────────────────────────── + +export function normalVU(): void { + runWorkflow(false) +} + +export function highLatencyVU(): void { + runWorkflow(true) +} + +export function userLookupVU(): void { + const { token, userId } = getSession() + findUser(token, userId) + sleep(1) +} + +export function handleSummary(data: unknown) { + return { + stdout: textSummary(data, { indent: ' ', enableColors: false }), + 'summary.json': JSON.stringify(data) + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..59f6134 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["ES2020", "dom"], + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "skipLibCheck": true + }, + "exclude": ["node_modules", "dist"] +} diff --git a/yarn.lock b/yarn.lock index fb5b993..a5c0cef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,106 +2,211 @@ # yarn lockfile v1 +"@esbuild/aix-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" + integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== + "@esbuild/aix-ppc64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.5.tgz#7c475b8e49e204073674622236c17fb1e306f811" integrity sha512-nGsF/4C7uzUj+Nj/4J+Zt0bYQ6bz33Phz8Lb2N80Mti1HjGclTJdXZ+9APC4kLvONbjxN1zfvYNd8FEcbBK/MQ== +"@esbuild/android-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" + integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== + "@esbuild/android-arm64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.5.tgz#5990c14d862b9a6bf1cdcbebed3177e9099b9397" integrity sha512-Oeghq+XFgh1pUGd1YKs4DDoxzxkoUkvko+T/IVKwlghKLvvjbGFB3ek8VEDBmNvqhwuL0CQS3cExdzpmUyIrgA== +"@esbuild/android-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" + integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== + "@esbuild/android-arm@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.5.tgz#ffb55f499199e1ef8a51cdb3529b11dc98f0ec4f" integrity sha512-Cv781jd0Rfj/paoNrul1/r4G0HLvuFKYh7C9uHZ2Pl8YXstzvCyyeWENTFR9qFnRzNMCjXmsulZuvosDg10Mog== +"@esbuild/android-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" + integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== + "@esbuild/android-x64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.5.tgz#06a04b993ac94265080810a4e48a226ce2ab7d27" integrity sha512-nQD7lspbzerlmtNOxYMFAGmhxgzn8Z7m9jgFkh6kpkjsAhZee1w8tJW3ZlW+N9iRePz0oPUDrYrXidCPSImD0Q== +"@esbuild/darwin-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" + integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== + "@esbuild/darwin-arm64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.5.tgz#f836cb70cf24ba5dd66b78b6483081869331bc68" integrity sha512-I+Ya/MgC6rr8oRWGRDF3BXDfP8K1BVUggHqN6VI2lUZLdDi1IM1v2cy0e3lCPbP+pVcK3Tv8cgUhHse1kaNZZw== +"@esbuild/darwin-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" + integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== + "@esbuild/darwin-x64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.5.tgz#78c9206a2038a7bec313ec83ed5aa3537e33e2ec" integrity sha512-MCjQUtC8wWJn/pIPM7vQaO69BFgwPD1jriEdqwTCKzWjGgkMbcg+M5HzrOhPhuYe1AJjXlHmD142KQf+jnYj8A== +"@esbuild/freebsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" + integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== + "@esbuild/freebsd-arm64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.5.tgz#08c864ff806653b39d71b92bf640e39a4e7d7067" integrity sha512-X6xVS+goSH0UelYXnuf4GHLwpOdc8rgK/zai+dKzBMnncw7BTQIwquOodE7EKvY2UVUetSqyAfyZC1D+oqLQtg== +"@esbuild/freebsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" + integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== + "@esbuild/freebsd-x64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.5.tgz#156f929fced6e3b081f568372f49232a1798b2f3" integrity sha512-233X1FGo3a8x1ekLB6XT69LfZ83vqz+9z3TSEQCTYfMNY880A97nr81KbPcAMl9rmOFp11wO0dP+eB18KU/Ucg== +"@esbuild/linux-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" + integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== + "@esbuild/linux-arm64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.5.tgz#c6e1af7d133e85bdcdc22f6a59317ea153ae2d2d" integrity sha512-euKkilsNOv7x/M1NKsx5znyprbpsRFIzTV6lWziqJch7yWYayfLtZzDxDTl+LSQDJYAjd9TVb/Kt5UKIrj2e4A== +"@esbuild/linux-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" + integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== + "@esbuild/linux-arm@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.5.tgz#041f3fa0bf6b7c404f74a1552572c396a026034c" integrity sha512-0wkVrYHG4sdCCN/bcwQ7yYMXACkaHc3UFeaEOwSVW6e5RycMageYAFv+JS2bKLwHyeKVUvtoVH+5/RHq0fgeFw== +"@esbuild/linux-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" + integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== + "@esbuild/linux-ia32@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.5.tgz#cfc4387efcae994a4375f9b305bb4253cb07b75a" integrity sha512-hVRQX4+P3MS36NxOy24v/Cdsimy/5HYePw+tmPqnNN1fxV0bPrFWR6TMqwXPwoTM2VzbkA+4lbHWUKDd5ZDA/w== +"@esbuild/linux-loong64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" + integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== + "@esbuild/linux-loong64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.5.tgz#5a80cdfa6c08f0744a8e53521e2eb92a74549198" integrity sha512-mKqqRuOPALI8nDzhOBmIS0INvZOOFGGg5n1osGIXAx8oersceEbKd4t1ACNTHM3sJBXGFAlEgqM+svzjPot+ZQ== +"@esbuild/linux-mips64el@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" + integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== + "@esbuild/linux-mips64el@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.5.tgz#8200e0267ced2cb122508d9cfbdfa72222ebe775" integrity sha512-EE/QXH9IyaAj1qeuIV5+/GZkBTipgGO782Ff7Um3vPS9cvLhJJeATy4Ggxikz2inZ46KByamMn6GqtqyVjhenA== +"@esbuild/linux-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" + integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== + "@esbuild/linux-ppc64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.5.tgz#9c735ad8e8b4469d0021902d8cbcc2066f466a48" integrity sha512-0V2iF1RGxBf1b7/BjurA5jfkl7PtySjom1r6xOK2q9KWw/XCpAdtB6KNMO+9xx69yYfSCRR9FE0TyKfHA2eQMw== +"@esbuild/linux-riscv64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" + integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== + "@esbuild/linux-riscv64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.5.tgz#3e744abf3bf2f001b73f1517489b34bab5ca8b66" integrity sha512-rYxThBx6G9HN6tFNuvB/vykeLi4VDsm5hE5pVwzqbAjZEARQrWu3noZSfbEnPZ/CRXP3271GyFk/49up2W190g== +"@esbuild/linux-s390x@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" + integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== + "@esbuild/linux-s390x@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.5.tgz#9ff4a1d32bdf374b7d8a1380c1346f9907b24962" integrity sha512-uEP2q/4qgd8goEUc4QIdU/1P2NmEtZ/zX5u3OpLlCGhJIuBIv0s0wr7TB2nBrd3/A5XIdEkkS5ZLF0ULuvaaYQ== +"@esbuild/linux-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== + "@esbuild/linux-x64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.5.tgz#846eb1210dc7258aa02c910197ba0bad9cbebe58" integrity sha512-+Gq47Wqq6PLOOZuBzVSII2//9yyHNKZLuwfzCemqexqOQCSz0zy0O26kIzyp9EMNMK+nZ0tFHBZrCeVUuMs/ew== +"@esbuild/netbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" + integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== + "@esbuild/netbsd-arm64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.5.tgz#690540b9ab565334b549a3cee2672d813673417c" integrity sha512-3F/5EG8VHfN/I+W5cO1/SV2H9Q/5r7vcHabMnBqhHK2lTWOh3F8vixNzo8lqxrlmBtZVFpW8pmITHnq54+Tq4g== +"@esbuild/netbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" + integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== + "@esbuild/netbsd-x64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.5.tgz#53ff0e982f5b9b57d6bac1a076194b27892e8cd7" integrity sha512-28t+Sj3CPN8vkMOlZotOmDgilQwVvxWZl7b8rxpn73Tt/gCnvrHxQUMng4uu3itdFvrtba/1nHejvxqz8xgEMA== +"@esbuild/openbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" + integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== + "@esbuild/openbsd-arm64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.5.tgz#7ad41b55a2eed133bdb25ab54b28d63f98e4c726" integrity sha512-Doz/hKtiuVAi9hMsBMpwBANhIZc8l238U2Onko3t2xUp8xtM0ZKdDYHMnm/qPFVthY8KtxkXaocwmMh6VolzMA== +"@esbuild/openbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" + integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== + "@esbuild/openbsd-x64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.5.tgz#c9dda2cef61204a13285483d47f8ffdc7a1b9d16" @@ -112,21 +217,41 @@ resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.5.tgz#e0c8f0f7eb341f4b9409c6a8306e194147ae8031" integrity sha512-Xh+VRuh6OMh3uJ0JkCjI57l+DVe7VRGBYymen8rFPnTVgATBwA6nmToxM2OwTlSvrnWpPKkrQUj93+K9huYC6A== +"@esbuild/sunos-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" + integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== + "@esbuild/sunos-x64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.5.tgz#11e3ab829393325b882d375a5450a9277c41d9c0" integrity sha512-aC1gpJkkaUADHuAdQfuVTnqVUTLqqUNhAvEwHwVWcnVVZvNlDPGA0UveZsfXJJ9T6k9Po4eHi3c02gbdwO3g6w== +"@esbuild/win32-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" + integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== + "@esbuild/win32-arm64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.5.tgz#157f2913645a977f2660f57bd5921a2caff3c76b" integrity sha512-0UNx2aavV0fk6UpZcwXFLztA2r/k9jTUa7OW7SAea1VYUhkug99MW1uZeXEnPn5+cHOd0n8myQay6TlFnBR07w== +"@esbuild/win32-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" + integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== + "@esbuild/win32-ia32@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.5.tgz#48b8531a35a4e56b7cc6c6d20f9ab2cd79c62517" integrity sha512-5nlJ3AeJWCTSzR7AEqVjT/faWyqKU86kCi1lLmxVqmNR+j4HrYdns+eTGjS/vmrzCIe8inGQckUadvS0+JkKdQ== +"@esbuild/win32-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" + integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== + "@esbuild/win32-x64@0.27.5": version "0.27.5" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.5.tgz#b980910727a767ea3290207b695cc31dd50bb6a4" @@ -137,6 +262,42 @@ resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-10.4.0.tgz#2dc84d1bc32a2eef3c4658985ca7692a0c5c51b3" integrity sha512-sDBWI3yLy8EcDzgobvJTWq1MJYzAkQdpjXuPukga9wXonhpMRvd1Izuo2Qgwey2OiEoRIBr35RMU9HJRoOHzpw== +"@types/k6@^0.57.0": + version "0.57.1" + resolved "https://registry.yarnpkg.com/@types/k6/-/k6-0.57.1.tgz#d32221f94e4e27198c2bdb327c7428d581ae18ce" + integrity sha512-S/p2RQAYUBXyYROkR2fgeON/LaxJ0YR+KIlnPQW/TOeLBXD7tX4RfDSWaIecuDTWKblmc6UwANyP0e5QDZPhMw== + +esbuild@^0.24.0: + version "0.24.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" + integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.24.2" + "@esbuild/android-arm" "0.24.2" + "@esbuild/android-arm64" "0.24.2" + "@esbuild/android-x64" "0.24.2" + "@esbuild/darwin-arm64" "0.24.2" + "@esbuild/darwin-x64" "0.24.2" + "@esbuild/freebsd-arm64" "0.24.2" + "@esbuild/freebsd-x64" "0.24.2" + "@esbuild/linux-arm" "0.24.2" + "@esbuild/linux-arm64" "0.24.2" + "@esbuild/linux-ia32" "0.24.2" + "@esbuild/linux-loong64" "0.24.2" + "@esbuild/linux-mips64el" "0.24.2" + "@esbuild/linux-ppc64" "0.24.2" + "@esbuild/linux-riscv64" "0.24.2" + "@esbuild/linux-s390x" "0.24.2" + "@esbuild/linux-x64" "0.24.2" + "@esbuild/netbsd-arm64" "0.24.2" + "@esbuild/netbsd-x64" "0.24.2" + "@esbuild/openbsd-arm64" "0.24.2" + "@esbuild/openbsd-x64" "0.24.2" + "@esbuild/sunos-x64" "0.24.2" + "@esbuild/win32-arm64" "0.24.2" + "@esbuild/win32-ia32" "0.24.2" + "@esbuild/win32-x64" "0.24.2" + esbuild@~0.27.0: version "0.27.5" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.5.tgz#600866adc6810e936950e2849d419e270241aac9"