42 lines
1.8 KiB
Markdown
42 lines
1.8 KiB
Markdown
# GovOPlaN Forms
|
|
|
|
<!-- govoplan-repository-type:start -->
|
|
**Repository type:** module (domain).
|
|
<!-- govoplan-repository-type:end -->
|
|
|
|
`govoplan-forms` owns reusable, immutable form definitions, validation rules,
|
|
and form package fragments. Submission runtime behavior remains in
|
|
`govoplan-forms-runtime`.
|
|
|
|
The module persists exact tenant-bound revisions, exposes bounded catalogue,
|
|
history, and write APIs, and provides `forms.definitions` for consumers. A
|
|
published revision can be used by Forms Runtime without importing Forms tables;
|
|
existing submissions keep their exact revision when a new schema is published.
|
|
|
|
The `/forms` designer uses shared application controls to create, revise,
|
|
publish, retire, search, and inspect definitions. It edits field order, types,
|
|
choices, validation constraints, draft behavior, attachment and signature
|
|
requirements, policy references, and permitted handoff kinds. Saving always
|
|
creates an exact immutable revision; it never mutates a published schema in
|
|
place.
|
|
|
|
The designer also supports multi-page/section layout, bounded conditional
|
|
visibility expressions, localized labels/help/options/page titles, fallback
|
|
locale, and accessibility metadata. Server validation rejects unknown fields,
|
|
incompatible operators, placement errors, and condition cycles. Verified
|
|
configuration-package fragments can be assessed and imported as a new local
|
|
draft with source provenance rather than silently becoming active.
|
|
|
|
Definition writes use optimistic concurrency. Replaying the same object and
|
|
revision is safe only when the payload is identical. Published definitions may
|
|
be retired but not silently returned to draft.
|
|
|
|
Focused verification:
|
|
|
|
```bash
|
|
PYTHONPATH=src:/mnt/DATA/git/govoplan-core/src \
|
|
/mnt/DATA/git/govoplan/.venv/bin/python -m unittest discover -s tests
|
|
```
|
|
|
|
See [docs/FORMS_BOUNDARY.md](docs/FORMS_BOUNDARY.md) for the boundary decision.
|