Actions and results
What each CRM button and automatic behaviour does, with worked numbers and what the system refuses.
On this page (35)
CRM dashboardLeadsLead / opportunity recordOpportunitiesActivitiesMy agendaOwnership tabAssignment rulesAssignment queueCoverage delegationsTerritory accessDuplicate reviewImport leadsCampaign responsesConnectorsProducts tabCompetitors tabTimeline & consentForecastQuotasCRM analyticsAccount plans progressPipeline by stageMonthly forecastLoss analysisPipeline stagesSales teamsPipelinesLead scoringQualification criteriaLoss reasonsTerritoriesActivity typesMastersCRM feature switches
CRM dashboard
| Action | When | What you do | What happens |
|---|---|---|---|
| Open the dashboard and read the tiles | A team with 2 won, 1 lost, 4 open opportunities of 10,000 AED each in the period; user holds dashboard.crm | 1. CRM > Dashboard (MTD). 2. Read Pipeline value, Win rate, Avg deal size, Activities due. | Pipeline value shows 40K (4 x 10,000, compact form); Win rate 66.7% with foot '2 won - 1 lost' (won / (won + lost)); Avg deal size 10K; counts only deals the user may see. |
| Filter by team, owner, source and period | Deals of two teams and two sources exist | 1. Pick Sales team = North. 2. Pick Owner = one rep. 3. Pick Source = Expo. 4. Change period to QTD, then YTD. | Every tile and panel recalculates for only that team, owner, source and the chosen dates; 'Showing from - to' dates under the period change; All teams / All salespersons / All sources reset it. |
| CRM alerts panel counts | Open records with: one overdue activity, one record without a team, one lead with no contact for 14+ days, one deal 31 days in one stage, one deal past its close date, two leads sharing an e-mail | 1. Open the dashboard. 2. Read the six alert rows. | Alerts show Overdue activities 1, Open records without a team 1, No contact > 14 days 1, Stale deals > 30 days in stage 1, Deals past close date 1, Possible duplicate leads counted. |
| Top opportunities list | More than 8 open opportunities | 1. Scroll to Top opportunities. | Shows the 8 largest by expected value ('Showing 8 of N') with owner, stage, close date, value, probability, source and next activity or 'No activity'. |
| Dashboard permission | User without dashboard.crm | 1. Open CRM as that user. | The Dashboard menu entry is hidden and the data request is refused with 'You do not have permission for this action.'. |
| Dashboard placeholder figures | Dashboard with sources and forecast panels | 1. Read Cost / lead, Campaign ROI and Quota cover. | All three show an em dash on every company: these are not built yet. |
Leads
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a lead | User with crm.manage on a team as representative; first stage does not need qualification | 1. CRM > Leads > New lead. 2. Enter Subject 'Villa fit-out', Contact 'Khalid', Email 'khalid@alnoor.example', Source 'Trade show'. 3. Save. | Record gets the next reference (CRM-00000n), kind Lead, status Open, owner = you, stage = first non-qualification stage, probability = that stage's default; an Episode 1 and a first stage-history row are created; a 'created' event is logged; Trade show is added to the Lead sources list. |
| Save is retry-safe | A new lead form open | 1. Fill a new lead and press Save twice quickly (or resend the same request key). | Only one lead is created; the second request returns the first one. The same key with changed details is refused: 'This request key was already used with different details.' |
| Subject is mandatory | New lead form | 1. Leave Subject blank. 2. Save. | Refused: 'Enter valid text (maximum 180 characters).' on Subject; nothing saved. |
| Owner must belong to the team | Team North has rep A and reader B | 1. New lead, Sales team North, Owner B. 2. Save. | Refused: 'The owner must be a representative or manager in this team.' Choosing A saves. |
| Same source id is captured once | Lead CRM-000010 has Source 'Expo' and external id 'EX-77' | 1. By API or import create another lead with Source 'Expo' and external_id 'EX-77'. | Refused with 409: 'Expo EX-77 is already CRM-000010.' (field external_id, code duplicate_external). A different source with the same id is allowed. |
| Territory follows the country and city | Territories: UAE (countries: United Arab Emirates) and Dubai (parent UAE, city Dubai); both valid today | 1. New lead, Country United Arab Emirates, City Dubai. 2. Save and open Ownership tab. | Territory shows the most specific match: Dubai (a city-specific or child territory beats its parent). With country Oman and no match the Territory shows 'None matched'. |
| Score is worked out on every save | Default scoring (email 10, phone 10, budget > 0 20, decision maker 15, need 15, close date 10, customer 20) | 1. Create a lead with email, phone, decision maker 'MD', need 'fit-out' and no budget or date. 2. Open Criteria & score. | Score = 10 + 10 + 15 + 15 = 50; the explanation lists all 7 rules with matched yes / no and the policy name 'DEFAULT v1'. Adding budget 100000 and a close date and saving makes it 80. |
| Duplicate candidates are raised on save | Customer 'Al Noor' has email khalid@alnoor.example; another open lead has phone 0501234567 | 1. Save a lead with that email and phone '+971 50 123 4567'. 2. Open Duplicate review. | Two open candidates appear (match email with the customer, match phone with the other lead; phone compared after removing non-digits and leading zeros). The record shows the yellow 'Potential duplicates - review before conversion' box. Nothing is merged. |
| Edit with the version check | Two users open the same lead | 1. User A edits the phone and saves. 2. User B (older copy) edits the email and saves. | B is refused: 'This record changed. Reload it before saving.' A's change stands. |
| A closed or archived record is not editable | A won deal | 1. Open it and try to Edit and Save. | Edit button is not offered; by API: 'Reopen and unarchive the record before editing.' |
| Do not contact blocks calls and e-mails | Lead with Do not contact on | 1. Schedule a call activity. 2. Schedule an internal task. | Call refused: 'This contact is marked Do not contact. Only internal tasks are allowed.' The task saves. |
| Tags and source join the masters | Tag 'VIP' does not exist yet | 1. Type tag VIP and source 'Referral' on a lead and save. 2. Open Configuration > Tags and Lead sources. | Both appear as new active entries (an archived entry of the same name is not re-activated). More than 20 tags refused: 'Use up to 20 tags.' |
| Export every permitted record | User sees 12 of 40 deals through team scope | 1. Press Export on Leads or Opportunities. | A CSV 'crm-records.csv' downloads with the 12 visible rows and every field the user may read (fields hidden by field security are absent). |
| Delete a lead | An untouched lead (never qualified, closed or merged), owner or manager | 1. Open the lead > Delete > confirm. 2. Or tick several rows and Delete. | Lead, its events, stage history, duplicates, activities and assignments are removed; the audit keeps 'crm.deleted' with the number. Bulk delete sends one request per record and lists the ones kept. |
| Delete is refused when history exists | (a) a lead that was qualified; (b) a record with a quotation; (c) a merged record; (d) a record you cannot change | 1. Try Delete on each. | (a)/(c): 'It has been qualified, closed or reopened; its history is kept. Archive it instead.' / merge text; (b) 'A quotation was raised from this record. Archive it instead.'; (d) 'Only the owner or a team manager can change this CRM record.' |
Lead / opportunity record
| Action | When | What you do | What happens |
|---|---|---|---|
| Qualify a lead | Open lead with need and expected close date filled, no required criteria open; pipeline has a stage 'Qualified' with Qualification required | 1. Open the lead > Qualify. 2. Confirm date and need > Save. | Kind becomes Opportunity, qualified date set, deal moves to the first active qualification-required stage of its pipeline (probability = that stage's default), a 'qualified' stage-history row and event are written, Convert / Qualify buttons are replaced by Mark won / Mark lost. |
| Qualify needs the need and the date | Lead with no need and no close date | 1. Press Qualify and Save with both blank. 2. Fill only the date and retry. | First: 'Record the customer need and the expected close date before qualification.' Then: 'Record the customer need before qualification.' Nothing changes. |
| Required qualification criteria block Qualify | Criteria 'Budget confirmed' (yes/no, required) and 'Site visited' (yes/no, required) active; lead answered only the first | 1. Criteria & score tab: tick Budget confirmed > Save answers. 2. Try Qualify. | Qualify refused: 'Answer the qualification criteria first: Site visited.' After ticking it, Qualify works. Answers raise the score through the scoring rules (qualification.<code>). |
| Convert to opportunity shortcut | Lead open | 1. Header action Convert to opportunity (or quick action Create opportunity). | Opens the same Qualify dialog; no separate conversion path exists. |
| Only open leads qualify | An opportunity, an archived lead, a lost lead | 1. Try the qualify action on each (API). | Refused: 'Only an open, unarchived lead can be qualified.' |
| Link an existing customer | Opportunity with no customer; active customer 'Al Noor' exists | 1. Link / create customer > Link an existing customer > pick Al Noor > Save. | Customer shows on the record and the Customer smart button; a customer that is archived or supplier-only is refused: 'Select an active customer.' |
| Create a new customer from the lead (administrator) | Admin user; lead has organization 'Al Noor Trading LLC' (business) and no matching contact | 1. Link / create customer > Create a new customer. 2. Edit name/e-mail/phone if needed > Save. | A customer contact is created (kind customer, market from the record, payment days 0) and linked. If a matching contact exists: 'Matching contacts already exist. Select the existing customer; review supplier or archived matches in Contacts.' A non-admin gets 'Administrator access required.' |
| Customer cannot change once quoted | Opportunity with a quotation | 1. Try to link a different customer or clear the customer. | Refused: 'A quoted opportunity cannot be moved to another customer.' |
| Mark an opportunity won | Open opportunity of 50,000 AED, 60%, active customer linked | 1. Mark won > enter reason 'Contract signed' > Save. | Status Won, closed date set, probability 100, loss reason cleared, the open episode closes with outcome won and final amount 50,000.00, event written. No invoice or revenue is posted by this action (a won deal is not recognised revenue). |
| Won needs a customer | Opportunity without a customer | 1. Mark won. | Refused: 'Link an active customer before marking the opportunity won.' |
| Mark an opportunity lost with a controlled reason | Active loss reasons of category lost: Price, No budget (needs a note) | 1. Mark lost, leave the reason list blank > Save. 2. Choose No budget, no note > Save. 3. Choose Price with a note > Save. | 1: 'Choose why it was lost.' 2: 'This reason needs a note.' 3: status Lost, probability 0, closure probability remembered (60), episode closed with outcome lost and the reason. |
| Disqualify a lead | Open lead; reasons of category disqualified or both | 1. Disqualify > choose Not a fit + reason text > Save. | Status Disqualified; leads are disqualified, opportunities are won or lost: 'Disqualify leads; mark qualified opportunities won or lost.' if the wrong one is used. |
| Closing a closed record | Won deal | 1. Try Mark lost on it (API). | Refused: 'Only an open, unarchived record can be closed.' |
| Reopen a closed record | Lost deal; user is team manager or admin | 1. Reopen > reason 'Customer came back' > Save. | Status Open, probability returns to the value it had at closure, archive flag cleared, episode number +1 with the reopen reason; the closed episode stays unchanged (history is never rewritten); stage-history row cause 'reopened'. |
| Only a manager reopens | Lost deal; user is a plain representative who owns it | 1. Reopen. | Refused: 'Only a team manager can reopen a closed record.'; reopening an open record: 'This record is already open.' |
| Archive and unarchive | Closed (won/lost/disqualified) deal | 1. Change archive status twice. 2. Try on an open deal. | Archived flag toggles (hidden column Archived shows Yes); open deal refused: 'Close the record before archiving it.' |
| Add a note | Any deal the user may change | 1. Add note > text > Save. | Event 'note' appears in the right-hand history and in Timeline; the record's version increases; blank note refused 'Enter valid text (maximum 8000 characters).' |
| Create a quotation from an opportunity | Open opportunity with active customer; Sales module installed | 1. Create quotation > date today, Valid until 31 Oct > Save. 2. Open Quotations tab. | A draft Sales quotation is created for that customer with the note 'CRM CRM-00000n: <subject>' and linked; the tab shows its number, state, date, total, versions and whether it became an order. The deal's version increases and 'quotation' is logged. |
| Quotation requests are retry-safe | Same request key sent twice | 1. Send the quotation request again with the same key and details. 2. Send again with a different date. | Same quotation returned, none duplicated; with changed details: 409 'This quotation request key was already used with different details.' |
| Quote from products of interest | Product lines: 4 x Product A (indicative 1,250) and 2 x Product B (indicative 3,000); Sales price list says A = 1,100 | 1. Products tab > Create quotation from products. 2. Open the quotation lines. | Lines carry product and quantity only (4 and 2); prices come from the Sales price list (A at 1,100), not the indicative 1,250. With no product lines: 'Add a product of interest with a product before quoting from them.' |
| A quotation needs an open opportunity with a customer | A lead, or an opportunity with no customer | 1. Request a quotation. | Refused: 'Create quotations from an open opportunity linked to an active customer.' |
| Quotation-to-order status shows on the deal | Quotation confirmed in Sales | 1. Confirm the quotation in Sales. 2. Reopen the deal's Quotations tab. | Column shows 'Sales order', delivery and billing state, version list; is_order true. CRM never creates the order itself. |
| Stage history and episodes | Deal moved New -> Qualified -> Proposal, lost, then reopened and won | 1. Open the Stage history tab. | One row per stay with entered / left, days, probability then and the stage default then, criteria version of the rules passed; two episodes (1: lost with reason, 2: won with amount). Changing a stage's default probability later changes none of these rows. |
| Timeline is read-only and complete | Deal with notes, a stage move, an assignment, an activity, a response and a consent change | 1. Open Timeline & consent. | One list, newest first, merging events, stage entries, assignments, activities, campaign responses and consent changes; nothing is editable. |
| Print and quick actions | Open record | 1. Press Print; use Schedule activity, Log call and Send email quick actions. | Print shows the record; Log call / Send email open the activity form (nothing is sent: 'Activities are reminders; no emails or calls are sent automatically.'). |
Opportunities
| Action | When | What you do | What happens |
|---|---|---|---|
| Drag a card to another stage | Board view, opportunity in New (probability 10%); Proposal stage default 60% | 1. Drag the card from New to Proposal. | The same save as the form is sent with the version number: stage changes, probability becomes 60, days-in-stage resets, stage history gets a 'moved' row with the previous stay closed and its duration; a card you may not change or a stage the rules refuse returns the server message and the card snaps back. |
| Stage entry criteria block a move | Stage Proposal requires Budget and Customer need; deal has no budget | 1. Drag/choose Proposal. | Refused: 'Proposal needs: Budget, Customer need.' (code stage_entry_blocked); the same message from the form and from the API. |
| Allowed next stages | Stage New may move only to Qualified | 1. Try moving a New deal straight to Negotiation. | Refused: 'From New a deal may move only to Qualified.' (code stage_not_allowed). A stage of another pipeline: 'That stage belongs to another pipeline.' |
| A lead cannot enter a qualification stage | Stage Proposal has Qualification required; record is a lead | 1. Edit the lead's Stage to Proposal. | Refused: 'Qualify the lead before entering this stage.' and the Stage list on a lead hides such stages. |
| Next stage button and last stage | Card in the second-last and the last active stage | 1. Press 'Next stage' on each. | Moves one stage along the active stages (that a lead may enter); on the last: 'This is the last stage.' |
| New opportunity from a lane | Board | 1. Press + on the Proposal lane. | New record form opens with that stage preselected; saving needs an expected close date for an opportunity. |
| Pivot view | Deals of several teams | 1. Look = Pivot; rows Stage, columns Status, measures Expected value and Deals; set From / To on Expected close. | Totals equal the list for the same filters and only include deals the user may see; up to 6 measures allowed. |
Activities
| Action | When | What you do | What happens |
|---|---|---|---|
| Schedule an activity with a due time | Open deal; activity type 'Call' (reminder 30, escalate after 24 h); company zone Asia/Dubai (UTC+4) | 1. Record > Schedule activity > Subject 'Follow-up call', Type Call, Due date 2026-10-05, time 14:30 > Save. | Saved as planned; due instant is 10:30 UTC; reminder at 10:00 UTC (30 min before); escalation at 10:30 UTC on 6 Oct (24 h after); list shows due 2026-10-05 14:30 Asia/Dubai. The assignee is you unless chosen. |
| Mark an activity done with a required outcome | Type has Outcome required and codes INTERESTED, NOT_NOW | 1. Open the activity > Action Mark done > no outcome > Save. 2. Choose INTERESTED > Save. | 1: 'Choose the outcome of this activity.' 2: status Done, completed time set, outcome saved; a done activity can no longer be edited ('A completed or cancelled task cannot be changed. Schedule a follow-up.'). |
| Follow-up created when completing | Open activity | 1. Mark done with Follow-up 'Send contract' due 2026-10-10 10:00. | A second activity is created on the same deal, linked to the first (follow_up_of), with a request key derived from the first so a retry makes no second one. Without a subject or on Cancel: 'A follow-up needs a subject, and follows a completed activity.' |
| Cancel an activity | Open activity | 1. Action Cancel activity > outcome text > Save. | Status Cancelled, no outcome code needed; dropped from My agenda and overdue counts. |
| Activities need an open record | Closed or archived deal | 1. Try Schedule activity. | Refused: 'Schedule activities on open, unarchived records.' |
| A representative closes their own task without edit rights | Rep A is assigned a task on a deal owned by rep B | 1. As A mark the task done. 2. As A try to reschedule it. | Done works (own completion); rescheduling is refused: 'Only the owner or a team manager can change this CRM record.' |
| Reminder and escalation sweep | Activity due 10:30 UTC, reminder 10:00, escalate 24 h; team leader or manager exists | 1. Run the sweep after 10:00 UTC (job 'crm.activity_sweep', or POST activities/sweep as crm.configure). 2. Run it again after 10:30 UTC the next day. 3. Run it once more. | First run marks it reminded and logs 'activity.reminder' on the deal; second marks it escalated to the team leader (or first manager other than the assignee) and logs 'activity.escalated'; the third changes nothing (each clock fires once). Nothing is pushed to the notification bell. Rescheduling resets both clocks. |
| Apply a task sequence | Sequence 'Onboarding' with steps offsets 0, 2, 7 days at 09:00; company today 2026-10-05 | 1. Ownership tab > pick the sequence > Schedule its steps. 2. Press it again with the same key. | Three activities are created for 5, 7 and 12 Oct at 09:00 Dubai, assigned to the deal owner, numbered 1-3; a repeat with the same key adds none. |
| Consent blocks purpose-bound contact | Activity type with consent purpose 'newsletter'; contact opted out in the Marketing register | 1. Schedule an e-mail activity of that type. | Refused: '<contact> may not be contacted by email for newsletter: <reason>.' (code consent_blocked). With no register installed it is refused too; a type with no purpose, or 'transactional' / 'support', is allowed; meetings and tasks need no consent. |
| Activities list and overdue flag | Planned activity due yesterday | 1. Open CRM > Activities. | Due date is red (overdue); Status Planned; hidden column Overdue = yes; Outcome empty. |
My agenda
| Action | When | What you do | What happens |
|---|---|---|---|
| My agenda ordering and escalations | Rep has 3 open activities and 1 escalated to them | 1. Open CRM > My agenda. | Escalated to me lists the escalated one; My open activities lists mine soonest first (by due instant, else due date end of day); overdue due dates show red; a row opens the deal's Activities tab. Only deals in the user's scope appear. |
Ownership tab
| Action | When | What you do | What happens |
|---|---|---|---|
| Manual reassignment | Manager of team North; deal owned by rep A | 1. Ownership > New owner rep B, Reason 'A on leave' > Reassign. | Owner and team change; an assignment row (method manual, from/to owner and team, reason) and a 'assigned' event are written; assignment state 'Assigned'. Same owner and team: 'The record already belongs there.' |
| Only managers reassign | Rep who owns the deal | 1. Open Ownership tab; try to reassign by API. | The form is replaced by 'A manager of the team reassigns records.'; server: 'Only a manager of the team (or an administrator) can reassign this record.' Moving to another team needs manager rights in both. |
| Reassignment retry does nothing | Same request key | 1. Send the assignment twice with one key. | Second call returns the deal unchanged; one history row. |
Assignment rules
| Action | When | What you do | What happens |
|---|---|---|---|
| Round robin placement on import | Rule 'NORTH' round robin for team North, members ids 5, 6, 7 (reps), last placed user = 5, no capacity limit | 1. Import 3 leads without choosing a team. | Leads go to 6, 7, then 5 (next higher id, wrapping); each gets an assignment row 'By a rule' with the rule code and the rule remembers the last person. |
| Least loaded placement | Open deals: person 5 has 3, person 6 has 1, person 7 has 2; method least loaded | 1. Import one lead. | Placed on person 6 (fewest open deals; ties by lowest id). |
| Capacity limit and the queue | Rule capacity 2; every member already holds 2 open deals; no other rule matches | 1. Import a lead. 2. Open CRM > Leads > Assignment queue. | The lead is not given to anyone; it waits in the queue (assignment state queued) with source and territory shown. Rule order is by Priority number (lowest first); rules outside Valid from / to, with other sources, markets or territory are skipped. |
Assignment queue
| Action | When | What you do | What happens |
|---|---|---|---|
| Run assignment rules again | Queued lead; capacity freed in the team; user manages that team | 1. Press Run assignment rules. | Message '1 placed, 0 still waiting.'; deals of teams the user does not manage are skipped; audit 'crm.assignment.run' written. |
Coverage delegations
| Action | When | What you do | What happens |
|---|---|---|---|
| Cover works for its dates only | Delegation: rep A away, rep B covers, team North, 5-12 Oct | 1. On 6 Oct, as B edit a deal owned by A. 2. On 13 Oct try again. | 6 Oct: allowed (B acts as the owner); 13 Oct: 'Only the owner or a team manager can change this CRM record.' Cover ends by itself; switched off delegations do nothing. |
Territory access
| Action | When | What you do | What happens |
|---|---|---|---|
| A territory-limited person sees only their territories | Reseller user limited to Dubai territory (child of UAE); deals in Dubai, Abu Dhabi and none | 1. Sign in as that user and open Leads, a record by number, Activities and the dashboard. | Only Dubai (and child territory) deals appear everywhere, including by direct reference ('Record not found.' for others); creating a deal outside gives 'This record falls outside the territories you work.'; admins and users with no territory rows are not limited. |
Duplicate review
| Action | When | What you do | What happens |
|---|---|---|---|
| Dismiss a candidate | Open candidate | 1. Press Not the same and give a reason. | State dismissed with note, reviewer and time; the candidate leaves the Open tab and shows under dismissed; an event 'duplicate.dismissed' is logged on the lead. |
| Link the lead to the matching customer | Open candidate with a customer match | 1. Press Link to customer. | The lead is linked to that customer (no new party), candidate state linked, other open customer candidates of that lead are dismissed with 'Linked to another customer'. |
| Only customer matches can be linked | Candidate whose match is another lead | 1. (API) resolve with action link. | Refused: 'Only a customer match can be linked. Merge duplicate leads from the lead itself.' Resolving twice: 'This candidate was already linked.'; a bad action: 'Dismiss it or link it.' |
Import leads
| Action | When | What you do | What happens |
|---|---|---|---|
| Import a file with good, repeated and bad rows | File of 5 rows: 3 valid, 1 repeating an existing source + external id, 1 with no name or contact; default source 'Expo 2026' | 1. CRM > Leads > Import leads > type default source > Import a file. 2. Open the new log line. | Log shows Rows 5, Created 3, Duplicates 1, Rejected 1; per row: created with CRM number, duplicate 'Expo EX-77 is already CRM-00000n.' (and a duplicate-review candidate), rejected 'Needs a name and a way to reach them.' Created leads sit in the first non-qualification stage, owner = importer, market business, source from the row or default. |
| Same file twice | File already imported once with external ids | 1. Import the same file again. | Created 0, Duplicates = every row that had an external id; no second lead per id. |
| Import limits and format | Empty file, a 5,001-row file, an unknown-header file, an 11 MB file | 1. Try each. | 'The file is empty.'; 'Import at most 5000 rows at a time.'; 'No known columns. Use headers such as title, organization, contact, email, phone, source, external_id.'; 'Import files may be at most 10 MB.' Excel (.xlsx) reads the first sheet. |
| Imported leads are placed by rules | At least one active assignment rule; no team chosen | 1. Import leads. | Each lead is placed by the rules or queued; with no active rule the importer owns them. Hand-made leads are not run through the rules. |
Campaign responses
| Action | When | What you do | What happens |
|---|---|---|---|
| Responses are recorded once per source id | Campaign 'GITEX'; feed sends 3 responses, one id repeated | 1. Post the responses (API; feeds do this). 2. Post the same batch again. | First: added 3 (or 2 with one repeated id counted as repeated); second: added 0, repeated 3. A response with neither e-mail nor phone: 'Response 1 needs an e-mail or a phone number.' Batches over 1,000 refused: 'Send from 1 to 1000 responses.' |
| Hand a response off to sales | New response with e-mail khalid@alnoor.example; an open lead has that e-mail | 1. CRM > Leads > Campaign responses > Hand off to sales. | The response is linked to the existing lead (state handed_off). With no match a new lead is captured, attributed to the campaign (source 'Campaign'), first non-qualification stage, owner = you. |
| A response never implies consent | Lead captured from a click | 1. Open Timeline & consent of that lead. 2. Try to schedule a marketing e-mail activity. | Consent column says nothing is recorded; the marketing activity is refused until consent with evidence is recorded in the register. |
| Ignore a response | New response | 1. Press Ignore. | State ignored; handling an already dealt response: 'This response was already dealt with.' |
Connectors
| Action | When | What you do | What happens |
|---|---|---|---|
| Authorise a connector and see its key once | User with crm.configure | 1. Connectors > Code MAIL, Name 'Sales mailbox', Source E-mail > Authorise connector. | Connector listed On with authoriser and time; a card shows 'POST /api/v1/crm-hooks/<key>' once ('Copy this key now - it is not shown again'); only a SHA-256 of the key is stored. |
| An inbound event is logged on the matching deal | Connector MAIL; open deal with e-mail khalid@alnoor.example | 1. POST the hook with event_id 'e1', type email, occurred_at, participants ['khalid@alnoor.example'], subject 'Quote question'. 2. Open the deal Communication tab. | Answer status logged; one completed activity (kind email, outcome 'Logged from Sales mailbox (in)') is added to the deal and shows on Communication and in the timeline; sending the same event_id again answers 'duplicate' and writes nothing. |
| An unmatched event waits for a person | Event from an address no open deal has | 1. Post the event. 2. Communications > Not matched > Link to a record > CRM-000012. | Event shows under Not matched; linking creates the completed activity on that record; linking a record already linked: 'This communication is already on a record.' |
| Switch off and rotate | Active connector | 1. Switch off, post an event. 2. Switch on, press New key, post with the old key. | Off: hook answers 401 'Unknown or switched-off connector.'; New key shows a new key once and the old key stops working; switching on records the person as authoriser again. |
| Connector event validation | Active calendar connector | 1. Post without event_id, with type email, with a 2-day duration. | 'Send the source's event id.'; 'A calendar connector sends meeting events.'; 'Duration is whole seconds up to a day.' |
Products tab
| Action | When | What you do | What happens |
|---|---|---|---|
| Product lines drive expected value and margin | Opportunity with no product lines | 1. Add 4 x Product A, indicative price 1,250, unit cost 800. 2. Add 2 x Product B, price 3,000, cost 2,000. | Line amounts 5,000 and 6,000; Expected value becomes 11,000.00 (replaces the typed value), Expected cost 7,200.00, Margin 3,800.00 = 34.55%. Removing line B gives 5,000 / 3,200 / 1,800 = 36%. The card says it is worked out from the product lines. |
| Product line rules | Products tab | 1. Add a line with quantity 0. 2. Add a line with no product and no description. | 'Enter a quantity above zero.' and 'Choose a product or describe what they want.'; lines on a closed deal: 'Reopen and unarchive the record before changing it.' |
Competitors tab
| Action | When | What you do | What happens |
|---|---|---|---|
| Record a competitor once and the buying roles | Competitors master has 'Rival Interiors' | 1. Add the competitor (price Cheaper than us, outcome Still competing). 2. Add it again. 3. Add a buying role Fatima / Economic buyer / High / Supporter. | Second add: 'This competitor is already on the deal.'; role row appears; each change raises the deal version and logs an event. |
Timeline & consent
| Action | When | What you do | What happens |
|---|---|---|---|
| Merge two records | Survivor CRM-1 and source CRM-2, both open, different phones, same customer; both revisions current | 1. Merge panel: reference CRM-2 > Compare. 2. Keep this record's for all but Keep the other for Phone. 3. Merge with a reason. | Survivor takes the other's phone; activities, products, competitors, buying roles, quotations, responses and duplicate reviews move to it (a competitor on both stays once); CRM-2 becomes status merged, archived, pointing at CRM-1; lineage (choices, before-images, moved counts) is stored; both records get a merge event; nothing is deleted. |
| Stale merge is refused | Someone edited CRM-2 after you loaded it | 1. Merge using the old revision. | 409: 'CRM-2 changed since you opened it. Reload both and merge again.' Neither record changes. Different customers with no choice: 'The two records name different customers; choose which one the merged record keeps.' |
| Record consent from CRM | Marketing register installed; contact has e-mail | 1. Consent panel > channel email, purpose newsletter, status Opted in, no evidence > Save. 2. Add evidence 'Signed form' > Save. | 1: 'Say where the consent came from - a form, a signed paper, a recorded call.' 2: row appears with source 'CRM CRM-00000n' and an event history. With no register: 'No consent register is installed (Marketing).' |
Forecast
| Action | When | What you do | What happens |
|---|---|---|---|
| Open pipeline arithmetic | Period 2026-10: deal A 1,000 at 25% (pipeline), deal B 500 at 50% (commit), deal C 200 omitted; all open and closing in October | 1. CRM > Reporting > Forecast, period 2026-10. | Gross open pipeline 1,700.00; Weighted 500.00 (250 + 250; omitted left out); Commit category 500.00; range 2026-10-01 to 2026-10-31. Periods: 2026-Q4 = Oct-Dec, 2026 = whole year; bad text: 'Use a period such as 2026-10, 2026-Q4 or 2026.' |
| Submit and re-submit a forecast | Rep A with the pipeline above | 1. Submit my forecast with commit blank and notes. 2. Change a deal and submit again. | v1 locked with the deals, probabilities and exchange rate (1); commit = 500 when left blank; the second submission is v2 and v1 becomes Superseded; submissions are never edited; the same request key twice returns the first. |
| Manager adjustment | Manager M (team North) and rep A's current submission with commit 500 | 1. As M open the submission > Adjustment -100, reason 'Deal C at risk' > Add manager adjustment. | Adjustment listed with manager, time and reason; the submitted figure stays 500.00, adjustment -100.00, Total 400.00. Zero: 'An adjustment changes the figure; enter a positive or negative amount.' A superseded version: 'Adjust the latest version; this one was superseded.' |
| Nobody adjusts their own forecast | Manager submits their own forecast | 1. Try to adjust it. | Refused: 'A manager other than the person who submitted it adjusts a forecast.'; a non-manager: 'Only a manager of the team (or an administrator) adjusts this forecast.' |
| Quota attainment | Approved quota 500,000 for rep A, 2026-Q4; A won 125,000 in that quarter; A's latest commit 300,000 | 1. Forecast page, period 2026-Q4, read Quotas. | Target 500,000.00, Won 125,000.00, Attainment 25%, Committed 300,000.00. Draft quotas are not listed; 'No approved quota for this period.' otherwise. |
Quotas
| Action | When | What you do | What happens |
|---|---|---|---|
| Quota approval by a second person | Quota Q4-NORTH, 500,000 AED for 2026-Q4 created by user X | 1. As X approve (API: POST quotas/{id}/approve). 2. As Y approve. 3. Edit the amount and look at the state. | X refused: 'Somebody other than the person who set the quota approves it.'; Y: state approved; an approved already: 'This quota is already approved.'; changing the amount puts it back to draft and raises the version. No Approve button exists in the screen. |
CRM analytics
| Action | When | What you do | What happens |
|---|---|---|---|
| Closed-cohort win rate | In the period: 2 won, 1 lost, 4 open, 3 disqualified | 1. CRM > Reporting > CRM analytics for the period. | Win rate = 2 / (2 + 1) = 66.67%; the basis line says disqualified and open deals are not in the denominator and a reopened deal counts once per closed episode. Won / lost values are the final amounts of those episodes. |
| Sales cycle, conversion and aging | Won deal created 1 Oct and won 21 Oct; 10 leads captured, 4 qualified; stage with expected days 14 holds a deal for 20 days | 1. Read Sales cycle, Conversion and Stage aging. | Cycle 20.0 days; qualification rate 40%; aging shows the stage with average / oldest days and 'over' count 1. Attribution (first touch) counts captured and won by source and campaign. End before start: 'The end is before the start.' |
| Channel partner share | Won deal 80,000 AED naming reseller R at 15% | 1. Open the Channel partners section. | R: won 1, won value 80,000.00, share 12,000.00 (80,000 x 15%); open deals add to open value. |
Account plans progress
| Action | When | What you do | What happens |
|---|---|---|---|
| Account plan progress | Plan for customer X, 2026, target 1,000,000, goals: 1 done of 3; X won 250,000 in the year, 2 open deals worth 90,000 | 1. CRM > Reporting > Account plans. | Attainment 25%, won 250,000, open deals 2 / 90,000, goals done 1 / 3. Draft and closed plans are not shown. |
Pipeline by stage
| Action | When | What you do | What happens |
|---|---|---|---|
| Stage report | Open opportunities: New 2 x 10,000 at 10%, Proposal 1 x 30,000 at 60%; one omitted | 1. Reporting > Pipeline by stage > Run report with no dates. | New: 2 opportunities, expected 20,000.00, weighted 2,000.00 (omitted deals are left out of weighted only); Proposal 1, 30,000.00, 18,000.00. Archived deals are not counted. Start after end: 'Report end date must not precede start date.' |
Monthly forecast
| Action | When | What you do | What happens |
|---|---|---|---|
| Monthly forecast report | Open opportunities closing Oct (value 40,000, weighted 14,000, commit 20,000) and Nov | 1. Reporting > Monthly forecast. | One row per expected-close month with count, expected, weighted and commit value; omitted deals excluded. |
Loss analysis
| Action | When | What you do | What happens |
|---|---|---|---|
| Loss analysis report | Three lost deals: two with reason text 'Price' (10,000 and 5,000), one 'No budget' | 1. Reporting > Loss analysis. | Price: 2 deals, 15,000.00; No budget: 1. Grouped on the reason text written at closing. |
Pipeline stages
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a stage with entry criteria and allowed moves | Admin; pipeline MAIN has stages New, Qualified | 1. Configuration > Pipeline stages > New stage 'Site survey', sequence 25, probability 30, expected days 14. 2. Tick Budget as entry criterion, May move to Qualified. 3. Save. | Stage appears in sequence order; the pipeline's criteria version is bumped when criteria or allowed moves of an existing stage change; deals entering later record that version. |
| Archive a stage with open deals | Stage holds an open deal | 1. Untick Active and Save. | Refused: 'Move open records to another stage before archiving this stage.' A stage with deals cannot be moved to another pipeline either. |
| Initialize CRM for a new company | Company with no stages; admin opens CRM | 1. Press Initialize CRM. | Four default stages are created in the default pipeline MAIN: New 10%, Qualified 30%, Proposal 60%, Negotiation 80% (all but New require qualification), plus the default loss reasons (Price, Lost to a competitor, No budget, No response, No decision, Not a fit, Invalid or spam). |
Sales teams
| Action | When | What you do | What happens |
|---|---|---|---|
| Team membership is record scope | Rep A is on team North and sees its deals | 1. Admin removes A from North and saves. 2. A reloads their list in the same session. | A loses access to North's deals at once (permission version bumped), without signing out. A deal's visibility for non-admins follows active-team membership; a Read only member sees but cannot change. |
Pipelines
| Action | When | What you do | What happens |
|---|---|---|---|
| Only one default pipeline | Pipelines MAIN (default) and PARTNER | 1. Open PARTNER > tick Default > Save. | PARTNER is default and MAIN's flag is cleared; deals created without naming a pipeline use the default. |
Lead scoring
| Action | When | What you do | What happens |
|---|---|---|---|
| Edit scoring rules and re-score | Policy with rule 'budget gt 0 = 20 points' | 1. Open Lead scoring > edit the JSON to give 30 points > Save. 2. Re-score (API: POST scoring/rescore). | Policy version goes up (2); existing deals keep their old score until re-scored or next saved; re-score updates every open deal and answers the count. Points outside -1000..1000: 'Rule 1: points must be a whole number from -1000 to 1000.' |
Qualification criteria
| Action | When | What you do | What happens |
|---|---|---|---|
| Edit a criterion creates a new version | Criterion 'Budget confirmed' v1 | 1. Change Data type or Required to qualify and save. 2. Change only the Arabic name. | Version becomes 2 for the first; the second leaves it at 1 (only meaning-changing fields are versioned). Deals show 'v2' in Criteria & score. |
Loss reasons
| Action | When | What you do | What happens |
|---|---|---|---|
| Reasons are archived, not deleted | Reason 'Price' used by a closed deal | 1. Open Price > untick Active > Save. | Archived reason is no longer offered in the close dialog but the closed deal keeps its label. |
Territories
| Action | When | What you do | What happens |
|---|---|---|---|
| Most specific territory wins | Territories UAE (country only), Dubai (city Dubai, child of UAE), Sharjah (city Sharjah) | 1. Create leads: UAE/Dubai, UAE/Ajman, UAE/Sharjah. | Territories: Dubai, UAE, Sharjah. A territory outside its Valid from / to dates is ignored; a loop in Parent: 'A territory cannot sit inside itself.' |
Activity types
| Action | When | What you do | What happens |
|---|---|---|---|
| Activity type defaults flow to the activity | Type 'Site visit': channel meeting, 60 min, reminder 120, escalate 48 h | 1. Schedule an activity choosing that type with a due time 09:00 and no other values. | Channel meeting, duration 60, remind_at 07:00 local on the same day, escalate_at due + 48 h; values typed on the activity override the type. |
Masters
| Action | When | What you do | What happens |
|---|---|---|---|
| Archive instead of delete and no code change | Any master with records | 1. Open a record; code box is read-only. 2. Untick Active. | Code cannot change; the record shows Archived and stays in history. There is no Delete on masters. |
CRM feature switches
| Action | When | What you do | What happens |
|---|---|---|---|
| Turn a feature off | Admin (company.manage); Lead imports on | 1. Apps > CRM > Features > turn off Lead imports. 2. Open CRM > Leads. 3. Try to import by API. | Import leads menu entry disappears; the import request is refused with capability_disabled; the existing import logs stay readable. The same applies to Forecast and quotas, Lead scoring, Campaigns and responses, and Duplicate review. |