Skip to content

PRD: Knowledge base, surveys & feedback

ModuleHelpdesk (CORE-13)PRD IDPRD-KB-001
StatusIn-progressOwnerHelpdesk squad
Date2026-06-02Versionv0.1
Packages@nx/helpdesk · @nx/coreURDKB · SRV · FR · CMP

TL;DR

Gives a merchant's support team a self-service and feedback layer on top of the ticketing core: a multilingual knowledge base to deflect tickets, CSAT/NPS/CES surveys auto-sent after resolution to measure quality, a feature-request channel with one-vote-per-customer, and an agent-issued compensation path to make good on breaches. The result: customers resolve issues without an agent, support quality becomes measurable, and product demand and goodwill are both captured against the ticket that prompted them.

1. Context & Problem

The ticketing core lets agents work tickets through a lifecycle with SLA enforcement, but it stops at the point of resolution. There is no way for a customer to self-serve before raising a ticket, no signal on whether the support that was given actually satisfied them, no channel to capture the product demand that surfaces inside support conversations, and no controlled way for an agent to compensate a customer after a breach. Without these, ticket volume stays high, support quality is invisible, customer demand is lost, and goodwill gestures are ad-hoc and untracked.

This layer builds on the existing ticket → message → SLA → agent core to close the loop: deflect with a knowledge base, measure with surveys, capture demand with feature requests, and recover trust with compensation.

2. Goals & Non-Goals

Goals

  • A multilingual knowledge base: articles (title, content, excerpt) with a draft → published → archived lifecycle, hierarchical categories, a globally-unique slug, author/locale/tags, and view + helpful + not-helpful tracking.
  • Surveys & feedback: CSAT / NPS / CES surveys with ordered questions, a post-resolution / post-close / periodic trigger, a worker that auto-sends after resolution, response capture, and a feed into each agent's satisfaction score.
  • Feature requests: customer-submitted requests through a product-tracking lifecycle, one vote per customer (with unvote), and an optional link back to the source ticket.
  • Compensation: agent-issued goodwill (store credit, voucher, refund, discount, free shipping) on a breach or at discretion, with its own pending → processing → completed lifecycle, linked to a ticket and optionally an escalation.

Non-Goals

  • AI-assisted reply suggestions and predictive SLA breach (URD future).
  • Omni-channel intake (email, Zalo OA, Messenger) and a customer-facing self-service ticket portal.
  • SLA reporting dashboards - owned by the Reports module.

3. Success Metrics

MetricTarget / signal
Ticket deflectionPublished articles accrue views and helpful ratings; article reads correlate with lower ticket creation
Survey coverageResolved tickets that trigger and capture a survey response
Satisfaction signalSurvey responses feed a per-agent satisfaction score with no orphaned responses
Demand captureFeature requests submitted and voted, each with at most one vote per customer
Goodwill traceability100% of compensations linked to a ticket; none stuck outside the pending → completed lifecycle

4. Personas & Use Cases

PersonaGoal in this feature
CustomerRead help articles to self-serve, rate them, answer a post-resolution survey, submit and vote on feature requests
Support AgentIssue goodwill compensation on a difficult or breached ticket
Support ManagerAuthor and publish knowledge-base articles, configure surveys, triage feature requests

Core scenarios: a customer reads a published article and rates it helpful → after a ticket resolves, the survey worker auto-sends a CSAT/NPS/CES survey whose response feeds the agent's satisfaction score → a customer submits a feature request and others vote → an agent issues compensation on a breached ticket and it moves through its lifecycle.

5. User Stories

  • As a support manager, I want to write multilingual articles in hierarchical categories with a draft → published → archived lifecycle, so customers can self-serve in their language.
  • As a customer, I want to read a published article and mark it helpful or not, so the merchant knows which content works.
  • As a support manager, I want a survey auto-sent after a ticket resolves, so I can measure support quality without manual effort.
  • As a customer, I want to answer a CSAT/NPS/CES survey, so my feedback reaches the team that helped me.
  • As a customer, I want to submit a feature request and vote on others (once), so the product team sees real demand.
  • As a support agent, I want to issue goodwill compensation on a breached ticket, so I can recover customer trust with a tracked gesture.

6. Functional Requirements

