FLS Platform Overview

Form Lifecycle Service · Survey Engine · QuickRating · TMS Feedback Bridge
FLS Core Survey Engine QuickRating TMS Bridge

What is FLS?

The Form Lifecycle Service (FLS) is the central form and survey collection platform inside GoodBooks GB5. Any module that needs to collect structured responses from people — post-training feedback, annual appraisals, satisfaction surveys, peer reviews, or quick ratings — uses FLS as its engine instead of building its own form system.

FLS handles the entire lifecycle of a form deployment: creating the questionnaire, assigning it to the right people, dispatching token-based access links, tracking who has responded and who hasn't, sending automated reminders, aggregating results, and publishing completion events back to the originating module.

🔵

FLS Core

Registrations, instances, groups, respondents, sessions. The form lifecycle engine that every other component builds on.

📋

Survey Engine

Multi-section questionnaires with 6 question types — rating stars, NPS, single/multi choice, yes-no, free text.

⭐

QuickRating Widget

One-tap star or numeric rating embeddable in any screen. No survey, no session — just a single score with optional comment.

🎓

TMS Feedback Bridge

Pre-built integration between the Training Management System and FLS. Auto-dispatches feedback after batch completion; gates certificates on submission.

Why FLS Exists

The Problem Before FLS

Before FLS, each module (TMS, HRMS, CRM) built its own ad-hoc form collection: separate tables, separate email dispatch, no shared reminders, no consistent token-based access, no common results format. Maintaining four separate form systems created duplicated effort and inconsistent experiences.

CapabilityBefore FLS (per-module)With FLS (shared platform)
Token links (no-login access)Ad-hoc or not supportedBuilt-in; every respondent gets a GUID token link
Automated remindersManual or hardcodedConfigurable reminder rules (Day 3, Day 6, on deadline)
Anonymous responsesNot available in mostIsAnonymous flag on any survey instrument
Multi-step formsNot supportedStepNo sequencing (employee → manager → HR)
Result aggregationCustom SP per modulePre-built TSURVEYRESPONSESUMMARY with AvgRating, NPS, distributions
Certificate gatingTMS-only custom logicFLS BlockingFlag + BlockingSp — any module can use it
Real-time monitoringNot availableSignalR FlsMonitorHub with live completion % push
Cross-module eventsNot availableBridge config + Dapr pub/sub: FormSubmitted, InstanceCompleted, etc.

Platform Components at a Glance

The four components are layered — FLS Core provides the foundational lifecycle, Survey Engine and QuickRating provide collection mechanisms, and the TMS Bridge is the first production integration built on top.

Calling Modules

TMS · HRMS · CRM · PERM — any module that needs form collection

↓ API calls / stored procedure bridge
FLS Core

Registration · Instance · Group · Respondent · Session · Access Rules

Survey Engine

Instrument Config · Sections · Question Bank · Answers · Summary Aggregation

QuickRating

Rating Config · 1-tap submit · Summary badge · Trend data

↓ events published to LFLSEVENTLOG
Event & Bridge Layer

MFLSBRIDGECONFIG · MFLSEVENTSUBSCRIPTION · Dapr pub/sub or HTTP webhook · Retry logic

EIP (Notifications)

Email · SMS · Push · Token links dispatched via Enterprise Integration Platform

Form Lifecycle

Every FLS Instance passes through a defined lifecycle. Understanding which state an instance is in tells you exactly what respondents can do and what admin actions are available.

Draft
Status 0
→
Scheduled
Status 1
→
Open
Status 2
⇄
Paused
Status 3
→
Closed
Status 4
→
Archived
Status 5
StatusTriggered byRespondents can…Admin can…
DraftInstance created via API or SPNothing — tokens not yet generatedEdit all settings, add respondents
ScheduledSchedule endpoint called with OpensFrom/ClosesOnNothing — form not yet openModify schedule, add respondents
OpenOpenFlsInstance called (or OpensFrom time passes via Quartz job)Access form via token link, fill and submitAdd respondents, send nudges, view live progress
PausedAdmin calls ControlFlsInstance(Action=Pause)Cannot submit new responses — form link shows "Paused"Resume (returns to Open) or Close
ClosedAdmin closes, or ClosesOn date passesCannot access form — link shows "Closed"View results, archive
ArchivedAdmin archives closed instanceNo accessRead-only results only

