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.

The complaint module is standalone – it does not require the CRM tier. Activate it under Options → General settings → Complaint module (misc_have_complaints). Without activation, the "Complaints" menu is hidden.

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:

  1. 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).
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Resolution — the complaint is closed with a resolution type (repair, replacement, refund, rejection, agreement) and a short note for the archive.
  7. Complaint record — if needed, a printable PDF complaint record is generated with customer info, complaint subject, vehicle, resolution and signature placeholders.
Steps can be skipped or merged – a clear-cut goods complaint can be closed in 30 seconds, while a complex manufacturer warranty with parts ordering goes through every step and may take weeks.

Access and navigation

The module sits in the main menu under Partners / Clients → Complaints. Menu items:

ItemPathWhat it shows
All complaints/complaint/complaint/adminSearch and filter all complaints by status, type, customer, date and priority.
Kanban/complaint/complaint/kanbanVisual board with complaints grouped into columns by the steps of the selected complaint type.
Dashboard/complaint/complaint/dashboardKPI tiles (active, closed, cancelled), monthly trend, type distribution, top customers, "stuck" steps.
New complaint/complaint/complaint/createForm for entering a new complaint.
Complaint types/complaint/complaintType/adminManage complaint types – workflow, fields, templates, quick phrases. See the deep-dive article.
Module settings/complaint/complaintConfig/indexModule-specific settings (e-mail sender, name, reply-to). Admin only.
Permissions
PermissionWhat it allows
complaintsView list and individual complaints, add activities.
complaints.createCreate new complaints.
complaints.settingsConfigure 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
FieldDescription
SubjectShort problem description (e.g., "Crack on kitchen cabinet door").
Complaint typeDropdown of active types. The type drives which fields appear, the workflow steps and the available e-mail templates.
Optional fields
FieldDescription
CustomerTypeahead 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 invoiceThe invoice the complaint refers to. Customer and items can be auto-filled from the invoice.
Service orderIf the complaint comes from a vehicle service, link the reception (SV).
VehicleA specific vehicle from the database (only if the type has the vehicle section enabled).
DescriptionDetailed problem description, symptoms, history.
PriorityLow / Medium / High / Urgent – affects the badge color and sort order in the list and kanban.
Assigned employeeThe 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.
Auto-linking: when you select an invoice, the system pulls the customer and items from it and creates a "Source invoice" link in the linked-documents section. Selecting a service order pulls the vehicle and creates a "Service order" link.

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
SideContent
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)
StatusMeaningVisible in
ActiveComplaint is in progress. The exact step (inspection, waiting for parts, installation...) is tracked in the stepper.List (default filter), Kanban, Dashboard.
ClosedComplaint is resolved (repair, replacement, refund or agreement). Tagged with a resolution type.List ("Closed" filter).
CancelledComplaint 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).

Step configuration is part of the complaint type – the same module uses different workflows for Vehicle warranty, Kitchen and Goods complaint. See the deep-dive article.

"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:

FieldDescription
Waiting onPredefined reason (customer, part, manufacturer, authorised service...) or free text.
SinceStart date of waiting (defaults to today).
NoteFree 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.

The 15-day ZPP deadline continues to count during waiting – "waiting" is an internal label, not a legal pause. If the manufacturer keeps you waiting beyond the deadline, the complaint will be flagged as "OVERDUE".

Activities and communication

Everything that happens on a complaint is recorded as a timeline activity. Activity types:

TypeWhen created
CommentAn employee adds text via the main input – can be internal (employees only) or visible to the customer (through the public link).
E-mailThe system sent an e-mail (from a template or manually) – the full sent message is archived.
CallRecords a phone interaction with the customer or a supplier.
Status changeAutomatic – the system records who changed the step or status and when.
DocumentAutomatic – when a photo or PDF is uploaded.
Document linkedAutomatic – when an invoice, receipt, parts order... is linked.
Step advanceAutomatic – 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 typeDescriptionTypical moment
Source invoiceThe invoice the customer used to buy the product or service.On creation – automatic.
Service orderThe vehicle reception / repair order the complaint originated from.On creation from service – automatic.
Parts order to supplierParts purchase order linked to the complaint.When ordering a replacement part.
Parts pre-receiptNotice of incoming parts (in transit).When the supplier confirms shipment.
Parts receiptWarehouse receipt for received parts.When the part physically arrives.
VehicleVehicle from the database (context).On creation from service.
Replacement invoiceCredit 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.

Large video? The module supports chunked upload, so large files (e.g., damage video) are split into chunks and sent in parallel. If the connection drops, the upload resumes.

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:

MacroReplaces
{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 / badgeMeaning
DeadlineCreation date + 15 days (default; configurable per type).
RemainingDays left. Color shifts as the deadline approaches (green → yellow → red).
OVERDUEVisible badge in the list and dashboard if the deadline passed without closure or customer reply.
The system tracks the deadline but does not auto-respond to the customer – an answer is always sent by an employee (e-mail from a template, by phone or in writing). The module only warns about an approaching deadline.

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.

The public link is a great replacement for "What is happening with my complaint?" calls – the customer always has access to current status, and you do not have to keep answering.

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:

  1. 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.
  2. Run — with one click, deals are copied into complaints, including descriptions and notes. Migrated complaints are tagged with migrated_from_deal_id for traceability.
  3. 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