Skip to content

Klamm Data Model

Spencer Rose edited this page Jun 14, 2025 · 13 revisions

Revised Data Model (Version 1)

erDiagram
    %% Main entities with vertical layout
    Forms ||--o{ FormVersions : "has many"
    %% FormVersions relationships
    FormVersions ||--o{ FormElements : "has many"
    FormVersions ||--o{ FormStylesheets : applied_to
    FormVersions ||--o{ FormScripts : "has many"
    FormStylesheets ||--o{ FormVersions : applied_to
    FormScripts ||--o{ FormVersions : applied_to
    FormVersions ||--o{ FormDeployments : "has many"
    %% FormElement (using labels to indicate inheritance)
    FormElements ||--|o FormFieldDataBindings : "has one"
    FormElements ||--|o FormElements : "has one parent"
    %% Models for FormElements Types
    TextInputFormElements ||--o{ FormElements : "has one"
    CheckboxInputFormElements ||--o{ FormElements : "has one"
    SelectInputFormElements ||--o{ FormElements : "has one"
    RadioInputFormElements ||--o{ FormElements : "has one"
    TextareaInputFormElements ||--o{ FormElements : "has one"
    NumberInputFormElements ||--o{ FormElements : "has one"
    DateSelectInputFormElements ||--o{ FormElements : "has one"
    ButtonInputFormElements ||--o{ FormElements : "has one"
    ContainerFormElements ||--o{ FormElements : "has one"
    HTMLFormElements ||--o{ FormElements : "has one"
    %% Sub-FormElements
    SelectInputFormElements ||--o{ SelectOptionFormElements : "has many"
    %% Form Field Validators
    TextInputFormElements ||--o{ FormFieldValidators : "has many"
    CheckboxInputFormElements ||--o{ FormFieldValidators : "has many"
    NumberInputFormElements ||--o{ FormFieldValidators : "has many"
    TextareaInputFormElements ||--o{ FormFieldValidators : "has many"
    SelectInputFormElements ||--o{ FormFieldValidators : "has many"
    RadioInputFormElements ||--o{ FormFieldValidators : "has many"
    DateSelectInputFormElements ||--o{ FormFieldValidators : "has many"
    
    %% Entity definitions
    Forms {
        int id PK
        int forms_id
        int parent_form_elements_id FK
        string form_title
        int ministry_id FK
        string description
        string notes
        int data_bindings_id FK
        int form_frequencies_id FK
        int form_reaches_id FK
        string print_reason
        string retention_needs
        boolean icm_non_interactive
        string workbench_footer_fragment_path
        string dcv_material_number
        string orbeon_functions
        boolean icm_generated
    }
    FormVersions {
        int id PK
        int form_id FK
        string uuid 
        int version_number
        string status "draft|approved|final"
        int form_developer_id FK
    }
    FormDeployments {
        int id PK
        int form_version_id FK
        string environment "test|dev|prod"
        datetime deployed_at
    }
    FormFieldDataBindings {
        int id PK
	string name
	string description
        string data_sources_id FK
        string data_binding_path
        string data_binding_type
    }
    FormStylesheets {
        int id PK
        int form_version_id FK
        string filepath 
        string name
        string type "web|pdf"
        string description
    }
    FormScripts { 
        int id PK
        int form_version_id FK
        string filepath 
        string name
        string type "web|pdf"
        string description
    }
    FormFieldValidators { 
        int id PK  
        string name
        string regex
        string description
    }
    FormElements {
        int id PK
        uuid token
        string name
        int form_versions_id FK
        int parent_id FK "nullable"
        string help_text
        string description
        boolean is_repeatable
        string repeater_item_label
        boolean is_resetable
        boolean visible_web
        boolean visible_pdf
        boolean is_template
    }
    TextInputFormElements {
        int id PK
        int form_elements_id FK
        string placeholder_text
        string label
        boolean visible_label
        string mask
        int maxlength
        int minlength
    }
    CheckboxInputFormElements {
        int id PK
        int form_elements_id FK
        string label
        boolean visible_label
    }
    SelectInputFormElements {
        int id PK
        int form_elements_id FK
        string label
        boolean visible_label
    }
    SelectOptionFormElements {
        int id PK
        int form_element_select_inputs_id FK
        string label
        int order
        string description
    }
    RadioInputFormElements {
        int id PK
        int form_elements_id FK
        string label
        boolean visible_label
        string[] options
        string default_value
    }

    TextareaInputFormElements {
        int id PK
        int form_elements_id FK
        string name
        string placeholder_text
        string label
        boolean visible_label
        int rows
        int cols
        int maxlength
        int minlength
    }

    NumberInputFormElements {
        int id PK
        int form_elements_id FK
        string placeholder_text
        string label
        boolean visible_label
        int min
        int max
        int step
        int default_value
    }
    DateSelectInputFormElements {
        int id PK
        int form_elements_id FK
        string placeholder_text
        string label
        boolean visible_label
        string repeater_item_label
        date min_date
        date max_date
        date default_date
        string date_format
        boolean include_time
    }
    ButtonInputFormElements {
        int id PK
        int form_elements_id FK
        string label
        string button_type "submit|reset|button"
    }
    ContainerFormElements {
        int id PK
        int form_elements_id FK
        string container_type "page|fieldset|section"
        boolean collapsible
        boolean collapsed_by_default
    }

    HTMLFormElements {
        int id PK
        int form_elements_id FK
        string name
        string html_content "raw HTML to embed"
        string repeater_item_label
    }
    

Loading

Clone this wiki locally