Roles & Permissions

Access to FLS data is governed by MFLSACCESSRULE. Each rule grants a Principal (User or Role) an AccessType for a specific Registration, with an optional Scope (all orgs, one org unit, one department).

RoleCreate RegistrationCreate InstanceView Summary ResultsView Individual ResponsesManage Respondents
System Admin✓✓✓✓✓
HR Admin (AccessType=Manage)✓✓✓✓✓
Incharge (AccessType=ViewSummary)✗✓ (own instances)✓✗✓ (nudge only)
Incharge (AccessType=ViewResponses)✗✓ (own instances)✓✓✓
Respondent✗✗✗✗✗
Scope Restriction

Incharges can be scoped to a specific Org Unit (Scope=OrgUnit, ScopeObjectId=WorkOUId) or Department. This means a department head can view FLS results for their department only — they cannot see other departments' responses even within the same instance.

Token-based Access

One of FLS's most important features is that respondents do not need a GoodBooks login. Every respondent gets a unique GUID access token embedded in their link. This makes FLS ideal for external feedback, customer surveys, or any scenario where logging in creates friction.

Here is the full token-based access flow:

1

Admin opens instance → POST /fls/instances/42/open is called. FLS transitions status to Open.

2

Tokens generated → FLS creates one AccessToken (GUID) per respondent in MFLSRESPONDENT. TokenExpiry set to now + TokenExpiryHours (e.g., 72 hours).

3

EIP dispatches email → FLS publishes to LFLSDISPATCHLOG. EIP picks up the dispatch job and sends a personalised email with the token link: https://app/survey?token=9f4e8c12-…

4

Respondent clicks link → No login required. The Angular app calls POST /fls/sessions/open with the token.

5

FLS validates token → Checks MFLSRESPONDENT: token exists, not expired, status ≤ InProgress. Returns FlsSessionContextDto with the survey instrument and session ID.

6

Respondent fills form → Draft auto-saved via POST /fls/sessions/{id}/draft. RespondentSts updated to InProgress.

7

Respondent submits → POST /fls/sessions/{id}/submit. RespondentSts set to Submitted. TFLSRESPONSESESSION row created. FormSubmitted event published.

Token Expiry

If a respondent clicks the link after the token has expired, they see an "Expired" page. The admin can nudge (re-dispatch) the respondent to generate a fresh token, or manually mark them as submitted if they completed it through another channel.

Multi-step Forms

FLS supports sequential multi-step workflows where different people fill different forms in order. The classic example is an annual appraisal: the employee fills Step 1 (self-assessment), then the manager reviews in Step 2, and HR finalises in Step 3. Each step can use a different survey instrument.

StepNoWho fills itUnlocked whenExample form
1Employee (self)Instance opensSelf-assessment questionnaire
2ManagerAll Step 1 respondents in group submitted (or GroupBlockingSp returns OK)Manager review and rating
3HR AdminAll Step 2 respondents submittedHR sign-off and final grade
Blocking Rules

BlockingFlag=1 on MFLSINSTANCEGROUP means Step 2 respondents cannot access their form until Step 1 is complete. BlockingSp is an optional stored procedure that validates the blocking condition — allowing complex rules like "at least 80% of Step 1 must submit before Step 2 opens".

FLS Core

FLS Core is the lifecycle engine. It does not care what type of form is being filled — that's the Survey Engine's job. FLS Core manages who fills what, when, and tracks whether they did.

Key Database Tables

