FLS Admin Guide

Step-by-step administration guide for HR Admins, System Admins, and Training Managers
๐Ÿ‘ฉโ€๐Ÿ’ผ HR Admin  ยท  ๐Ÿ”ง System Admin  ยท  ๐ŸŽ“ Training Manager

Prerequisites

Before you begin

These items must be in place before you can create and operate an FLS instance. Check each one with your System Admin if you're unsure.

Admin Roles Setup

Two roles are relevant for FLS administration: HR Admin (manages registrations and instances) and Incharge (monitors specific instances and manages respondents). Both are granted via MFLSACCESSRULE.

AccessTypeCodeWhat it grantsTypical assigned to
Manage0Full CRUD: create/edit instances, add respondents, view all results including individual responses, pause/closeHR Admin, System Admin
ViewSummary1View aggregated results and completion stats only; can nudge respondents; cannot see individual answersDepartment head, Training Manager (view only)
ViewResponses2Same as ViewSummary plus ability to see individual respondent answers (who answered what)Incharge with response-level access
Scope Restriction

You can restrict an Incharge to a specific Org Unit or Department by setting Scope=OrgUnit and ScopeObjectId=their department ID. This ensures they see only their team's responses โ€” not other departments'.

What is a Registration?

A Registration is the master configuration template for a type of form. Think of it as the blueprint โ€” it defines the form's behaviour (completion method, draft support, multi-attempt, token expiry, reminder schedule). Once a Registration is created, you can create many Instances from it โ€” each instance is a specific deployment to a specific group of people at a specific time.

Example: "TMS Training Feedback" is one Registration. Each training batch that completes creates a new Instance from that same Registration. The Registration is created once; Instances are created repeatedly.

Create a Registration

Call POST /fls/registrations or use the Admin UI. Fill all required fields:

MFLSREGISTRATION Fields Reference
FieldTypeExampleNotes
RegistrationCodestring(50)TMS-TRAINING-FBUnique code; no spaces. Used as identifier in Bridge Config.
RegistrationNamestring(200)TMS Training FeedbackHuman-readable display name.
FormTemplateIdint4Links to MFORMTEMPLATE. Determines form layout/shell.
ModuleIdint301301=TMS, 501=HRMS. Links to calling module for Bridge Config lookup.
CompletionMethodint00=Survey (use Survey Engine), 1=QuickRating, 2=External (webhook acknowledgement)
AllowDraftResponsebit11=respondents can save draft and return later. Recommended for long forms.
AllowMultiAttemptbit00=one submission only. 1=can re-submit. Use 0 for appraisals; 1 for satisfaction polls.
IsMandatorybit11=respondent must complete; used for certificate gating and appraisal sign-off.
TokenExpiryHoursint72Hours after dispatch before token expires. 72=3 days is typical for training feedback.
DefaultEipTemplCodestringFLS-TMS-DISPATCH-V1EIP template code for dispatch email. Must be published in EIP before use.
WebhookPathstring(null)Optional HTTP callback for external form completion (CompletionMethod=2 only).
// POST /fls/registrations โ€” example request body
{
  "registrationCode": "TMS-TRAINING-FB",
  "registrationName": "TMS Training Feedback",
  "formTemplateId": 4,
  "moduleId": 301,
  "completionMethod": 0,
  "allowDraftResponse": true,
  "allowMultiAttempt": false,
  "isMandatory": true,
  "tokenExpiryHours": 72,
  "defaultEipTemplCode": "FLS-TMS-DISPATCH-V1"
}

Reminder Rule Builder

Reminder rules automate nudges and escalations. They are configured on the Registration and apply to all Instances created from it. Rules are evaluated daily by a Quartz job.

MFLSREMINDERRULE Fields
FieldValuesExampleMeaning
ReminderTrigger0=DayOffset, 1=OnDeadline, 2=OnStatusChange0 (DayOffset)When to evaluate the rule
DayOffsetinteger (days after instance opened)3Evaluate 3 days after OpenedOn date
StatusFilter0=NotStarted, 1=Opened, 2=InProgress, -1=Any non-submitted0 (NotStarted)Only apply rule to respondents matching this status
ReminderAction0=NotifyRespondent, 1=EscalateToManager, 2=AutoClose0 (Notify)What to do when rule fires
EipTemplCodestringFLS-REMINDER-V1EIP email template to use for the notification
MaxFireCountinteger1Maximum times this rule fires per respondent per instance. Use 1 to avoid spamming.

