Skip to main content

Overview

This example demonstrates a comprehensive data definition for extracting data from structured forms such as applications, surveys, registrations, and questionnaires. It handles diverse field types, conditional logic, and workflow tracking.

Use Cases

  • Application Processing: Job applications, loan applications, enrollment forms
  • Survey Analysis: Customer satisfaction, feedback forms, research questionnaires
  • Registration Systems: Event registration, membership signup, account creation
  • Compliance Forms: Consent forms, declarations, regulatory submissions
  • Assessment Forms: Evaluations, inspections, audits

Complete Data Definition Structure

YAML Configuration

slug: form-data
name: Form Data Extraction
description: Extract structured data from forms, applications, and surveys
taxonomyType: CONTENT
enabled: true

taxons:
  # ==========================================
  # Form Metadata
  # ==========================================
  - name: form_metadata
    label: Form Metadata
    group: true
    children:
      - name: form_type
        label: Form Type
        taxonType: SELECTION
        valuePath: VALUE_OR_ALL_CONTENT
        semanticDefinition: |
          The type of form. Look for headers, titles, or form numbers that indicate
          the purpose (e.g., "Employment Application", "Customer Feedback Survey").
        selectionOptions:
          - label: "Job Application"
          - label: "Loan Application"
          - label: "Enrollment Form"
          - label: "Registration Form"
          - label: "Survey"
          - label: "Feedback Form"
          - label: "Consent Form"
          - label: "Questionnaire"
          - label: "Inspection Form"
          - label: "Evaluation Form"
          - label: "Other"

      - name: form_number
        label: Form Number/ID
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: |
          The unique identifier for this form submission (e.g., "APP-2024-001234",
          "Form #5678"). May be in header or footer.

      - name: form_version
        label: Form Version
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: |
          The version of the form template (e.g., "v2.1", "Rev 3", "03/2024").

      - name: submission_date
        label: Submission Date
        taxonType: DATE
        valuePath: VALUE_OR_ALL_CONTENT
        semanticDefinition: |
          The date the form was submitted or received. Look for "Date Submitted",
          "Received Date", or date stamps.

      - name: filename
        label: Source Filename
        taxonType: STRING
        valuePath: METADATA
        metadataValue: FILENAME

      - name: processing_date
        label: Processing Date
        taxonType: DATE_TIME
        valuePath: METADATA
        metadataValue: PROCESSING_DATE

  # ==========================================
  # Applicant/Respondent Information
  # ==========================================
  - name: respondent
    label: Respondent Information
    group: true
    description: Information about the person completing the form
    children:
      - name: personal_info
        label: Personal Information
        group: true
        children:
          - name: full_name
            label: Full Name
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            semanticDefinition: |
              The full legal name of the person completing the form.
              May be split into first name, middle name, last name fields.

          - name: first_name
            label: First Name
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "First name if separated from full name"

          - name: middle_name
            label: Middle Name/Initial
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "Middle name or initial if present"

          - name: last_name
            label: Last Name
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "Last name/surname if separated"

          - name: date_of_birth
            label: Date of Birth
            taxonType: DATE
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "Applicant's date of birth if requested on form"

          - name: age
            label: Age
            taxonType: NUMBER
            valuePath: FORMULA
            nullable: true
            semanticDefinition: "YEAR_DIFF(TODAY(), date_of_birth)"
            description: "Calculated age from date of birth"

          - name: gender
            label: Gender
            taxonType: SELECTION
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            selectionOptions:
              - label: "Male"
              - label: "Female"
              - label: "Non-binary"
              - label: "Prefer not to say"
              - label: "Other"

          - name: ssn_or_id
            label: SSN/ID Number
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: |
              Social Security Number, National ID, or other government ID number
              if requested on form. Handle as sensitive data.

      - name: contact_info
        label: Contact Information
        group: true
        children:
          - name: email
            label: Email Address
            taxonType: EMAIL_ADDRESS
            valuePath: VALUE_OR_ALL_CONTENT
            semanticDefinition: |
              Primary email address. Look for fields labeled "Email", "E-mail",
              or "Email Address".

          - name: phone_primary
            label: Primary Phone
            taxonType: PHONE_NUMBER
            valuePath: VALUE_OR_ALL_CONTENT
            semanticDefinition: |
              Primary phone number. May be labeled "Phone", "Mobile", "Cell Phone",
              or "Primary Contact Number".

          - name: phone_alternate
            label: Alternate Phone
            taxonType: PHONE_NUMBER
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "Alternate or secondary phone number if provided"

          - name: address
            label: Mailing Address
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: |
              Complete mailing address. May be combined or split across
              multiple fields (street, city, state, zip).

          - name: street_address
            label: Street Address
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "Street address line 1"

          - name: address_line_2
            label: Address Line 2
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "Apartment, suite, or unit number"

          - name: city
            label: City
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true

          - name: state_province
            label: State/Province
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true

          - name: postal_code
            label: Postal Code
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "ZIP code, postal code, or postcode"

          - name: country
            label: Country
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true

      - name: emergency_contact
        label: Emergency Contact
        group: true
        nullable: true
        children:
          - name: name
            label: Contact Name
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "Emergency contact person's name"

          - name: relationship
            label: Relationship
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true
            semanticDefinition: "Relationship to applicant (e.g., Spouse, Parent, Friend)"

          - name: phone
            label: Contact Phone
            taxonType: PHONE_NUMBER
            valuePath: VALUE_OR_ALL_CONTENT
            nullable: true

  # ==========================================
  # Form Questions/Fields
  # ==========================================
  - name: form_responses
    label: Form Responses
    group: true
    description: Answers to form questions
    children:
      # Text Questions
      - name: text_responses
        label: Text Responses
        group: true
        nullable: true
        children:
          - name: question_label
            label: Question
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true
            semanticDefinition: |
              The text of each question that expects a free-text response.
              Extract the question label exactly as it appears.

          - name: answer
            label: Answer
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true
            semanticDefinition: |
              The applicant's written response to each text question.

      # Multiple Choice Questions
      - name: multiple_choice
        label: Multiple Choice Responses
        group: true
        nullable: true
        children:
          - name: question_label
            label: Question
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true
            semanticDefinition: "Multiple choice question text"

          - name: selected_option
            label: Selected Option
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true
            semanticDefinition: |
              The option selected by the applicant. Look for checkmarks,
              highlighted options, or marked choices.

      # Yes/No Questions
      - name: yes_no_questions
        label: Yes/No Questions
        group: true
        nullable: true
        children:
          - name: question_label
            label: Question
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true

          - name: answer
            label: Answer
            taxonType: BOOLEAN
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true
            semanticDefinition: |
              Extract true for Yes/checked/agree, false for No/unchecked/disagree.

      # Numeric Responses
      - name: numeric_responses
        label: Numeric Responses
        group: true
        nullable: true
        children:
          - name: question_label
            label: Question
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true

          - name: value
            label: Numeric Value
            taxonType: NUMBER
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true
            semanticDefinition: "Extract numeric values (counts, ratings, quantities)"

      # Rating Scale Questions
      - name: rating_responses
        label: Rating Scale Responses
        group: true
        nullable: true
        children:
          - name: question_label
            label: Question
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true

          - name: rating_value
            label: Rating
            taxonType: NUMBER
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true
            semanticDefinition: |
              Extract the numeric rating (e.g., 1-5, 1-10). Look for selected
              stars, circled numbers, or marked scale positions.

          - name: scale_range
            label: Scale Range
            taxonType: STRING
            valuePath: VALUE_OR_ALL_CONTENT
            multiValue: true
            nullable: true
            semanticDefinition: |
              The range of the rating scale (e.g., "1-5", "1-10", "Poor to Excellent")

  # ==========================================
  # Specific Use Case Fields
  # ==========================================

  # For Employment Applications
  - name: employment_info
    label: Employment Information
    group: true
    nullable: true
    description: For job/employment application forms
    children:
      - name: position_applied
        label: Position Applied For
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Job title or position the applicant is applying for"

      - name: desired_salary
        label: Desired Salary
        taxonType: CURRENCY
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Expected or desired salary/compensation"

      - name: available_start_date
        label: Available Start Date
        taxonType: DATE
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Earliest date the applicant can start"

      - name: employment_type
        label: Employment Type Sought
        taxonType: SELECTION
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        selectionOptions:
          - label: "Full-time"
          - label: "Part-time"
          - label: "Contract"
          - label: "Internship"
          - label: "Temporary"

      - name: resume_attached
        label: Resume Attached
        taxonType: BOOLEAN
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Is a resume/CV attached or referenced?"

      - name: references_provided
        label: References Provided
        taxonType: BOOLEAN
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Did the applicant provide professional references?"

  # For Loan/Financial Applications
  - name: financial_info
    label: Financial Information
    group: true
    nullable: true
    description: For loan/credit application forms
    children:
      - name: loan_amount_requested
        label: Loan Amount Requested
        taxonType: CURRENCY
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "The amount of money being requested"

      - name: loan_purpose
        label: Loan Purpose
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Purpose of the loan (e.g., Home purchase, Auto, Education)"

      - name: annual_income
        label: Annual Income
        taxonType: CURRENCY
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Applicant's annual gross income"

      - name: employment_status
        label: Employment Status
        taxonType: SELECTION
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        selectionOptions:
          - label: "Employed Full-time"
          - label: "Employed Part-time"
          - label: "Self-employed"
          - label: "Unemployed"
          - label: "Retired"
          - label: "Student"

      - name: employer_name
        label: Employer Name
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true

      - name: years_employed
        label: Years with Current Employer
        taxonType: NUMBER
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true

  # For Event/Program Registration
  - name: registration_info
    label: Registration Information
    group: true
    nullable: true
    description: For event or program registration forms
    children:
      - name: event_name
        label: Event/Program Name
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Name of the event or program being registered for"

      - name: registration_type
        label: Registration Type
        taxonType: SELECTION
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        selectionOptions:
          - label: "Individual"
          - label: "Group"
          - label: "Family"
          - label: "Student"
          - label: "Professional"

      - name: number_of_attendees
        label: Number of Attendees
        taxonType: NUMBER
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Total number of people being registered"

      - name: dietary_restrictions
        label: Dietary Restrictions
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        multiValue: true
        semanticDefinition: |
          Any dietary restrictions, allergies, or special meal requirements

      - name: accessibility_needs
        label: Accessibility Needs
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Special accessibility or accommodation requirements"

  # ==========================================
  # Agreements and Signatures
  # ==========================================
  - name: agreements
    label: Agreements and Signatures
    group: true
    children:
      - name: terms_accepted
        label: Terms and Conditions Accepted
        taxonType: BOOLEAN
        valuePath: VALUE_OR_ALL_CONTENT
        semanticDefinition: |
          Did the applicant check or sign the box agreeing to terms and conditions?
          Look for checkboxes near legal text or signature areas.

      - name: terms_text
        label: Terms Text Reference
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: |
          The actual terms text or a reference to where terms can be found
          (e.g., "See attached", "Available at www.example.com/terms")

      - name: consent_given
        label: Consent for Data Use
        taxonType: BOOLEAN
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: |
          Did the applicant consent to use of their data (marketing, communication, etc.)?

      - name: signature_present
        label: Signature Present
        taxonType: BOOLEAN
        valuePath: VALUE_OR_ALL_CONTENT
        semanticDefinition: |
          Is there a handwritten or electronic signature on the form?

      - name: signature_date
        label: Signature Date
        taxonType: DATE
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: |
          The date the form was signed. Look near signature areas for dates.

      - name: witness_signature
        label: Witness Signature Present
        taxonType: BOOLEAN
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Is there a witness signature if required?"

      - name: witness_name
        label: Witness Name
        taxonType: STRING
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Name of witness if signature was witnessed"

      - name: notarized
        label: Notarized
        taxonType: BOOLEAN
        valuePath: VALUE_OR_ALL_CONTENT
        nullable: true
        semanticDefinition: "Was the form notarized? Look for notary stamps/seals"

  # ==========================================
  # Processing and Status
  # ==========================================
  - name: processing_status
    label: Processing Status
    group: true
    description: Administrative fields for workflow tracking
    children:
      - name: status
        label: Processing Status
        taxonType: SELECTION
        valuePath: REVIEW
        userEditable: true
        selectionOptions:
          - label: "New"
          - label: "Under Review"
          - label: "Pending Additional Information"
          - label: "Approved"
          - label: "Rejected"
          - label: "On Hold"
          - label: "Completed"

      - name: assigned_to
        label: Assigned To
        taxonType: STRING
        valuePath: REVIEW
        userEditable: true
        nullable: true
        description: "Person or team responsible for reviewing this form"

      - name: priority
        label: Priority
        taxonType: SELECTION
        valuePath: REVIEW
        userEditable: true
        selectionOptions:
          - label: "Low"
          - label: "Normal"
          - label: "High"
          - label: "Urgent"

      - name: review_notes
        label: Review Notes
        taxonType: STRING
        valuePath: REVIEW
        userEditable: true
        nullable: true
        description: "Internal notes from reviewers"

      - name: follow_up_required
        label: Follow-up Required
        taxonType: BOOLEAN
        valuePath: REVIEW
        userEditable: true
        description: "Does this submission require follow-up action?"

      - name: follow_up_date
        label: Follow-up Date
        taxonType: DATE
        valuePath: REVIEW
        userEditable: true
        nullable: true
        description: "When to follow up with applicant"

      - name: completeness_score
        label: Completeness Score
        taxonType: NUMBER
        valuePath: FORMULA
        description: "Percentage of required fields completed"
        semanticDefinition: |
          Calculate percentage of non-empty required fields to measure form completeness