FLS Core Tables
TablePurposeKey Fields
MFLSREGISTRATIONMaster config template for a type of form (e.g., "TMS Training Feedback")FlsRegistrationId, RegistrationCode, FormTemplateId, CompletionMethod, AllowDraftResponse, TokenExpiryHours
MFLSINSTANCEA specific deployment of a registration (e.g., Q2-2026 batch feedback)FlsInstanceId, FlsRegistrationId, InstanceStatus (0–5), EntityObjectId, OpensFrom, ClosesOn
MFLSINSTANCEGROUPTarget audience groups within an instanceGroupId, FlsInstanceId, GroupName, RespondentCount, SubmittedCount, StepCount, BlockingFlag
MFLSRESPONDENTOne row per person assigned to fill a formFlsRespondentId, AccessToken (GUID), TokenExpiry, RespondentSts (0–5), FirstOpenedAt, SubmittedAt
TFLSRESPONSESESSIONSession tracking per attemptFlsSessionId, FlsRespondentId, SessionStatus, StartedAt, SubmittedAt, TimeTakenSeconds
MFLSREMINDERRULEAutomated reminder/escalation rules per registrationDayOffset, StatusFilter, ReminderAction (Notify / Escalate / AutoClose), EipTemplCode
MFLSACCESSRULEWho can view/manage a registrationPrincipalType, PrincipalId, AccessType (0=Manage, 1=ViewSummary, 2=ViewResponses), Scope

Respondent Status Codes

CodeStatusWhat it means
0Not StartedToken dispatched but respondent has not clicked the link yet
1OpenedRespondent clicked the link; session started
2In ProgressAt least one draft answer saved
3SubmittedForm fully submitted — no further changes allowed
4ExpiredToken expiry date passed before submission
5Opted OutRespondent explicitly opted out via the form link

Survey Engine

The Survey Engine manages questionnaire design and collects structured answers. It sits on top of FLS Core — a survey instrument is linked to a FLS Registration, and answers are stored per FLS Session.

Instrument Hierarchy

1

Survey Instrument Config (MSURVEYINSTRUMENTCONFIG) — The top-level questionnaire. Settings: title, language, anonymous flag, NPS enabled, version. Linked to one FLS Registration.

2

Sections (MSURVEYINSTRUMENTSECTION) — Groups of related questions shown on one page. Example: "General Feedback" + "Trainer Evaluation".

3

Question Bank (MSURVEYQUESTIONBANK) — Reusable questions with question code, text, type. Can be shared across multiple instruments.

4

Instance Questions (MSURVEYINSTQUESTION) — Links a bank question to a specific instrument section, with override settings (required, weight, scale, branch rules).

6 Question Types

⭐
Rating (1–5 stars)
Stores AnswerNumeric. Shows interactive star widget. Aggregates to AvgRating in summary.
📊
NPS (Net Promoter Score, 0–10)
Stores AnswerNumeric. Calculates Promoters (9-10), Passives (7-8), Detractors (0-6), NPS Score.
🔘
Single Choice (radio)
Stores AnswerOptionIds (one option). Aggregates to OptionDistJson showing counts per option.
☑️
Multi Choice (checkboxes)
Stores AnswerOptionIds (comma-separated). Aggregates to OptionDistJson per option.
✅
Yes / No
Two labelled pill buttons. Stored as AnswerOptionIds (option 1=Yes, option 2=No).
📝
Free Text
Textarea. Stores AnswerText. Not aggregated numerically; shown as text response list in results.

QuickRating Widget

QuickRating is a lightweight one-tap rating component. Unlike a full survey, it requires no FLS instance, no session, no sections — just a configured scale and an entity to rate. It's designed to be embedded inline in any screen (TMS batch card, product page, service ticket).