Recommended rule set for TMS Training Feedback:

Rule #DayStatus FilterActionTemplate
13Not StartedNotify RespondentFLS-REMINDER-V1
26Not Started OR In ProgressNotify RespondentFLS-REMINDER-V2 (urgent)
37Any non-submittedEscalate to ManagerFLS-ESCALATE-V1
EIP Template Must Exist

The EipTemplCode must match a published template in the EIP module. If it doesn't exist, the Quartz job will log an error and skip that rule. Verify templates with your EIP admin before creating reminder rules.

Bridge Config Linkage

If your Registration needs to send events to another module (e.g., TMS needs to know when feedback is submitted), a Bridge Config row must exist in MFLSBRIDGECONFIG. This is typically a one-time developer setup per integration. As an admin, you should know which Bridge Configs are active so you understand what happens when respondents submit.

ModuleIdModuleEvents subscribedAction on FormSubmitted
301TMSFormSubmitted, InstanceCompletedUpdate learner feedback status; aggregate trainer ratings
501HRMSStepCompleted, InstanceCompletedUnlock next appraisal step; update employee records
601PERM (Performance)InstanceCompletedFinalise performance review records

Access Rules

Access Rules control who can manage or view results for a Registration. Use POST /fls/registrations/{id}/access-rules to grant access.

FieldValuesNotes
PrincipalType0=User, 1=RoleAssign to a specific user or a role group
PrincipalIdUserId or RoleIdThe user or role being granted access
AccessType0=Manage, 1=ViewSummary, 2=ViewResponsesSee Admin Roles section for details
Scope0=All, 1=OrgUnit, 2=DepartmentLimit to a specific org unit or department
ScopeObjectIdWorkOUId or DeptIdRequired if Scope โ‰  0. Leave null for all-access.

Survey Instrument Config