#RequirementURD ref
FR-1Create and manage multilingual articles (title, content, excerpt) with draft → published → archived lifecycleURD-KB-001..002
FR-2Articles carry category, author, locale, a globally-unique slug, and tags; categories are hierarchicalURD-KB-003 · URD-KB-005
FR-3Track view, helpful, and not-helpful counts per article; customers submit helpful/not-helpful feedback; views are recorded individuallyURD-KB-004 · URD-KB-006..007
FR-4Create surveys of type CSAT, NPS, or CES with ordered, reorderable questionsURD-SRV-001 · URD-SRV-003
FR-5Trigger modes - post-resolution, post-close, periodic; a worker auto-sends the survey after a ticket resolvesURD-SRV-002 · URD-SRV-004
FR-6Capture and store survey responses; responses feed the agent satisfaction scoreURD-SRV-005..006
FR-7Customers submit feature requests (title, description, category, tags) through a product-tracking lifecycleURD-FR-001..002
FR-8One vote per customer per request, with unvote; a request may link to a source ticket; internal/resolution notesURD-FR-003..005
FR-9Issue compensation on SLA breach or at discretion; types: store credit, voucher, refund, discount, free shippingURD-CMP-001..002
FR-10Compensation follows pending → processing → completed / failed / cancelled / expired, linked to a ticket and optionally an escalationURD-CMP-003..004

Full requirement text and acceptance criteria live in the Helpdesk URD. This PRD references them rather than restating them.

7. Non-Functional Requirements

AreaRequirement
Data integrityArticle slug is globally unique; one vote per customer per request is enforced; survey responses never orphan from their agent score
Tenancy & authzAll operations scoped per merchant (x-merchant-id); gated by helpdesk permissions (route-level permission check)
Soft-deleteAll records use soft-delete; corrections never hard-delete history
ReliabilityPost-resolution survey send runs in a worker (survey-trigger), decoupled from the resolving request
i18nArticle content and user-facing labels are bilingual ({ en, vi })

8. UX & Flows

Key screens (in the support workspace): article + category management, the survey builder, the feature-request board with voting, and the compensation issuance flow on a ticket.

9. Data & Domain

EntityRole
Article · ArticleCategoryKnowledge-base content and its hierarchical category
ArticleView · ArticleFeedbackPer-view tracking and helpful/not-helpful feedback
Survey · SurveyQuestion · SurveyResponseSurvey definition, ordered questions, and captured responses
FeatureRequest · FeatureVoteCustomer requests and one-vote-per-customer records
CompensationAgent-issued goodwill with its own lifecycle, linked to a ticket/escalation

Conceptual only - full schema and invariants in the helpdesk domain model. Schemas live in the centralized core/models/schemas/helpdesk set.

10. Dependencies & Assumptions

Depends on

  • Ticket core (URD-TKT · URD-SLA) - resolution drives the survey trigger; breaches drive compensation.
  • Agents (URD-AGT) - survey responses feed each agent's satisfaction score.
  • User Management (@nx/core) - customer and agent identities behind feedback, votes, and authorship.

Assumptions

  • A resolution event is emitted that the survey-trigger worker can consume.
  • Customers are identifiable so a one-vote-per-customer rule and per-customer feedback can be enforced.
  • A survey exists with a post-resolution trigger for the auto-send path to fire.

11. Risks & Open Questions

Risk / questionMitigation / status
Package does not currently compile (dead reference)Tracked at the module level; blocks verified-shipped, not scope
Duplicate or abusive votes inflate demandOne-vote-per-customer per request enforced at the data layer (C-06), with unvote
Survey send failing silently after resolutionRuns in a dedicated worker, decoupled and retryable, not inline with the resolve request
Compensation issued but never fulfilledLifecycle includes failed / cancelled / expired; every compensation links to a ticket
Article slug collisions across merchantsSlug is globally unique (C-04)

12. Release Plan & Launch Criteria

AspectPlan
PhaseP2 (KB, SRV, FR) · P1 (CMP) - see URD feature catalog
RolloutAll merchants once the package build is repaired; no feature flag
MigrationNone - new entities in core/models/schemas/helpdesk; survey config authored per merchant
Launch criteriaArticle publish → read → rate verified; survey auto-send → response → agent-score verified; one-vote-per-customer enforced; compensation lifecycle verified end-to-end
MonitoringArticle views/helpful ratios, survey send + response rate, feature-request votes, compensation completion rate

13. FAQ

Can the same article slug be reused across merchants? No - the slug is globally unique. Each article needs a distinct slug.

When is a survey sent? When a ticket resolves (or closes, or on a periodic schedule, depending on the trigger mode). A survey-trigger worker auto-sends it; it is not sent inline with the agent's resolve action.

Can a customer vote on a feature request more than once? No - one vote per customer per request. Unvote is supported, so a customer can withdraw their vote.

Does issuing compensation pay the customer immediately? Not necessarily - compensation moves through pending → processing → completed, and can also end in failed / cancelled / expired. Issuing it records the intent and tracks fulfilment.

Where do feedback and survey responses go? Helpful/not-helpful feedback is tracked per article; survey responses are stored and feed the responsible agent's satisfaction score.

References

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.