Skip to main content

CRM Standard Features

The CRM module provides standard customer management functionality added in February 2026.

Features Overview

FeatureTableDescription
Notescrm_notesComments, call logs, meeting records
Tagscrm_tags + crm_user_tagsColor-coded segmentation labels
Audit Logcrm_auditAutomatic action tracking
Addressescrm_addressesUser addresses with types
Custom Fieldscrm_field_defs + crm_field_valuesDynamic user attributes

Notes

Attach notes to any CRM user. Supports multiple types:

TypeDescription
CommentGeneral text note
CallPhone call record
EmailEmail interaction
MeetingMeeting notes
TaskAction item

Features: CRUD operations, pinning, type filtering.

Tags / Segmentation

Color-coded tags for user segmentation:

  • Define tags with colors and groups
  • Assign multiple tags per user
  • Filter users by tags
  • Duplicate detection

Audit Log

Automatic fire-and-forget logging of CRM actions (writes go through AuditHelper).

Operator page: /CrmAdmin/AuditLog

The admin registry loads only after you apply at least one filter (HasAny in the page model). With no filters, the table stays empty by design.

Query parameterPurpose
user_idTarget CRM user (crm_user.timetick) — rows where this user is the dossier subject
actor_idActing CRM user (crm_user.timetick) — who performed the change
action_typeOptional enum filter (see below)
searchSubstring match on details (SQL LIKE with surrounding %); [, %, and _ inside your input are escaped so they match literally
limitMax rows (default 200)

Columns (newest first by created_date):

  • Date — UTC (localized in the UI via shared admin scripts).
  • ActionCrmAuditAction value (badge styling per action).
  • User — subject user; links to /CrmAdmin/UserDetail?timetick={user_id} when resolvable.
  • Actor — operator user, same link pattern, or system when actor_id is not positive.
  • Details — free-text payload written at log time (profile updates, tag ids, external id types, etc.).

CrmAuditAction values (from platform Shared CRMClient enum): Created, Updated, StatusChanged, Merged, TagAssigned, TagRemoved, NoteAdded, ExidAdded, ExidVerified, ExidDeleted, AddressChanged.

ExidVerified (added 2026-05) is recorded when an operator presses "Mark verified" on /CrmAdmin/ExternalIds. Programmatic verification (OTP, magic link, OAuth handshake) does not write a separate audit row — the act of confirmation is itself the verification, and is captured in login_log.

For a full route map and links from EditUser, see CRM admin — operator guide.

Addresses

Multiple addresses per user with type classification:

  • Types: Home, Work, Shipping, Billing
  • Primary address flag
  • Full address fields (street, city, country, postal code)

Custom Fields

Dynamic user attributes defined at runtime:

Field TypeExample
StringCompany name, Department
NumberRevenue, Employee count
DateContract date, Birthday
BoolVIP status, Opted-in
EnumPriority (Low/Medium/High)

Define field definitions (crm_field_defs), then set values per user (crm_field_values).

Error Codes

CodeNameDescription
5006NoteNotFoundNote with given ID not found
5007TagNotFoundTag with given ID not found
5008TagAlreadyAssignedTag already attached to user
5009AddressNotFoundAddress not found
5010FieldDefNotFoundCustom field definition not found
5011FieldValueInvalidValue doesn't match field type

Admin Pages

Razor pages under /CrmAdmin/ (see CRM module and CRM admin — operator guide):

  • Notes — browse/create/edit/delete notes (requires at least one filter before listing)
  • Tags — manage tag definitions and assignments
  • AuditLog — filtered audit registry (see above)
  • Addresses — user address management
  • CustomFields — field definitions and values
  • UserDetail — dossier with notes, tags, addresses, and related links