# ==========================================
# Validation Rules
# ==========================================
validationRules:
  # Required Fields
  - name: "Form type required"
    ruleFormula: "NOT_EMPTY(form_metadata.form_type)"
    messageFormula: '"Form type must be specified"'
    overridable: false

  - name: "Submission date required"
    ruleFormula: "NOT_EMPTY(form_metadata.submission_date)"
    messageFormula: '"Submission date is required"'
    overridable: false

  - name: "Respondent name required"
    ruleFormula: |
      NOT_EMPTY(respondent.personal_info.full_name) OR
      (NOT_EMPTY(respondent.personal_info.first_name) AND
       NOT_EMPTY(respondent.personal_info.last_name))
    messageFormula: '"Respondent name is required (full name or first + last)"'
    overridable: false

  - name: "Contact information required"
    ruleFormula: |
      NOT_EMPTY(respondent.contact_info.email) OR
      NOT_EMPTY(respondent.contact_info.phone_primary)
    messageFormula: '"At least one contact method (email or phone) is required"'
    overridable: false

  - name: "Signature required"
    ruleFormula: "agreements.signature_present == true"
    messageFormula: '"Form must be signed"'
    overridable: false

  - name: "Terms must be accepted"
    ruleFormula: "agreements.terms_accepted == true"
    messageFormula: '"Terms and conditions must be accepted"'
    overridable: false

  # Date Logic
  - name: "Submission date not in future"
    ruleFormula: "form_metadata.submission_date <= TODAY()"
    messageFormula: '"Submission date cannot be in the future"'
    overridable: true

  - name: "Signature date matches or before submission"
    ruleFormula: |
      IS_EMPTY(agreements.signature_date) OR
      agreements.signature_date <= form_metadata.submission_date
    messageFormula: '"Signature date should not be after submission date"'
    overridable: true

  - name: "Birth date reasonable"
    ruleFormula: |
      IS_EMPTY(respondent.personal_info.date_of_birth) OR
      (respondent.personal_info.date_of_birth < TODAY() AND
       YEAR_DIFF(TODAY(), respondent.personal_info.date_of_birth) < 120)
    messageFormula: '"Date of birth appears invalid"'
    overridable: true

  - name: "Applicant of legal age"
    ruleFormula: |
      IS_EMPTY(respondent.personal_info.date_of_birth) OR
      YEAR_DIFF(TODAY(), respondent.personal_info.date_of_birth) >= 18
    messageFormula: '"Applicant must be 18 years or older"'
    overridable: true

  # Contact Validation
  - name: "Email format validation"
    ruleFormula: |
      IS_EMPTY(respondent.contact_info.email) OR
      REGEX_MATCH(respondent.contact_info.email, "^[^@]+@[^@]+\\.[^@]+$")
    messageFormula: '"Email address format appears invalid"'
    overridable: true

  - name: "Phone format validation"
    ruleFormula: |
      IS_EMPTY(respondent.contact_info.phone_primary) OR
      LENGTH(DIGITS_ONLY(respondent.contact_info.phone_primary)) >= 10
    messageFormula: '"Phone number should contain at least 10 digits"'
    overridable: true

  # Conditional Requirements
  - name: "Emergency contact required for minors"
    conditional: true
    conditionalFormula: |
      NOT_EMPTY(respondent.personal_info.date_of_birth) AND
      YEAR_DIFF(TODAY(), respondent.personal_info.date_of_birth) < 18
    ruleFormula: |
      NOT_EMPTY(respondent.emergency_contact.name) AND
      NOT_EMPTY(respondent.emergency_contact.phone)
    messageFormula: '"Emergency contact required for applicants under 18"'
    overridable: false

  - name: "Employer info required if employed"
    conditional: true
    conditionalFormula: |
      financial_info.employment_status IN ["Employed Full-time", "Employed Part-time"]
    ruleFormula: "NOT_EMPTY(financial_info.employer_name)"
    messageFormula: '"Employer name required for employed applicants"'
    overridable: true

  - name: "Resume required for job applications"
    conditional: true
    conditionalFormula: 'form_metadata.form_type == "Job Application"'
    ruleFormula: "employment_info.resume_attached == true"
    messageFormula: '"Resume/CV must be attached for job applications"'
    overridable: true

  - name: "Witness required for notarized forms"
    conditional: true
    conditionalFormula: "agreements.notarized == true"
    ruleFormula: |
      agreements.witness_signature == true AND
      NOT_EMPTY(agreements.witness_name)
    messageFormula: '"Witness signature required for notarized forms"'
    overridable: false

  # Data Quality
  - name: "Postal code format (US)"
    ruleFormula: |
      IS_EMPTY(respondent.contact_info.postal_code) OR
      respondent.contact_info.country != "United States" OR
      REGEX_MATCH(respondent.contact_info.postal_code, "^\\d{5}(-\\d{4})?$")
    messageFormula: '"US postal code should be 5 digits or ZIP+4 format"'
    overridable: true

  - name: "Rating values within scale"
    ruleFormula: |
      ALL_VALUES(form_responses.rating_responses.rating_value) <= 10 AND
      ALL_VALUES(form_responses.rating_responses.rating_value) >= 1
    messageFormula: '"Rating values should be between 1 and 10"'
    overridable: true

  # Business Rules
  - name: "Loan amount reasonable"
    conditional: true
    conditionalFormula: 'form_metadata.form_type == "Loan Application"'
    ruleFormula: |
      financial_info.loan_amount_requested > 0 AND
      financial_info.loan_amount_requested <= 1000000
    messageFormula: '"Loan amount should be between $1 and $1,000,000"'
    overridable: true

  - name: "Income verification for large loans"
    conditional: true
    conditionalFormula: |
      form_metadata.form_type == "Loan Application" AND
      financial_info.loan_amount_requested > 50000
    ruleFormula: "NOT_EMPTY(financial_info.annual_income)"
    messageFormula: '"Annual income required for loans over $50,000"'
    overridable: false

