Complaint module – overview
The complaint module manages the full lifecycle of customer complaints, warranty claims and disputes – from intake through resolution (repair, replacement, refund, rejection). It links each complaint to source documents (invoices, service receptions, vehicles, parts orders), tracks the 15-day deadline required by the Croatian Consumer Protection Act (ZPP), and lets customers follow status through a public link.
Typical users: shops selling warrantied goods (kitchens, furniture, electronics, motorcycles), auto service shops (manufacturer warranties), vehicle and equipment dealers, mobile device repair (GSM) and any business that processes written customer complaints.
Deep-dive articles:
- Complaint types and workflow – configuring complaint types, building step-by-step workflows (stepper), quick phrases, e-mail templates, sidebar visibility per type, resolution types.
Workflow – complaint lifecycle
A typical complaint goes through these stages:
- Intake — the customer reports a complaint (by phone, e-mail, in person, or through the public form). An employee creates a new complaint record and links it to the customer and the source invoice (or service order).
- Triage — the complaint is classified by type (e.g., Goods complaint, Vehicle warranty, Kitchen, Equipment and accessories), assigned to a responsible employee, and given a priority.
- Step-by-step processing (stepper) — each complaint type has its own workflow (e.g., "Inspection" → "Manufacturer request" → "Part ordered" → "Part received" → "Installation" → "Done"). The employee advances step by step; the system tracks where the complaint currently stands.
- Customer communication — every interaction (e-mail, phone call, note) is recorded as a timeline activity. The customer can be e-mailed from a template or given a public status link.
- Waiting on external events — if the manufacturer, a part shipment or the customer is awaited, the complaint is set to "Waiting" with a reason and date. The system counts waiting days.
- Resolution — the complaint is closed with a resolution type (repair, replacement, refund, rejection, agreement) and a short note for the archive.
- Complaint record — if needed, a printable PDF complaint record is generated with customer info, complaint subject, vehicle, resolution and signature placeholders.
Access and navigation
The module sits in the main menu under Partners / Clients → Complaints. Menu items:
| Item | Path | What it shows |
|---|---|---|
| All complaints | /complaint/complaint/admin | Search and filter all complaints by status, type, customer, date and priority. |
| Kanban | /complaint/complaint/kanban | Visual board with complaints grouped into columns by the steps of the selected complaint type. |
| Dashboard | /complaint/complaint/dashboard | KPI tiles (active, closed, cancelled), monthly trend, type distribution, top customers, "stuck" steps. |
| New complaint | /complaint/complaint/create | Form for entering a new complaint. |
| Complaint types | /complaint/complaintType/admin | Manage complaint types – workflow, fields, templates, quick phrases. See the deep-dive article. |
| Module settings | /complaint/complaintConfig/index | Module-specific settings (e-mail sender, name, reply-to). Admin only. |
Permissions
| Permission | What it allows |
|---|---|
| complaints | View list and individual complaints, add activities. |
| complaints.create | Create new complaints. |
| complaints.settings | Configure complaint types and module settings. |
Creating a new complaint
Open the form via Complaints → New complaint or the + New button on the list. Fields:
Required fields
| Field | Description |
|---|---|
| Subject | Short problem description (e.g., "Crack on kitchen cabinet door"). |
| Complaint type | Dropdown of active types. The type drives which fields appear, the workflow steps and the available e-mail templates. |
Optional fields
| Field | Description |
|---|---|
| Customer | Typeahead search by name / VAT / phone in the client database. If the customer is not in the system, the name, phone and e-mail can be entered manually. |
| Source invoice | The invoice the complaint refers to. Customer and items can be auto-filled from the invoice. |
| Service order | If the complaint comes from a vehicle service, link the reception (SV). |
| Vehicle | A specific vehicle from the database (only if the type has the vehicle section enabled). |
| Description | Detailed problem description, symptoms, history. |
| Priority | Low / Medium / High / Urgent – affects the badge color and sort order in the list and kanban. |
| Assigned employee | The person responsible for the complaint. Receives e-mail notifications about activities. |
| Warranty (manufacturer, expiry, status) | Visible only if the complaint type has the warranty section enabled. |
Complaint number is generated automatically per year (e.g., REK-2026-0001) and shown on every print and on the public link.
Complaint detail view
Opening a complaint from the list or kanban shows a modern UI with several areas:
Header
- Complaint number, status (Active / Closed / Cancelled), priority badge and type.
- Subject and meta info (customer, creation date, assigned employee, ZPP deadline).
- "Waiting" strip – appears when the complaint is on hold, with reason and number of days.
Stepper – workflow steps
Visual representation of the workflow steps from the complaint type. Three display modes:
- Prominent — each step is a large card with icon and description; the active step is highlighted, past steps are checked.
- Compact — horizontal progress bar.
- Hidden — no stepper (for types without a structured workflow, e.g., generic customer support).
Advance with the "Next step" button or by selecting a step directly. Some steps have branches (e.g., "Decision" → "Accept" or "Reject").
Main grid – left and right
| Side | Content |
|---|---|
| Left (main) | Comment input with quick phrases (click instead of typing), "Internal / Visible to customer" toggle, and the activity timeline. |
| Right (sidebar) | Customer (with source invoice and contact), vehicle (if enabled), installer, complained items, warranty, linked documents, photos and files. |
Sidebar sections are toggled per complaint type – e.g., "Goods complaint" has no vehicle section but has complained items, while "Vehicle warranty" has all sections.
Statuses and steps
The module uses two state layers:
Main status (3 states)
| Status | Meaning | Visible in |
|---|---|---|
| Active | Complaint is in progress. The exact step (inspection, waiting for parts, installation...) is tracked in the stepper. | List (default filter), Kanban, Dashboard. |
| Closed | Complaint is resolved (repair, replacement, refund or agreement). Tagged with a resolution type. | List ("Closed" filter). |
| Cancelled | Complaint was cancelled – duplicate, customer withdrew, or opened by mistake. | List ("Cancelled" filter). |
Step (per-type stepper)
Inside an "Active" complaint, the system tracks which step of the type workflow is current (e.g., Inspection, Manufacturer request, Part received, Installation). Each step has an icon and label, and may have automatic triggers (e.g., "On complaint creation" sets the initial step; "On parts receipt" advances to the next step).
"Waiting" state
If a complaint is waiting on an external event (manufacturer reply, part arrival, customer call-back, authorised service decision), the employee can flag it as waiting:
| Field | Description |
|---|---|
| Waiting on | Predefined reason (customer, part, manufacturer, authorised service...) or free text. |
| Since | Start date of waiting (defaults to today). |
| Note | Free description (e.g., "E-mail sent to supplier XY, awaiting order number"). |
While waiting is active, a strip "Waiting on: Part (3 days)" appears at the top of the complaint, and dashboards / kanban mark the complaint visually as "on hold". Waiting is cleared with a single click when the event happens.
Activities and communication
Everything that happens on a complaint is recorded as a timeline activity. Activity types:
| Type | When created |
|---|---|
| Comment | An employee adds text via the main input – can be internal (employees only) or visible to the customer (through the public link). |
| The system sent an e-mail (from a template or manually) – the full sent message is archived. | |
| Call | Records a phone interaction with the customer or a supplier. |
| Status change | Automatic – the system records who changed the step or status and when. |
| Document | Automatic – when a photo or PDF is uploaded. |
| Document linked | Automatic – when an invoice, receipt, parts order... is linked. |
| Step advance | Automatic – when the stepper moves forward. |
Mentioning employees (@mention)
In a comment, mention an employee by typing @ and selecting from the dropdown. Mentioned employees get a direct in-app notification and an e-mail.
Internal vs. customer-visible
Every activity has an "Internal" toggle. When on, the activity is hidden from the public link and not e-mailed to the customer. When off, the customer can see the comment (e.g., "Your part has been ordered, expected delivery in 7 days").
E-mail digest
For every "human" activity (comment, e-mail, call) the system sends a digest e-mail to the assigned employee, the author, watchers and mentioned users. System events (status change, document upload) are not e-mailed to avoid noise.
Linked documents
A complaint can be linked to multiple documents across the system. Link types:
| Link type | Description | Typical moment |
|---|---|---|
| Source invoice | The invoice the customer used to buy the product or service. | On creation – automatic. |
| Service order | The vehicle reception / repair order the complaint originated from. | On creation from service – automatic. |
| Parts order to supplier | Parts purchase order linked to the complaint. | When ordering a replacement part. |
| Parts pre-receipt | Notice of incoming parts (in transit). | When the supplier confirms shipment. |
| Parts receipt | Warehouse receipt for received parts. | When the part physically arrives. |
| Vehicle | Vehicle from the database (context). | On creation from service. |
| Replacement invoice | Credit note or refund invoice. | On resolution with refund. |
Links are added from the "Linked documents" sidebar – the search opens a typeahead with invoices, receipts, orders etc. Each link can have a note (e.g., "Part from this order").
Photos and documents
The "Photos" and "Documents" sidebar sections allow uploading damage photos, scanned warranty cards and other files. Files are stored on S3 (chunked upload for large files).
Document categories
- Damage photo — image of the damaged product or problem.
- Invoice — scanned original invoice (if the customer is not in the system).
- Warranty card — manufacturer warranty.
- Complaint record — signed PDF returned by the customer.
- Other — any other attachment.
Public / internal
Each file has a "Visible to customer" toggle. When on, the file appears on the customer public link (e.g., damage photos prepared for the record). When off, only employees see it.
E-mail notifications and templates
The module sends two kinds of e-mails:
1) Activity digest (internal log)
Sent automatically to the assigned employee, author, watchers and mentioned users after every human activity. It contains a summary of what was added, by whom, and a link to the complaint.
2) Templates for the customer
Each complaint type can carry a set of templates (e.g., "Complaint received", "Part has arrived", "Warranty rejected", "Done – please pick up"). Templates are sent manually from the complaint, when appropriate.
Macro variables
Templates support these placeholders:
| Macro | Replaces |
|---|---|
| {COMPLAINT_NUMBER} | Complaint number. |
| {CUSTOMER_NAME} | Customer name. |
| {VEHICLE} | Vehicle (make and model). |
| {VEHICLE_IDENT} | Vehicle plate or VIN. |
| {SERVICE_NUMBER} | Service order number (if any). |
| {PUBLIC_LINK} | Public complaint link. |
| {USER_NAME} | Sender employee name. |
| {COMPANY_NAME} | Your company / business unit name. |
Sender settings
In Complaints → Module settings the admin can configure a dedicated sender e-mail (e.g., [email protected]), display name ("Service – Complaints"), and reply-to address. All three are optional – without them, the global sender from the e-mail settings is used. The settings only apply if a dedicated SMTP is configured.
Watchers
A watcher is a person who follows a complaint and receives all notifications, even though they are not the author or the assigned employee. Reasons:
- A team lead supervising all complaints in their department.
- An accountant tracking complaints with refunds.
- An external contact (e.g., manufacturer representative) – in this case, an e-mail is entered instead of a system user.
Watchers are added and removed from the "Watchers" sidebar.
Kanban and Dashboard
Kanban
The kanban board shows complaints by step. The header has a complaint type selector – the board shows only active complaints of the selected type, arranged in columns by stepper steps (e.g., Inspection | Manufacturer request | Part ordered | Part received | Installation). Complaints are sorted by priority and date.
If the selected type has no defined steps, the kanban shows a single "Active" column with all active complaints.
Dashboard
The central analytics page:
- KPI tiles — active, closed and cancelled counts; average duration from creation to closure.
- Monthly trend — new and closed complaints per month.
- Distribution by type — share of goods, warranty, kitchen and other complaints.
- Bottlenecks — steps where complaints stall the longest (e.g., overlong "manufacturer wait").
- Top complainants — customers with the most complaints (may indicate a problematic product).
- Date range — default is the last 12 months, configurable.
The 15-day ZPP deadline
The Croatian Consumer Protection Act (Zakon o zaštiti potrošača) requires the trader to respond to a written complaint within 15 days. The module tracks this automatically:
| Field / badge | Meaning |
|---|---|
| Deadline | Creation date + 15 days (default; configurable per type). |
| Remaining | Days left. Color shifts as the deadline approaches (green → yellow → red). |
| OVERDUE | Visible badge in the list and dashboard if the deadline passed without closure or customer reply. |
For some complaint types (e.g., complex manufacturer warranties) 15 days may be too short – a longer deadline can be set in the complaint type configuration.
Complaint record (printable)
From a complaint, a PDF complaint record can be generated with one click – the official document signed by the customer and employee. It contains:
- Company info (name, address, VAT, phone, e-mail) – from global settings.
- Customer info (name, VAT, address, phone, e-mail).
- Complaint subject and detailed description.
- Vehicle (if the complaint type has the vehicle section) – make, model, plate, VIN.
- Complained items / goods.
- Warranty (if applicable) – manufacturer, expiry, status.
- Resolution (if the complaint is already closed).
- Signature placeholders for the customer and the employee.
The record can be printed and the signed scanned PDF can be uploaded back to the complaint as a "Complaint record" document category.
Public link for the customer
Every complaint has a public token-based URL that can be sent to the customer. Through it, the customer can:
- See the complaint number and subject.
- See the current step (e.g., "Part has been ordered") and last update date.
- Read employee comments marked as "visible to customer".
- View photos marked as "public".
The customer cannot change data or reply directly through the link – the public view is read-only. Communication still goes by e-mail or phone.
Migrating legacy CRM deals to complaints
If you used CRM deals to track complaints before the complaint module was activated, the module includes a one-time migration tool:
- Scan (read-only) — the system shows how many CRM deals exist by type and status, and lets you map each CRM deal type to a target complaint type.
- Run — with one click, deals are copied into complaints, including descriptions and notes. Migrated complaints are tagged with migrated_from_deal_id for traceability.
- Reset — if the migration went wrong, the tool can delete all migrated complaints and restart. The original CRM deals are untouched.
Path: /complaint/complaint/migrateCrmScan (admin only).
Module settings
Through Complaints → Module settings, an admin can configure:
- E-mail sender — the e-mail address used to send module mail (e.g., [email protected]).
- Display name — the name the customer sees (e.g., "Service – Complaints").
- Reply-To — the address customers reply to (may differ from the sender).
All three are optional – without them, the global sender from the e-mail settings is used. The settings only apply if a dedicated SMTP is configured.
Related articles
- Complaint types and workflow – configuring types, steps, e-mail templates and sidebar sections.
- CRM and clients – managing the customer database that submits complaints.
- Service module – complaints and vehicle warranties driven from service orders.
- Application settings – global configuration, complaint module activation.