FeatureDetail
Scale typesStars 1–5, Stars 1–10, Numeric 0–10, Numeric 1–100
Entity scopingObjectTypeId (what kind of thing) + ObjectId (which specific one). E.g., ObjectTypeId=3=Trainer, ObjectId=301=Arun Krishnamurthy
Business contextBizTransactionTypeId distinguishes rating contexts for the same entity — e.g., rate trainer per session vs. overall
Optional commentAllowComment: 0=None, 1=Optional, 2=Required. CommentMaxLength configurable.
Multi-ratingAllowMultiRating=1: user can rate again (IsLatest flag tracks most recent). AllowMultiRating=0: one rating per user per entity.
AnonymousIdentityMode=0: ratings stored without linking to user identity. IdentityMode=1: user is recorded.
Summary badgeLive aggregated AvgRating, count, NPS Score, RatingDistJson shown to other users viewing the entity.

TMS Feedback Bridge

The TMS module integrates with FLS through a dedicated bridge. When a training batch is completed, TMS auto-dispatches a feedback survey to all learners using a single stored procedure call. The trainer's rating is aggregated from dimension questions in the survey.

1

Training Manager marks batch as completed (or sets auto-dispatch in settings).

2

TmsFeedbackBLL calls SP_TMS_DISPATCHFEEDBACK with BatchId, InstrumentConfigId, BlockCertificate flag, and list of EnrollmentIds.

3

The SP creates the MFLSINSTANCE, MFLSINSTANCEGROUP, and one MFLSRESPONDENT row per learner. It returns (FlsInstanceId, RespondentCount).

4

TmsFeedbackBLL calls OpenFlsInstance → tokens generated → EIP sends learners their feedback link.

5

As learners submit, the FormSubmitted event fires → TMS handler aggregates trainer ratings (AvgKnowledge, AvgClarity, AvgEngagement) from the survey answers.

6

If BlockCertificate=true, the certificate issuance SP checks RespondentSts=3 (Submitted) before issuing. Learners who haven't submitted are blocked.

Where FLS Fits in GB5

FLS is a horizontal platform service — it lives below individual business modules and provides shared capabilities they all consume. Think of it the way EIP (Enterprise Integration Platform) provides notifications: FLS provides form collection.

GB5 ModuleUses FLS forForm typeKey feature used
TMS (Training)Post-training feedbackSurvey (6 questions)Certificate gating, trainer rating aggregation
HRMSAnnual appraisalsSurvey (multi-step)3-step sequential: employee → manager → HR
PERM (Performance)360° review & OKR feedbackSurvey (anonymous)Anonymous IsAnonymous=1, multiple rater types
CRM / SalesCustomer satisfactionSurvey (short poll)External token access, no GB5 login needed
Any moduleQuick star rating on any entityQuickRating widgetInline embed, 1-tap, summary badge

Module Integration Map

Each module that integrates with FLS registers a Bridge Config (MFLSBRIDGECONFIG) row. This row tells FLS where to send events when things happen — either via Dapr pub/sub or via HTTP webhook.

MFLSBRIDGECONFIG Key Columns
ColumnValue examplePurpose
ModuleId301 (TMS), 501 (HRMS)Identifies the owning module
IsDapr1 = Dapr, 0 = HTTPEvent delivery mechanism
DaprPubSubTopictms-fls-eventsDapr topic to publish to (if IsDapr=1)
EventHandlerUrl/tms/webhooks/flsHTTP endpoint for events (if IsDapr=0)
SummarySpNameSP_TMS_FLS_UPDATESUMMARYSP to call after InstanceCompleted to aggregate results
ResponseVisibility0=All, 1=Incharge, 2=HROnlyWho can see individual respondent answers
AllowRespondentAdd1 = yesCan respondents be added after instance opens?

Event & Bridge System

When significant things happen inside FLS, it publishes events to LFLSEVENTLOG. A background job picks these up and dispatches them to each registered module via Dapr or HTTP. If delivery fails, FLS retries with exponential backoff.