# ==========================================
# Conditional Formatting
# ==========================================
conditionalFormats:
  - name: "Incomplete form"
    formula: "processing_status.completeness_score < 80"
    backgroundColor: "#FEE2E2"
    textColor: "#991B1B"
    icon: "exclamation-circle"

  - name: "Urgent priority"
    formula: 'processing_status.priority == "Urgent"'
    backgroundColor: "#FEF3C7"
    textColor: "#92400E"
    fontWeight: "bold"
    icon: "exclamation-triangle"

  - name: "Follow-up overdue"
    formula: |
      processing_status.follow_up_required == true AND
      NOT_EMPTY(processing_status.follow_up_date) AND
      processing_status.follow_up_date < TODAY()
    backgroundColor: "#FED7AA"
    textColor: "#9A3412"
    icon: "clock"

  - name: "Missing signature"
    formula: "agreements.signature_present == false"
    backgroundColor: "#FEE2E2"
    textColor: "#991B1B"
    icon: "pen"

  - name: "Minor applicant"
    formula: |
      NOT_EMPTY(respondent.personal_info.date_of_birth) AND
      YEAR_DIFF(TODAY(), respondent.personal_info.date_of_birth) < 18
    backgroundColor: "#DBEAFE"
    textColor: "#1E40AF"
    icon: "user"

  - name: "High-value loan application"
    formula: |
      form_metadata.form_type == "Loan Application" AND
      financial_info.loan_amount_requested > 100000
    backgroundColor: "#FEF3C7"
    textColor: "#92400E"
    fontWeight: "bold"
    icon: "dollar-sign"

  - name: "Approved"
    formula: 'processing_status.status == "Approved"'
    backgroundColor: "#D1FAE5"
    textColor: "#065F46"
    icon: "check-circle"

  - name: "Rejected"
    formula: 'processing_status.status == "Rejected"'
    backgroundColor: "#FEE2E2"
    textColor: "#991B1B"
    icon: "times-circle"

