M13

Assessments and Surveys

Wizard-style, sectioned assessment composition and execution.

End-to-end assessment builder with type management, section and step orchestration, form/question composition, and optional question-to-task-template automation mapping.

AssessmentRunner.jsxtsx
import { useState } from 'react';
import { Wizard, Stepper, RadioButtonGroup, RadioBoxGroup, Slider, RangeSlider, BellCurve, RadarChart, Collapsible } from '@cleen/cleen-components';
import { useAssessment, useResponseSet } from '@/hooks/useAssessment';

export function AssessmentRunner({ assessmentId }) {
  const { assessment, sections } = useAssessment(assessmentId);
  const { responses, save, submit, results } = useResponseSet(assessmentId);
  const [step, setStep] = useState(0);

  if (!assessment) return null;

  const section = sections[step];
  return (
    <Wizard
      step={step}
      onStepChange={setStep}
      header={<Stepper steps={sections.map((s) => s.title)} current={step} />}
    >
      {section.questions.map((q) => (
        <Collapsible key={q.id} title={q.title} defaultOpen>
          {q.type === 'choice' && <RadioButtonGroup options={q.options} value={responses[q.id]} onChange={(v) => save(q.id, v)} />}
          {q.type === 'card'   && <RadioBoxGroup options={q.options} value={responses[q.id]} onChange={(v) => save(q.id, v)} />}
          {q.type === 'scale'  && <Slider min={1} max={10} value={responses[q.id]} onChange={(v) => save(q.id, v)} />}
          {q.type === 'range'  && <RangeSlider min={0} max={100} value={responses[q.id]} onChange={(v) => save(q.id, v)} />}
        </Collapsible>
      ))}
      {results && (
        <section className="results">
          <BellCurve data={results.distribution} value={results.score} />
          <RadarChart data={results.factorScores} />
        </section>
      )}
    </Wizard>
  );
}

Capabilities

  • Assessment save/filter/detail
  • Assessment type save/filter
  • Section and step save/filter
  • Step-form and question save/filter
  • Question to task-template mapping

Benefits

  • Faster onboarding/qualification design
  • Higher quality structured data capture
  • Actionable outcomes through task mapping

Flow of work

  1. 01Create assessment and type
  2. 02Build sections and steps
  3. 03Add forms, questions, options, dependencies
  4. 04Map actions/templates
  5. 05Run and review outcomes

Subfeatures

  • Assessment save/filter/detail
  • Assessment type save/filter
  • Section save/filter
  • Step save/filter
  • Step form save/filter
  • Question save/filter
  • Question-template association
Source surfaces (technical reference)

Internal code areas in the licensed Full-Stack codebase that back this module.

  • ApiAssessment
In the stack

Where it lives. What it exposes.

A quick visual of how Assessments and Surveys participates across the CleenUI stack, alongside the named operations it adds to the API surface.

M13 · architecture
Frontend
React · TailwindCSS · 60+ components
Assessment builderWizard playerSection editorQuestion editor
API
C# Web API · production-ready · role-aware
Assessment CRUDType mgmtSection/stepStep formQuestion CRUD
Database
AzureSQL · 300+ tables · 700+ procedures
AssessmentsSectionsStepsQuestionsResponses
Async Services and Batch Jobs
WebJobs & Functions · queue-backed
Result calculatorQuestion-task mapper
All four layers ship together as the Full-Stack license. M13 blocks are highlighted.
API operations

Named operations on this surface

7
Try these in Postman
  • POSTAssessment save/filter/detail/assessment/save-filter-detail
  • POSTAssessment type save/filter/assessment/type-save-filter
  • POSTSection save/filter/assessment/section-save-filter
  • POSTStep save/filter/assessment/step-save-filter
  • POSTStep form save/filter/assessment/step-form-save-filter
  • POSTQuestion save/filter/assessment/question-save-filter
  • POSTQuestion-template association/assessment/question-template-association

Each operation maps to an endpoint in the licensed C# Web API surface.