EventTypeCodeWhen firedTypical handler action
FormSubmitted0Individual respondent submits their formTMS: update learner status, aggregate trainer rating
StepCompleted1All respondents in a step group submittedHRMS: unlock next appraisal step for managers
InstanceCompleted2All steps across all groups submittedCall SummarySpName to aggregate final results
InstanceExpired3ClosesOn date passes with incomplete responsesMark pending respondents as Expired
RespondentOverdue4Individual deadline passesFlag certificate block, notify manager
InstanceStatusChanged5Instance paused, resumed, or closedUpdate module UI, notify stakeholders
RespondentOpened6Respondent clicks link and opens formAnalytics: track open rate
Retry Logic

LFLSEVENTLOG.EVENTSTATUS tracks delivery: 0=Pending, 1=Success, 2=Failed, 3=Retry. On failure, FLS waits NextRetryOn (exponential backoff) before retrying up to MaxRetries times (configured per event subscription). After exhausting retries, the row stays at EventStatus=2 — a failed event alert should be monitored.

SignalR Real-Time Monitoring

For form incharges who want to watch submissions happen live (e.g., during a training day when 70 learners are filling feedback simultaneously), FLS provides a SignalR hub that pushes completion updates without any page refresh.

AspectDetail
Hub classFlsMonitorHub (FLSSL/Hubs/FlsMonitorHub.cs)
Group patternfls:instance:{flsInstanceId} — scoped to one instance
Client methodReceiveSummaryUpdate(FlsInstanceSummaryDto) — pushed to all watching incharges
When pushedAfter every FormSubmitted event — completion %, submitted count, in-progress count updated in real time
Join/LeaveIncharge calls JoinInstanceMonitor(flsInstanceId) on connect; LeaveInstanceMonitor on navigate away

Scenario 1 · TMS Post-Training Feedback

Scenario 1 — TMS Post-Training Feedback with Certificate Gate

Actors: Training Manager (Meena), 70 Learners, Trainer (Arun Krishnamurthy), HR Admin
1

Setup (one-time): HR Admin creates FLS Registration "TMS Training Feedback" (FlsRegistrationId=7) with CompletionMethod=Survey, TokenExpiryHours=72, reminder rules: Day 3 nudge, Day 6 escalation. Survey Instrument Config #18 is designed with 6 questions (Rating, NPS, Knowledge, Clarity, Engagement, Comments).

2

Batch completes: Training Manager marks Batch #TRG-2026-047 "Advanced Excel for Finance" as completed in TMS. Auto-dispatch is enabled.

3

SP_TMS_DISPATCHFEEDBACK executes: Creates MFLSINSTANCE (FlsInstanceId=42, "TMS Batch Feedback Q2-2026"), MFLSINSTANCEGROUP (70 learners, BlockingFlag=1 for certificate gate), and 70 MFLSRESPONDENT rows. BLL calls OpenFlsInstance → all 70 get email with personalised token links.

4

Learners fill feedback: Over the next 3 days, learners click their link, fill 6 questions (takes ~3 minutes), and submit. Each submission fires FormSubmitted → TMS handler updates trainer rating aggregation.

5

Day 3 reminder: Quartz job runs MFLSREMINDERRULE → identifies 22 learners still Not Started → EIP sends reminder emails automatically.

6

Training Manager monitors: Opens FLS admin dashboard. Sees live progress via SignalR: 45/70 submitted (64%). Sends manual nudge to 3 overdue learners.

7

Certificate gating: 25 learners attempt to download certificate from TMS. SP_TMS_CHECKFEEDBACKBLOCK returns "blocked" for each — they see "Please submit your feedback to unlock your certificate."

8

Instance closes: After 7 days (ClosesOn date), instance auto-closes. Final trainer ratings: Knowledge=4.6, Clarity=4.2, Engagement=4.5, Overall=4.4. HR views Trainer Rating Card showing Q2 2026 performance.

✅ Outcome: 65% completion rate. 25 learners unblocked certificates. Trainer Arun's Q2 rating (4.4) added to his historical trend. Training Manager can now compare across batches.