Key Features

Universal Form Structure

  • Flexible Question Types: Text, multiple choice, yes/no, numeric, rating scales
  • Multi-Value Support: Handle repeated questions or multi-select responses
  • Conditional Fields: Different field sets for different form types

Comprehensive Contact Information

  • Multiple Contact Methods: Email, phone (primary and alternate), full address
  • Structured Address: Separate fields for street, city, state, postal code
  • Emergency Contacts: Capture backup contact information when needed

Specialized Form Types

Employment Applications:
  • Position applied for, desired salary, availability
  • Resume/references tracking
  • Employment type preferences
Loan Applications:
  • Loan amount, purpose, financial details
  • Employment and income verification
  • Business rule validation for loan limits
Event Registration:
  • Event details, attendee count
  • Dietary restrictions and accessibility needs
  • Group vs. individual registration

Signature and Agreement Tracking

  • Legal Acceptance: Terms and conditions, consent checkboxes
  • Signature Verification: Presence, date, witness information
  • Notarization: Track notary stamps and requirements

Workflow Management

  • Status Tracking: New, under review, approved, rejected, etc.
  • Assignment: Route to appropriate reviewers
  • Priority Management: Flag urgent submissions
  • Follow-up Tracking: Schedule and track required actions
  • Completeness Scoring: Automated calculation of form completion