An Instrument Config is the questionnaire definition. One Registration links to one or more Instrument Configs (e.g., Step 1 uses Config #21, Step 2 uses Config #22 in a multi-step appraisal).

MSURVEYINSTRUMENTCONFIG Key Fields
FieldTypeExampleNotes
InstrumentTitlestringTraining Feedback SurveyShown as the survey heading to respondents
InstrumentTypeIdint0=Feedback, 1=Assessment, 2=PollDetermines scoring logic
LangDefaultstringen, ta, arDefault language; respondent can switch if translations exist
IsAnonymousbit0=named, 1=anonymousIf 1, respondent names never appear in results queries
ShowProgressBarbit1Show section progress bar to respondent
IsNpsEnabledbit1If 1, NPS questions are calculated as part of the instrument score
IsLockedbit0Set to 1 once instance opens to prevent structure changes mid-survey
VersionNoint3Auto-incremented on publish. Use to track instrument revisions.

Adding Sections

Sections divide a long survey into pages. Each section is shown one at a time with a "Next" button. Recommended: 3โ€“6 questions per section to avoid respondent fatigue.

1

Go to Survey Designer โ†’ Sections tab for your Instrument Config.

2

Click "Add Section". Enter SectionCode (e.g., GENERAL-FB), SectionName (shown as the section heading), and optional Description (shown as subtext).

3

Set the DisplayOrder for each section. Sections are shown in ascending order.

4

Add questions to each section (see Question Bank below).

Question Bank

Questions are defined once in MSURVEYQUESTIONBANK and reused across multiple Instrument Configs. This means a question like "How would you rate the trainer?" can be standardised and used in multiple survey types without rewriting it.

1

Check if the question already exists in the bank (search by QuestionCode). Reuse if possible.

2

If new: Create question in bank with QuestionCode (e.g., TMS-TRAINER-KNOWLEDGE), QuestionText, QuestionTypeId, default scale settings.

3

Link the bank question to your section via MSURVEYINSTQUESTION. Here you can override: IsRequired, scale range, weight, branching rules for this specific instrument.

4

Set DisplayOrder within the section. Questions appear in ascending order.

6 Question Types

โญ

Rating (Stars)

  • Fields: ScaleMin (usually 1), ScaleMax (1โ€“5 for stars, up to 10 for extended)
  • Optional: LabelLow (e.g., "Poor"), LabelHigh (e.g., "Excellent")
  • Result: AnswerNumeric. Aggregated to AvgRating in survey summary.
  • Use when: you want a familiar star rating for trainer quality, course satisfaction, etc.
๐Ÿ“Š

NPS (Net Promoter Score)

  • Fixed scale: 0 to 10. No configuration needed beyond enabling IsNpsEnabled on the instrument.
  • Result: AnswerNumeric. Automatically categorised as Promoter (9-10), Passive (7-8), Detractor (0-6).
  • NPS Score = (Promoters% โˆ’ Detractors%), ranges from โˆ’100 to +100.
  • Use when: measuring likelihood to recommend a course, trainer, or programme.
๐Ÿ”˜

Single Choice (Radio buttons)

  • Add 2โ€“6 options in MSURVEYQUESTIONOPTION for the question.
  • Respondent picks exactly one option.
  • Result: AnswerOptionIds (one value). Aggregated to OptionDistJson showing count per option.
  • Use when: "Overall, how was this training? Very Good / Good / Average / Poor"
โ˜‘๏ธ

Multi Choice (Checkboxes)

  • Respondent selects one or more options.
  • Result: AnswerOptionIds (comma-separated). Each option counted in OptionDistJson.
  • Use when: "What did you find most useful? [Relevant content] [Good pace] [Practical examples] [Clear explanations]"
โœ…

Yes / No

  • Two options with configurable labels (default: "Yes" / "No").
  • Change labels via MSURVEYQUESTIONOPTION (PositiveLabel / NegativeLabel).
  • Result: AnswerOptionIds (1 or 2). Shown as Yes/No counts in results.
  • Use when: "Would you recommend this course to a colleague?"
๐Ÿ“

Free Text

  • Fields: MaxLength (default 1000), MinLength (optional โ€” force a minimum response length).
  • Result: AnswerText. Not numerically aggregated; shown as a list of text responses.
  • Use when: "Any other comments or suggestions?" or "Describe one thing the trainer did well."

Branching Rules

Branching rules show or hide questions based on previous answers. Stored in BranchRulesJson on MSURVEYINSTQUESTION. The format is a JSON array of conditions.

// Show Question 106 (text) only if Question 101 (rating) scored < 3
// BranchRulesJson on Q106:
[
  {
    "conditionQuestionId": 101,
    "operator": "lt",   // lt | gt | eq | neq | in
    "value": 3,
    "action": "show"    // show | hide | require
  }
]
Keep Branching Simple

Complex branching (nested conditions, multiple jumps) makes the survey difficult to test and confusing for respondents. Prefer simple single-condition rules: "If rating < 3, show the improvement text box".

Anonymous Settings

Two different anonymous modes exist โ€” understand the difference:

SettingWhat it controlsUse case
Survey IsAnonymous=1Results queries never return respondent names โ€” even admins cannot see who answered what. Respondent identity is hidden from all result views.360ยฐ peer review, upward feedback, sensitive HR surveys
QuickRating IdentityMode=0QuickRating entries stored without linking to the rater's user ID. Admin can see rating values and comments but not who submitted them.Anonymous trainer ratings, anonymous product ratings
Anonymous is irreversible

Once an instrument is set IsAnonymous=1 and responses are collected, you cannot retroactively identify respondents. Set this before launching โ€” changing it post-launch is not supported.

Create an Instance

An Instance is a specific deployment of a Registration to a specific set of people for a specific time period. Creating an instance is the most common admin task.

1

Select Registration โ€” choose the Registration that matches your form type (e.g., "TMS Training Feedback").

2

Set names โ€” enter InstanceCode (e.g., TMS-FB-Q2-2026) and InstanceName (e.g., "TMS Batch Feedback Q2-2026"). InstanceName is shown to respondents and incharges.

3

Link an entity (optional) โ€” set EntityObjectId if this instance relates to a specific entity (e.g., the Training Batch ID for TMS).

4

Add groups โ€” define audience groups. Each group gets a GroupCode, GroupName, and links to a context object (ContextObjectTypeId=1=Employee, ContextObjectId=DeptId). See Groups section.

5

Set schedule โ€” call POST /fls/instances/{id}/schedule with OpensFrom, ClosesOn, GlobalDeadlineDt. The instance stays in Draft until opened.

6

Add incharges โ€” add incharge users to MFLSINCHARGE. They will see the instance in their dashboard and can monitor progress.

7

Open the instance โ€” call POST /fls/instances/{id}/open or use the admin UI. This transitions status to Open, generates tokens, and dispatches emails.

Scheduling (Opens / Closes)

FieldMeaningNotes
OpensFromDate/time the form becomes accessibleIf in the future, a Quartz job auto-opens it at this time. Or call OpenFlsInstance manually.
ClosesOnDate/time the form stops accepting responsesA Quartz job auto-closes the instance. Respondents who haven't submitted see "Closed" after this.
GlobalDeadlineDtThe hard deadline for individual respondentsCan differ from ClosesOn. Used by reminder rules (OnDeadline trigger fires at this date).
Manual vs. Scheduled Opening

For TMS batches that complete at unpredictable times, call OpenFlsInstance manually from TmsFeedbackBLL after the batch is marked complete โ€” don't rely on a scheduled OpensFrom date.

Groups & Target Audience

Groups divide respondents within an instance โ€” useful for multi-batch or multi-department deployments. Each group has its own completion stats, optional deadline, and step configuration (for multi-step forms).

MFLSINSTANCEGROUP FieldPurposeExample
GroupCodeUnique code within the instanceBATCH-A, DEPT-FINANCE
GroupNameDisplay name for the groupBatch A, Finance Department
ContextObjectTypeIdType of entity this group represents1=Employee, 5=Department, 9=TrainingBatch
ContextObjectIdID of the specific entityBatchId=2047
StepCountNumber of sequential steps for this group1 (single form), 3 (multi-step appraisal)
BlockingFlag1=block next step until current step complete1 (for certificate gating or step sequencing)
BlockingSpOptional SP to validate blocking conditionSP_TMS_CHECKFEEDBACKBLOCK
DeadlineDtGroup-specific deadline (overrides GlobalDeadlineDt)2026-06-27 23:59

Opening an Instance

Opening an instance is the point of no return โ€” tokens are generated, emails are dispatched, and the form is live. Verify these before opening:

Pause / Resume / Close

Use POST /fls/instances/{id}/control with Action parameter:

ActionCodeEffect on respondentsEvents fired
Pause0Cannot access form link โ€” they see a "Paused" messageInstanceStatusChanged (to Paused)
Resume1Form becomes accessible again; in-progress drafts preservedInstanceStatusChanged (to Open)
Close2Cannot access form โ€” link shows "Closed". No further submissions.InstanceStatusChanged (to Closed)
Archive3No access. Instance marked Archived for data retention.None
Closing is not reversible

A Closed instance cannot be re-opened. If you need to pause temporarily (e.g., a system maintenance window), use Pause not Close. Use Close only when collection is definitively finished.

Add Respondents (One by One)

Use POST /fls/instances/{id}/respondents for single adds (or the Admin UI "Add Respondent" form).

FieldRequiredNotes
FlsInstanceIdโœ“The instance to add to
GroupIdโœ“Which group within the instance
RespondentNameโœ“Full name shown in admin view
RespondentMailโœ“Email for token dispatch
RespondentRefIdoptionalYour module's ID (e.g., EmployeeId, EnrollmentId) for cross-reference
RespondentTypeoptional0=Employee, 1=Manager, 2=HR, 3=Peer, 4=External
StepNooptionalFor multi-step: which step this person fills. Default=1.

Bulk Import (CSV)

For large groups, paste a CSV into the Bulk Import tab. The system expects comma-separated values, one row per respondent:

// CSV format (header row required):
Name,Email,Reference,Group,RespondentType
Arun Kumar,arun.k@myorg.com,EMP-10842,Batch A,0
Bhavana Singh,bhavana.s@myorg.com,EMP-10843,Batch B,0
Chetan Rao,chetan.r@myorg.com,EMP-10844,Batch A,0
โš  Encoding: Save the CSV as UTF-8 to support names with non-ASCII characters (Tamil, Arabic, Devanagari). Excel-exported CSVs are sometimes UTF-16 โ€” convert if needed.
โš  Duplicates: FLS checks for duplicate RespondentMail within the same instance+group. Duplicate rows are skipped with a warning during preview.

Respondent Statuses

StatusCodeAdmin action available
Not Started0Send reminder (nudge); re-dispatch token
Opened1Wait; they clicked but haven't started filling
In Progress2Send gentle reminder; draft is saved
Submitted3View their responses; no further action needed
Expired4Nudge to re-dispatch with new token; or manually mark as submitted if completed offline
Opted Out5View opt-out reason (if captured); no further reminders sent

Send Reminder / Nudge

Nudging sends a new email reminder to a respondent with their token link. Call POST /fls/respondents/{id}/nudge or use the "Remind" button in the admin UI. The NudgeCount field increments on each nudge โ€” use this to track how many times a respondent has been contacted.

Bulk Nudge

To nudge all pending respondents at once, the admin UI has a "Send Reminder to All Pending" button. This triggers a batch nudge across all respondents with status Not Started or In Progress for the current instance.

Opt-Out Handling

If the EIP dispatch template includes an opt-out link and the Registration allows opt-out, respondents can decline participation. When they opt out:

Admins cannot force opt-out respondents to re-enter. If the form is mandatory (IsMandatory=1), the admin must handle the opt-out case through their module's own workflow (e.g., manager override in HRMS).

Create a QuickRating Config

A QuickRating Config defines how a rating widget behaves for a specific entity type. Create one config per type of entity you want rated (e.g., one for Trainers, one for Courses).

FieldExampleNotes
ConfigNameTrainer Rating โ€” 5 StarsAdmin display name
ObjectTypeId3What type of entity: 3=Trainer, 5=Course, 8=Product
BizTransactionTypeId-1Further scope (e.g., distinguish "rate trainer per session" vs "rate trainer overall"). -1=all contexts.
ScaleMin1Minimum rating value
ScaleMax5Maximum. โ‰ค5 shows stars; >5 shows numeric buttons.
AllowComment10=none, 1=optional, 2=required
CommentMaxLength500Max chars for comment textarea
AllowMultiRating00=one rating per user per entity; 1=can re-rate
IdentityMode00=anonymous ratings; 1=record user identity
WidgetLabelRate this trainerPrompt text shown above the stars/buttons
ThankyouLabelThank you for your rating!Shown after submission

Embed Context (ObjectTypeId)

The Angular QuickRating widget uses [objectTypeId] + [objectId] to scope the widget to a specific entity. Ensure your ObjectTypeId values are consistent across modules โ€” define them in a shared constants file or system table.

<!-- Trainer rating widget embedded in TMS Batch card -->
<app-quick-rating-widget
  [objectTypeId]="3"        <!-- 3 = Trainer -->
  [objectId]="trainerId"    <!-- specific trainer ID -->
  [bizTypeId]="sessionId"   <!-- optional: scope per session -->
  [showSummary]="true"      <!-- show avg rating badge below stars -->
/>

Review Ratings

View all ratings for an entity via GET /quickrating/ratings?objectTypeId=3&objectId=301. Returns paginated QuickRatingRows with Rating, CommentText (if allowed), RatedOn, and optionally RatingByRefId (if IdentityMode=1).

View trend over time via GET /quickrating/trend?objectTypeId=3&objectId=301. Returns monthly AvgRating trend data, suitable for charting on the Trainer Rating Card.

Enable TMS Feedback

TMS feedback is enabled at two levels: per-organisation (in TMS Settings) and per-batch (at dispatch time).

1

Org-level default: In TMS Settings โ†’ Feedback Settings, set: Default Instrument Config ID, Block Certificate by Default, Feedback Deadline Days, Auto-Dispatch on Batch Completion.

2

Batch-level override: When dispatching feedback for a specific batch, the Training Manager can override the instrument config and certificate-blocking setting.

3

Bridge Config: The TMS Bridge Config (MFLSBRIDGECONFIG row for ModuleId=301) must already exist for events to flow back to TMS. This is a one-time developer setup โ€” verify with your System Admin.

Certificate Gating

When BlockCertificate=1 is set at dispatch time, the MFLSINSTANCEGROUP row is created with BlockingFlag=1 and BlockingSp=SP_TMS_CHECKFEEDBACKBLOCK. The SP is called whenever a learner requests their certificate:

-- SP_TMS_CHECKFEEDBACKBLOCK returns 1 (blocked) or 0 (allowed)
IF EXISTS (
  SELECT 1 FROM MFLSRESPONDENT
  WHERE  FlsRespondentId = @FlsRespondentId
  AND    RespondentSts <> 3   -- not Submitted
  AND    BlocksCertificate = 1
)
SELECT 1  -- blocked
ELSE
SELECT 0  -- allowed
Opt-out and expired learners

Learners who opted out (status=5) or whose token expired (status=4) are still blocked if BlocksCertificate=1. The Training Manager must decide whether to manually mark them as submitted or grant a certificate override through TMS.

Auto-Dispatch Settings

SettingWhat it does
Auto-Dispatch on Batch CompletionWhen a TMS batch transitions to "Completed" status, TmsFeedbackBLL.DispatchBatchFeedbackAsync is called automatically using the default instrument config ID and certificate setting.
Feedback Deadline DaysNumber of days after batch completion before the FLS instance auto-closes. Default: 7 days.
Block Certificate by DefaultIf true, all auto-dispatched instances are created with BlockCertificate=1. Can be overridden per batch at dispatch time.
Default Instrument Config IDThe survey template used for all auto-dispatched feedback forms unless overridden.

Viewing Trainer Reports

Navigate to TMS โ†’ Trainer Profile โ†’ Feedback tab, or to the Trainer Rating Card component. Select the trainer and period (e.g., Q2-2026). The card shows:

The dimension averages come from SP_TMS_FLS_UPDATESUMMARY, which maps specific InstQuestionIds to each dimension. If you add a new survey instrument, ensure the question IDs are mapped in the SP โ€” otherwise the trainer report will show no data.

Survey Results Dashboard

Access results via GET /fls/surveys/{flsInstanceId}/results or through the admin UI Results tab. The dashboard shows:

Export Options

Access Control for Results

As noted in Access Rules, ViewSummary allows aggregated results only. ViewResponses allows per-respondent detail. For anonymous instruments, even ViewResponses users cannot see respondent names โ€” only response content.

Troubleshooting

Common Issues and Fixes
IssueLikely CauseHow to Fix
Respondent sees "This link has expired"TokenExpiry has passed (TokenExpiryHours elapsed since dispatch)Nudge the respondent via Admin โ†’ Respondents โ†’ Remind. This re-dispatches a fresh token. Or extend TokenExpiryHours on the Registration for future instances.
Respondent not receiving email1) RespondentMail is incorrect; 2) EIP template not published; 3) LFLSDISPATCHLOG shows DeliveryStatus=FailedCheck LFLSDISPATCHLOG for this respondent. If DeliveryStatus=Failed, verify email address and EIP template status. Correct and nudge.
Instance stuck in "Scheduled" โ€” not openingOpensFrom is in the future, or OpenFlsInstance was never called (for manual dispatch)If OpensFrom is past and still Scheduled: check Quartz job logs. If TMS auto-dispatch: ensure SP_TMS_DISPATCHFEEDBACK was called and returned success. Manually call OpenFlsInstance if needed.
Survey results page shows no dataGroupId filter is excluding results; or TSURVEYRESPONSESUMMARY not yet populatedCheck the Group filter in the Results view (switch to "All Groups"). If still empty and there are Submitted respondents, the summary aggregation job may not have run. Trigger manually via the Recalculate Summary button.
Trainer rating card shows 0 / no dataSP_TMS_FLS_UPDATESUMMARY doesn't map the survey question IDs to trainer dimensionsVerify the InstQuestionIds for Knowledge/Clarity/Engagement questions in SP_TMS_FLS_UPDATESUMMARY match the InstrumentConfig used for this batch. If the instrument was updated, the SP mapping may be stale.
Certificate still blocked after feedback submittedSP_TMS_CHECKFEEDBACKBLOCK checking old RespondentSts value; or cachingVerify RespondentSts=3 for the learner in MFLSRESPONDENT. Check if SP_TMS_CHECKFEEDBACKBLOCK has a cache or if there's a query result cache in TMS DAL. Force refresh or clear the TMS learner cache.
"Instance Completed" event not firingNot all groups have 100% submission (instance completion waits for all groups)Check each group's SubmittedCount vs. RespondentCount in MFLSINSTANCEGROUP. The InstanceCompleted event fires only when all groups reach 100%. If a group is stuck, investigate any Opted Out or Expired respondents.

GoodBooks GB5 ยท FLS Admin Guide ยท 2026-07-01