Scenario 2 · HR Annual Appraisal (3-step Multi-step)

Scenario 2 — Annual Appraisal with Manager Review and HR Sign-off

Actors: HR Admin (Priya), Employee (Ravi), Manager (Deepa), HR Reviewer (Sunitha)
1

Setup: HR creates Registration "Annual Appraisal 2026" with StepCount=3. Three instrument configs: #21 (self-assessment, 12 questions), #22 (manager review, 8 questions), #23 (HR sign-off, 4 questions).

2

Instance created: HR creates Instance "Appraisal Cycle Q4-2026" with 3 groups per department (200 employees, 45 managers, 5 HR reviewers). OpensFrom=1 Dec, ClosesOn=31 Dec.

3

Step 1 — Employee self-assessment: 200 employees receive token links. They fill 12-question self-assessment covering goals, competencies, achievements. Draft auto-saved; 180 submit by Dec 10.

4

BlockingFlag check: When all employees in a group submit Step 1, StepCompleted event fires → BlockingSp validates → Step 2 tokens dispatched to the 45 managers.

5

Step 2 — Manager review: Each manager sees their direct reports' Step 1 answers (read-only context) alongside 8 rating questions. Managers fill and submit by Dec 20.

6

Step 3 — HR sign-off: HR reviewers get Step 3 tokens with consolidated view of Steps 1+2. They finalise the grade and add notes. InstanceCompleted fires → HRMS annual review records updated.

✅ Outcome: Complete 3-layer appraisal. Each employee gets a final grade from HR. All steps auditable in TFLSRESPONSESESSION. No step can skip: Step 2 literally does not open until Step 1 is done.

Scenario 3 · 360° Anonymous Peer Review

Scenario 3 — 360° Anonymous Peer Review for Leadership Program

Actors: HR Admin, Participant (Kavitha), 5 peers, 1 manager, 1 subordinate
1

Instrument created: Survey #25 (360° Feedback), IsAnonymous=1. Questions: Leadership behaviour (5-star rating × 4 dimensions) + 2 open text questions. Respondent names will NOT appear in results.

2

Instance created: "Leadership 360 — Kavitha Reddy". Group: 7 respondents (5 peers, 1 manager, 1 subordinate). RespondentType codes used to classify rater relationship.

3

Responses collected: All 7 raters fill anonymously. Each sees only the questions, not who else is participating. Answers stored with FlsRespondentId but no name in results query.

4

Results viewed: HR and Kavitha's manager view the results dashboard. They see average ratings per dimension and anonymised text comments — but cannot identify who gave which rating.

✅ Outcome: Kavitha receives honest feedback. Dimension averages: Communication=4.2, Decision Making=3.8, Team Development=4.5, Strategic Thinking=3.6. Anonymous text: "Great collaborator, needs to be more decisive." HR uses this for development plan.

Scenario 4 · Post-Event Satisfaction Poll

Scenario 4 — Post-Conference Satisfaction Poll (No GB5 Login Required)

Actors: Event Organiser (Arjun), 200 conference attendees (external)
1

Quick setup: 3-question poll created: "Overall rating (1-5 stars)", "Would you attend again? (Yes/No)", "What could be improved? (free text)". IsAnonymous=1. TokenExpiryHours=72.

2

200 attendees added: Bulk CSV import of attendee emails. FLS generates 200 tokens. Instance opened; EIP sends personalised token links in the post-event thank-you email.

3

No login needed: Attendees click link from their personal email. No GB5 account required. Form loads immediately with the 3 questions. Takes 90 seconds to complete.

4

Auto-close: After 3 days, instance auto-closes. Results: Overall avg 4.1, 78% would attend again, 150 text comments aggregated.

✅ Outcome: 62% response rate (124/200). Arjun shares the results PDF with the events committee. The tokenised approach removed all login friction — no accounts to create, no passwords to remember.

Scenario 5 · Inline Quick Trainer Rating

Scenario 5 — Learner Rates Trainer with QuickRating Widget (No Survey)