Validation Strategy

Critical Validations (Non-overridable)

- Form type must be specified
- Respondent name required
- At least one contact method required
- Signature required
- Terms must be accepted
- Emergency contact for minors
- Witness for notarized forms
- Income verification for large loans

Quality Checks (Overridable)

- Submission date not in future
- Birth date reasonable
- Email format validation
- Phone format validation
- Postal code format (US)
- Rating values within scale

Conditional Business Rules

- Employer info required if employed
- Resume required for job applications
- Loan amount reasonable limits
- Income required for loans > $50k

Conditional Formatting

Provides visual indicators for:
  • Incomplete forms (< 80% complete) - Red alert
  • Urgent priority - Gold highlight
  • Overdue follow-ups - Orange warning
  • Missing signatures - Red alert
  • Minor applicants - Blue information
  • High-value loans (> $100k) - Gold highlight
  • Approved/Rejected - Green/Red status

Usage Tips

For HR/Recruitment Teams

  1. Use employment_info fields for job application processing
  2. Track resume_attached and references_provided for completeness
  3. Monitor processing_status for workflow management
  4. Use priority field to handle urgent applications

For Financial Services

  1. Extract financial_info for loan processing
  2. Validate income against loan amount for risk assessment
  3. Use employment_status and years_employed for stability checks
  4. Track processing_status for approval workflow