Actors: Learner (Bhavana), Trainer (Arun Krishnamurthy), Training Dashboard
1

Widget configured: QuickRating Config #5 — ObjectTypeId=3 (Trainer), ScaleMax=5 (stars), AllowComment=1 (optional), AllowMultiRating=0 (rate once per session).

2

Widget appears: When Bhavana opens her training batch card in TMS, the widget renders inline: "⭐⭐⭐⭐⭐ Rate this trainer". Below it, a summary badge shows "4.3 avg from 87 ratings".

3

Bhavana rates: She clicks 4 stars → optional comment textarea appears → types "Clear explanations, very patient." → clicks Submit.

4

Immediate feedback: Widget transitions to "Thank you for your rating!" and the summary badge updates to "4.3 avg from 88 ratings" (live update via SubmitRating response).

5

No instance needed: This entire flow used zero FLS instances, zero sessions, zero Survey Engine calls. Just a single QuickRating API call.

✅ Outcome: 1-tap rating in under 10 seconds. Arun's running average updated. Training manager can view the full rating + comment list via the entity ratings endpoint.

System Admin

🔧

System Admin

Full Access

The System Admin has unrestricted access to all FLS data across all tenants. They configure the foundational wiring that other roles depend on.

  • Create and manage FLS Registrations (master configs)
  • Configure Bridge Config rows linking modules to FLS events
  • Manage EIP templates for FLS dispatch emails
  • View and manage all instances across all registrations
  • Grant/revoke Access Rules for HR Admins and Incharges
  • Monitor LFLSEVENTLOG for failed event deliveries
  • Archive completed instances

HR Admin

👩‍💼

HR Admin

AccessType = Manage

HR Admins own specific registrations granted to them. They create and operate instances for HR-driven processes (appraisals, satisfaction surveys, policy acknowledgements).

  • Design Survey Instruments (sections, questions, anonymous settings)
  • Create instances, schedule opens/closes, add groups
  • Add respondents individually or via bulk CSV import
  • View all results including individual responses
  • Send reminders and nudges to pending respondents
  • Pause, resume, or close instances
  • Export results to CSV / Excel

Instance Incharge

📋

Instance Incharge

AccessType = ViewSummary or ViewResponses

Incharges are assigned to specific instances (e.g., a Training Manager is incharge of the TMS feedback instance for their batch). They monitor progress and manage respondents but cannot create registrations.

  • View completion dashboard for their assigned instances
  • Send reminders to pending/overdue respondents
  • View aggregated survey results (always)
  • View individual responses (only if AccessType=ViewResponses)
  • View real-time completion via SignalR monitor
  • Add respondents if AllowRespondentAdd is enabled in Bridge Config

Respondent

✏️

Respondent

Token access only

The person who fills the form. They interact with FLS exclusively through their unique token link — no GoodBooks login required unless the survey is configured for authenticated access.

  • Open form via personalised token link (email/SMS)
  • Fill form across one or more sections
  • Save draft (auto-saves every answer change)
  • Submit form (finalises response — cannot change after)
  • Opt out via the form footer opt-out link (if AllowOptOut is enabled)
  • See their own submitted answers if instrument shows confirmation page

Module Integrator (Developer)

🔌

Module Integrator

Developer role

Developers who integrate a new GB5 module (or external system) with FLS. They configure Bridge Config rows, implement event handlers, and build dispatch logic using FLS APIs.

  • Create MFLSBRIDGECONFIG row for the new module
  • Subscribe to relevant FlsEventTypes (FormSubmitted, InstanceCompleted, etc.)
  • Implement Dapr subscriber or HTTP webhook for event handling
  • Call FLS APIs (dispatch, status, nudge) from module BLL
  • Store FlsInstanceId in module tables for cross-reference
  • Use GetFlsInstanceSummary for embedding completion widgets

GoodBooks GB5 · FLS Platform Overview · 2026-07-01