For Event Organizers

  1. Use registration_info for attendee management
  2. Track dietary_restrictions and accessibility_needs for planning
  3. Monitor number_of_attendees for capacity planning
  4. Use contact_info for event communications

For Compliance Officers

  1. Verify agreements.terms_accepted for legal compliance
  2. Check signature_present and signature_date for validity
  3. Validate notarized and witness_signature when required
  4. Track consent_given for data protection compliance

Best Practices

  1. Capture All Question Types: Use appropriate taxonTypes for different question formats
  2. Handle Multi-Value Fields: Enable multiValue: true for questions that may have multiple answers
  3. Validate Contact Information: Use EMAIL_ADDRESS and PHONE_NUMBER types for automatic validation
  4. Track Signatures Carefully: Signature presence and date are critical for legal validity
  5. Use Conditional Validation: Apply rules based on form type or applicant characteristics
  6. Calculate Completeness: Use formula fields to measure how complete submissions are
  7. Enable Workflow Tracking: Administrative fields help route and prioritize form processing
  8. Respect Age Requirements: Validate applicant age and require emergency contacts for minors
  9. Handle Sensitive Data: Mark SSN/ID fields as sensitive and follow data protection rules
  10. Support Multiple Form Types: Use conditional fields to handle different form scenarios

Integration Examples

CRM/Applicant Tracking

externalName: leadSource → form_metadata.form_type
externalName: fullName → respondent.personal_info.full_name
externalName: email → respondent.contact_info.email
externalName: status → processing_status.status

Marketing Automation

externalName: contactEmail → respondent.contact_info.email
externalName: optIn → agreements.consent_given
externalName: submissionDate → form_metadata.submission_date

Loan Origination System

externalName: loanAmount → financial_info.loan_amount_requested
externalName: annualIncome → financial_info.annual_income
externalName: employmentStatus → financial_info.employment_status
externalName: applicationStatus → processing_status.status