From c5383718a362f043f30893f0400a08820bac7624 Mon Sep 17 00:00:00 2001 From: James Maes Date: Wed, 14 Oct 2026 20:27:08 -0500 Subject: [PATCH] feat(help): ship the qbit-crm help bundle through QQQ help bundles, with coverage gate Host-neutral help (deployment-specific facts removed), registered with HelpBundles, gated by HelpBundleAssertions. QQQ 4.1.0-RC.7. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 2 + README.md | 18 + pom.xml | 4 +- .../kingsrook/qbits/crm/CrmQBitProducer.java | 5 +- .../qbits/crm/help/CrmHelpBundleStandIn.java | 135 - src/main/resources/help/qbit-crm.yaml | 3596 ++++++++++------- .../qbits/crm/CrmPublicationHelpTest.java | 64 +- .../qbits/crm/CrmTablesGuardrailTest.java | 30 +- 8 files changed, 2191 insertions(+), 1663 deletions(-) delete mode 100644 src/main/java/com/kingsrook/qbits/crm/help/CrmHelpBundleStandIn.java diff --git a/CHANGELOG.md b/CHANGELOG.md index cb2c1ce..57c34c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased / 0.2.0 +- Adopt QQQ 4.1.0-RC.7 native help bundles, replacing the RC.6 stand-in loader with host-neutral CRM help, live references and the core coverage gate. + - Upgrade to Java 21, QQQ 4.1.0-RC.6 and qbit-build-parent 2.1.2. - Add Maven wrapper, CI configuration, architecture guardrails and coverage gates. - Rename tables, joins, widgets and CRM processes to `crm_` snake_case, with inferred snake_case SQL columns. diff --git a/README.md b/README.md index 380fa16..6c272b1 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,24 @@ Later phases complete the following behavior: The later intake APIs, public subscription routes, collaboration integration, real email transport, durable jobs and the remaining P2 security/integration work are not part of this phase. +## In-app help + +CRM registers [help/qbit-crm.yaml](src/main/resources/help/qbit-crm.yaml) from +`CrmQBitProducer`. The bundle uses the `QBIT` layer and the current artifact version. +Registration only adds metadata and works without a `helpContent` table; QQQ's +startup sync skips hosts without that table. Hosts with help storage load help +and call `HelpBundles.syncOnStartup(qInstance)` after defining their metadata. + +To customize wording or describe your deployment, register a separate `HOST` +bundle with the same entry keys (and roles). HOST text takes precedence over QBIT +text; the sync preserves user edits for review. Keep live `{{...}}` references +when referring to labels, defaults or enum values. + +`CrmPublicationHelpTest` runs `HelpBundleAssertions` against the produced and +validated CRM instance, including generated record actions, and also requires +widget and possible-value help. `CrmTablesGuardrailTest` checks every table's +row-creation guidance. Run both through `./mvnw -q verify`. + ## Source layout `CrmQBitProducer` discovers entity, process and widget producers. `core/` holds contacts, companies, forms, lists and consent; `deals/`, `activities/`, `email/` and `scoring/` hold their respective metadata and behavior. `actions/` defines the streamed record actions and their inputs/summaries. `security/` defines permissions, `sync/` holds external mappings and currency utilities, and `widgets/` contains widget producers/renderers. SQL is shipped under `src/main/resources/db/liquibase/qbit-crm/`. diff --git a/pom.xml b/pom.xml index a65cf4e..9f3d9b6 100644 --- a/pom.xml +++ b/pom.xml @@ -204,14 +204,14 @@ - + qqq-snapshot true - 4.1.0-RC.6 + 4.1.0-RC.7 diff --git a/src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java b/src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java index 8e7e223..cae9b61 100644 --- a/src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java +++ b/src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java @@ -43,7 +43,6 @@ import com.kingsrook.qbits.crm.deals.customizers.DealStageChangeCustomizer; import com.kingsrook.qbits.crm.deals.model.Deal; import com.kingsrook.qbits.crm.deals.model.DealProduct; import com.kingsrook.qbits.crm.email.CrmEmailProcessIdentity; -import com.kingsrook.qbits.crm.help.CrmHelpBundleStandIn; import com.kingsrook.qbits.crm.scoring.AutoAssignCustomizer; import com.kingsrook.qbits.crm.security.CrmDataPolicy; import com.kingsrook.qbits.crm.security.CrmPermissions; @@ -66,6 +65,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.collaboration.RecordFeature import com.kingsrook.qqq.backend.core.model.metadata.collaboration.RecordFeaturesMetaData; import com.kingsrook.qqq.backend.core.model.metadata.collaboration.RecordOwnership; import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.help.bundles.HelpBundles; import com.kingsrook.qqq.backend.core.model.metadata.joins.QJoinMetaData; import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppSection; import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon; @@ -384,7 +384,8 @@ public class CrmQBitProducer implements QBitMetaDataProducer } qInstance.withProcessLifecycleListener(new QCodeReference(CrmEmailProcessIdentity.class)); registerHooks(qInstance); - CrmHelpBundleStandIn.apply(output); + // Registration is metadata-only; core startup sync guards hosts without helpContent. + HelpBundles.register(qInstance, "help/qbit-crm.yaml"); return (output); } diff --git a/src/main/java/com/kingsrook/qbits/crm/help/CrmHelpBundleStandIn.java b/src/main/java/com/kingsrook/qbits/crm/help/CrmHelpBundleStandIn.java deleted file mode 100644 index d3dc425..0000000 --- a/src/main/java/com/kingsrook/qbits/crm/help/CrmHelpBundleStandIn.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * QQQ - Low-code Application Framework for Engineers. - * Copyright (C) 2021-2026. Kingsrook, LLC - * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States - * contact@kingsrook.com - * https://github.com/Kingsrook/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.kingsrook.qbits.crm.help; - - -import java.io.IOException; -import java.io.InputStream; -import java.util.LinkedHashMap; -import java.util.Map; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import com.kingsrook.qqq.backend.core.exceptions.QException; -import com.kingsrook.qqq.backend.core.model.metadata.MetaDataProducerMultiOutput; -import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpContent; -import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppMetaData; -import com.kingsrook.qqq.backend.core.model.metadata.processes.QFrontendStepMetaData; -import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; -import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; - - -/******************************************************************************* - ** STAND-IN(core=QRun-IO/qqq#1198, removeBy=4.1.0-RC.9) - ** Load the future bundle format with core's Jackson YAML parser. RC.6 lacks - ** process/PVS help slots: action content is applied to frontend steps instead; - ** enum entries remain in the bundle for the central loader. - *******************************************************************************/ -public final class CrmHelpBundleStandIn -{ - /******************************************************************************* - ** Utility class. - *******************************************************************************/ - private CrmHelpBundleStandIn() - { - } - - - /******************************************************************************* - ** Validate the resource eagerly so malformed shipped help fails production. - *******************************************************************************/ - public static Map entries() throws QException - { - try(InputStream stream = CrmHelpBundleStandIn.class.getResourceAsStream("/help/qbit-crm.yaml")) - { - JsonNode bundle = new ObjectMapper(new YAMLFactory()).readTree(stream); - if(!"qbit-crm".equals(bundle.path("bundle").asText()) || bundle.path("version").asInt() != 1 - || !"QBIT".equals(bundle.path("layer").asText())) - { - throw (new IOException("Invalid CRM bundle header")); - } - Map entries = new LinkedHashMap<>(); - for(JsonNode entry : bundle.path("entries")) - { - String key = entry.path("key").asText(); - if(key.isBlank() || entry.path("summary").asText().isBlank() || entry.path("summary").asText().length() > 120 - || entry.path("content").asText().isBlank() || entries.put(key, entry) != null) - { - throw (new IOException("Invalid or duplicate help entry: " + key)); - } - } - return (entries); - } - catch(IOException | IllegalArgumentException e) - { - throw (new QException("Could not load help/qbit-crm.yaml", e)); - } - } - - - /******************************************************************************* - ** Apply help to the objects produced by this QBit only. - *******************************************************************************/ - public static void apply(MetaDataProducerMultiOutput output) throws QException - { - Map entries = entries(); - for(QTableMetaData table : output.getEach(QTableMetaData.class)) - { - table.withHelpContent("help", content(entries, "table:" + table.getName() + ";slot:help")); - for(var field : table.getFields().values()) - { - String key = "table:" + table.getName() + ";field:" + field.getName(); - if(entries.containsKey(key)) - { - field.withHelpContent(content(entries, key)); - } - } - } - for(QProcessMetaData process : output.getEach(QProcessMetaData.class)) - { - QHelpContent help = content(entries, "process:" + process.getName() + ";slot:help"); - for(var step : process.getStepList()) - { - if(step instanceof QFrontendStepMetaData frontend) - { - frontend.withHelpContent(help.clone()); - } - } - } - for(QAppMetaData app : output.getEach(QAppMetaData.class)) - { - app.withHelpContent("help", content(entries, "app:" + app.getName() + ";slot:help")); - } - } - - - /******************************************************************************* - ** RC.6 has no summary property, so retain the summary in the bundle only. - *******************************************************************************/ - private static QHelpContent content(Map entries, String key) throws QException - { - if(!entries.containsKey(key)) - { - throw (new QException("Missing CRM help entry: " + key)); - } - return (new QHelpContent().withContentAsMarkdown(entries.get(key).get("content").asText())); - } -} diff --git a/src/main/resources/help/qbit-crm.yaml b/src/main/resources/help/qbit-crm.yaml index 8bd41b4..a1252d7 100644 --- a/src/main/resources/help/qbit-crm.yaml +++ b/src/main/resources/help/qbit-crm.yaml @@ -1,1636 +1,2292 @@ bundle: qbit-crm -version: 1 +version: "0.2.0-SNAPSHOT" layer: QBIT entries: - key: app:crm;slot:help summary: "Manage relationships, sales opportunities and consent." content: | - Use **Contacts**, **Companies**, **Deals**, **Activities**, **Web Leads** and **Lists** for daily work. The Setup card on this page shows what still needs configuring: the default pipeline and its stages, lifecycle stages, the base currency and email delivery. A new installation starts with a Sales Pipeline, lifecycle stages, lead sources, industries, win and loss reasons, contact roles, activity outcomes and a USD base currency. Configure pipelines, outcomes and outreach in Settings. Marketing email requires recorded consent and a ready email transport. + Use **Contacts**, **Companies**, **Deals**, **Activities**, **Web Leads** and **Lists** for daily work. The Setup card on this page shows what still needs configuring: the default pipeline and its stages, lifecycle stages, the base currency and email delivery. Ask your administrator which reference data and base currency are configured for your installation. Configure pipelines, outcomes and outreach in Settings. Marketing email requires recorded consent and a ready email transport. - key: table:crm_job_state;slot:help summary: "Internal maintenance checkpoints." content: | - Internal maintenance checkpoints. Health checks use the last successful lead-score run. + Use **{{label:crm_job_state}}** to review internal maintenance checkpoints. - **How rows get created:** the CRM writes it: each scheduled maintenance run (lead scoring, deal notifications) saves its checkpoint here. You never add rows; leave them alone, as the health checks read them. - - key: table:crm_external_mapping;slot:help - summary: "Links between CRM records and identifiers in external systems." - content: | - Links between CRM records and identifiers in external systems. Keep each record and system pair unique. - - **How rows get created:** not used yet: nothing in the CRM writes these rows, no sync reads them, and the table is not in the navigation. It is a reserved place for a host integration to record which external id a contact, company or deal has (one row per record and system). Erasing a contact deletes its mappings. - - key: table:crm_assignment_rule;slot:help - summary: "Rules for selecting the owner of a new contact or deal." - content: | - Rules for selecting the owner of a new contact or deal. - - **How rows get created:** an administrator adds a rule with New (what it applies to, the criteria and a strategy: Specific User, Round Robin or Least Active); the users who may receive work go under Members. Without a rule, new contacts and deals keep the owner they were created with. The qbit seeds none because the users are yours. - - key: table:crm_assignment_rule_member;slot:help - summary: "Users eligible for a group assignment rule." - content: | - Users eligible for a group assignment rule. Membership determines who can receive assigned work. - - **How rows get created:** an administrator adds the users who can receive work under a rule, from the rule's record. A rule with no members assigns nothing. - - key: table:crm_lead_score_rule;slot:help - summary: "Conditions that add or subtract lead-score points." - content: | - Conditions that add or subtract lead-score points. Review rule order and decay behavior. - - **How rows get created:** an administrator adds each rule with New (entity, the field to test, an operator, a value and the score adjustment, positive or negative). Calculate lead scores applies them on its schedule, and Recalculate Score on a contact applies them now. The qbit seeds none because good scoring depends on your business. - - key: table:crm_sales_goal;slot:help - summary: "Revenue targets for a user and period, optionally limited to a pipeline." - content: | - Revenue targets for a user and period, optionally limited to a pipeline. - - **How rows get created:** an administrator adds a target for a user and period with New, optionally for one pipeline. The Goals card on the home compares each target with the deals won in that period. The qbit seeds none because targets are yours. - - key: table:crm_email_message;slot:help - summary: "Delivery information and content for an email associated with a contact or activity." - content: | - Delivery information and content for an email associated with a contact or activity. - - **How rows get created:** the CRM writes it: every email it sends or receives for a contact (sequence steps, list mail, replies) is stored here with its delivery status, and shows on the contact's timeline. You do not add rows by hand. - - key: table:crm_email_sequence;slot:help - summary: "Ordered outreach steps." - content: | - Ordered outreach steps. Activate only after reviewing the steps, timing and email consent requirements. - - **How rows get created:** an administrator creates a sequence with New, then adds its steps. Contacts join it with the Enroll in Sequence action. Activate it only after the steps, timing and templates are reviewed. The qbit seeds none because the copy is yours. - - key: table:crm_email_template;slot:help - summary: "Reusable email subject and content." - content: | - Reusable email subject and content. Review merged content before sending to recipients. - - **How rows get created:** an administrator writes each template with New (name, subject and body, with merge fields). Sequence steps and sends pick templates from here. The qbit seeds none because the wording is yours. - - key: table:crm_sequence_enrollment;slot:help - summary: "A contact enrolled in a sequence, with progress, status and next scheduled step." - content: | - A contact enrolled in a sequence, with progress, status and next scheduled step. - - **How rows get created:** the Enroll in Sequence action creates a row for each contact, and the scheduled Process sequence steps job advances it. Unenroll from Sequence and erasing the contact end it. You do not add rows by hand. - - key: table:crm_sequence_step;slot:help - summary: "One timed action in an outreach sequence." - content: | - One timed action in an outreach sequence. Email steps require a usable template and transport. - - **How rows get created:** an administrator adds steps from the sequence record: a type (Email, Call, Task or Wait), a delay and, for email steps, a template. Steps run in order for each enrolled contact. - - key: table:crm_contact_role;slot:help - summary: "Roles a contact can play in a deal or relationship." - content: | - Roles a contact can play in a deal or relationship. - - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds six roles (Decision Maker, Champion, Influencer, Economic Buyer, Technical Evaluator, End User). Add or retire your own with New. They are offered when you attach a contact to a deal. - - key: table:crm_deal;slot:help - summary: "Sales opportunities tracked through a pipeline." - content: | - Sales opportunities tracked through a pipeline. Select a pipeline before choosing its stage. - - **How rows get created:** a person adds one with New (pick the pipeline first, then its stage), or Create Deal on a contact (Convert lead) creates one in the default pipeline. Move Stage, Mark Won, Mark Lost and Reopen are actions on the deal. Amounts convert to the base currency. - - key: table:crm_deal;field:id + **How rows get created:** The lead-score calculation saves its successful-run checkpoint here. You do not need to add rows. Health checks use this checkpoint to detect stale scoring. + - key: table:crm_job_state;section:identity + summary: "The identifying details for this record." + - key: table:crm_job_state;section:otherFields + summary: "Additional values associated with this record." + - key: table:crm_job_state;field:id summary: "System-assigned record identifier." - content: | - System-assigned record identifier. Use this value when linking records or investigating an import. - - key: table:crm_deal;field:name + - key: table:crm_job_state;field:name summary: "The display name shown in lists and record links." - content: | - The display name shown in lists and record links. Choose a name that is easy to recognize. - - key: table:crm_deal;field:pipelineId - summary: "The sales pipeline for this record." - content: | - The sales pipeline for this record. Its stages determine the available stage choices. - - key: table:crm_deal;field:pipelineStageId - summary: "The current stage within the chosen pipeline." - content: | - The current stage within the chosen pipeline. A stage from another pipeline is rejected. - - key: table:crm_deal;field:amount - summary: "The deal amount in the selected currency." - content: | - The deal amount in the selected currency. Product changes can recalculate this amount. - - key: table:crm_deal;field:currencyCode - summary: "Currency of the deal amount." - content: | - Currency of the deal amount. Choose a configured currency code. - - key: table:crm_deal;field:amountInBaseCurrency - summary: "The deal amount converted to the configured base currency for reporting." - content: | - The deal amount converted to the configured base currency for reporting. - - key: table:crm_deal;field:probabilityOverridePct - summary: "Optional closing probability percentage that overrides the stage probability." - content: | - Optional closing probability percentage that overrides the stage probability. - - key: table:crm_deal;field:weightedAmount - summary: "The deal amount weighted by its probability of closing." - content: | - The deal amount weighted by its probability of closing. - - key: table:crm_deal;field:companyId - summary: "The linked company." - content: | - The linked company. Select an existing company so contacts and deals share the same organization. - - key: table:crm_deal;field:primaryContactId - summary: "The main contact for this deal." - content: | - The main contact for this deal. Choose the company first to narrow the choices. - - key: table:crm_deal;field:ownerUserId - summary: "The user responsible for following up on this record." - content: | - The user responsible for following up on this record. - - key: table:crm_deal;field:leadSourceId - summary: "The source that brought this contact or deal to your organization." - content: | - The source that brought this contact or deal to your organization. - - key: table:crm_deal;field:expectedCloseDate - summary: "The date you expect the opportunity to close." - content: | - The date you expect the opportunity to close. Keep it current for forecasts. - - key: table:crm_deal;field:actualCloseDate - summary: "When the deal was won or lost." - content: | - When the deal was won or lost. Reopening clears the closed state. - - key: table:crm_deal;field:winLossReasonId - summary: "Why the deal was won or lost." - content: | - Why the deal was won or lost. Select the reason that best explains the outcome. - - key: table:crm_deal;field:stageEnteredDate - summary: "When the deal entered its current stage, used to identify deals that have stalled." - content: | - When the deal entered its current stage, used to identify deals that have stalled. - - key: table:crm_deal;field:description - summary: "Additional context for this record." - content: | - Additional context for this record. Include only information needed for the relationship. - - key: table:crm_deal;field:priority - summary: "Relative urgency used to organize work." - content: | - Relative urgency used to organize work. - - key: table:crm_deal;field:lastActivityDate - summary: "The latest logged interaction date maintained by the CRM." - content: | - The latest logged interaction date maintained by the CRM. - - key: table:crm_deal;field:createDate - summary: "When this record was created." - content: | - When this record was created. The system maintains this timestamp. - - key: table:crm_deal;field:modifyDate - summary: "When this record was last changed." - content: | - When this record was last changed. The system maintains this timestamp. - - key: table:crm_deal;field:tenantKey - summary: "The tenant that owns this record." - content: | - Available only when the host enables CRM tenancy. The session must hold the matching tenant key; changing this value changes who can access the record. - - key: table:crm_deal_contact;slot:help - summary: "Contacts involved in a deal, with their relationship or role." - content: | - Contacts involved in a deal, with their relationship or role. - - **How rows get created:** a person attaches a contact to a deal with the Add Contact action on the deal, choosing a role. Create Deal (Convert lead) and Clone also create rows. Merging contacts re-points them. - - key: table:crm_deal_product;slot:help - summary: "Product quantities and prices on a deal." - content: | - Product quantities and prices on a deal. Changes recalculate the deal total. - - **How rows get created:** a person adds a product line from the deal's record. Changing a line recalculates the deal's amount. Clone copies the lines. - - key: table:crm_deal_stage_history;slot:help - summary: "The history of a deal moving between pipeline stages." - content: | - The history of a deal moving between pipeline stages. - - **How rows get created:** the CRM writes it: a row is added when a deal is created and every time it changes stage (including won, lost and reopen), with the time spent in the previous stage. You do not add rows by hand. - - key: table:crm_pipeline;slot:help - summary: "Sales pipelines that group stages." - content: | - Sales pipelines that group stages. Give each pipeline a clear purpose and ordered stages. - - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds one default pipeline, Sales Pipeline, when you have none. Add more with New and tick Default on the one new deals and converted leads should use. Create Deal (Convert lead) fails without a default pipeline that has stages. - - key: table:crm_pipeline_stage;slot:help - summary: "Ordered stages within a pipeline, with probability, required fields and won or lost outcomes." - content: | - Ordered stages within a pipeline, with probability, required fields and won or lost outcomes. - - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds six stages for Sales Pipeline: Qualification 10%, Discovery 25%, Proposal 50%, Negotiation 75%, Closed Won 100% and Closed Lost 0%. Add the stages of other pipelines from the pipeline's record. Tick Closed Won and Closed Lost on the stages that end a deal: the home, goals and forecasts count from them. - - key: table:crm_product;slot:help - summary: "Products and services available as deal line items." - content: | - Products and services available as deal line items. Check price and currency before adding to a deal. - - **How rows get created:** an administrator adds each product or service with New (name, price, currency). Deal product lines pick from this catalogue. The qbit seeds none because the catalogue is yours. - - key: table:crm_win_loss_reason;slot:help - summary: "Reasons for winning or losing a deal." - content: | - Reasons for winning or losing a deal. Use these to improve pipeline reporting. - - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds three won reasons (Price, Product fit, Relationship) and five lost ones (Price, Competitor, No budget, No decision, Timing), each prefixed Won: or Lost:. Add your own with New. A user picks one when marking a deal won or lost. - - key: table:crm_company;slot:help - summary: "Organizations linked to contacts and deals." - content: | - Organizations linked to contacts and deals. Use domain to distinguish similarly named companies. - - **How rows get created:** a person adds one with New, an import creates them, or Merge Companies keeps one. Contacts and deals link to it by company. - - key: table:crm_company;field:id - summary: "System-assigned record identifier." - content: | - System-assigned record identifier. Use this value when linking records or investigating an import. - - key: table:crm_company;field:name - summary: "The display name shown in lists and record links." - content: | - The display name shown in lists and record links. Choose a name that is easy to recognize. - - key: table:crm_company;field:domain - summary: "The company's internet domain, for example example.com." - content: | - The company's internet domain, for example example.com. Use it to distinguish organizations. - - key: table:crm_company;field:companyType - summary: "The company's relationship to your organization, such as customer or prospect." - content: | - The company's relationship to your organization, such as customer or prospect. - - key: table:crm_company;field:industryId - summary: "The industry that best describes the company's business." - content: | - The industry that best describes the company's business. - - key: table:crm_company;field:employeeCount - summary: "The approximate number of people employed by the company." - content: | - The approximate number of people employed by the company. - - key: table:crm_company;field:annualRevenue - summary: "The company's approximate annual revenue in its revenue currency." - content: | - The company's approximate annual revenue in its revenue currency. - - key: table:crm_company;field:annualRevenueCurrencyCode - summary: "Currency used for the annual revenue estimate." - content: | - Currency used for the annual revenue estimate. - - key: table:crm_company;field:phone - summary: "A telephone number including country code where needed." - content: | - A telephone number including country code where needed. Respect the contact's calling preferences. - - key: table:crm_company;field:website - summary: "The public website URL for this person or organization." - content: | - The public website URL for this person or organization. - - key: table:crm_company;field:addressLine1 - summary: "The first line of the postal address, such as street and building number." - content: | - The first line of the postal address, such as street and building number. - - key: table:crm_company;field:addressLine2 - summary: "Additional address details, such as apartment or suite." - content: | - Additional address details, such as apartment or suite. - - key: table:crm_company;field:city - summary: "City or locality in the postal address." - content: | - City or locality in the postal address. - - key: table:crm_company;field:state - summary: "State, province or region in the postal address." - content: | - State, province or region in the postal address. - - key: table:crm_company;field:postalCode - summary: "Postal or ZIP code in the address." - content: | - Postal or ZIP code in the address. - - key: table:crm_company;field:country - summary: "Country in the postal address." - content: | - Country in the postal address. - - key: table:crm_company;field:ownerUserId - summary: "The user responsible for following up on this record." - content: | - The user responsible for following up on this record. - - key: table:crm_company;field:parentCompanyId - summary: "The parent organization, if this company is part of a larger group." - content: | - The parent organization, if this company is part of a larger group. - - key: table:crm_company;field:description - summary: "Additional context for this record." - content: | - Additional context for this record. Include only information needed for the relationship. - - key: table:crm_company;field:lastActivityDate - summary: "The latest logged interaction date maintained by the CRM." - content: | - The latest logged interaction date maintained by the CRM. - - key: table:crm_company;field:lastContactedDate - summary: "Last contacted date for this company." - content: | - Last contacted date for this company. Review this value when updating the record. - - key: table:crm_company;field:createDate - summary: "When this record was created." - content: | - When this record was created. The system maintains this timestamp. - - key: table:crm_company;field:modifyDate - summary: "When this record was last changed." - content: | - When this record was last changed. The system maintains this timestamp. - - key: table:crm_company;field:tenantKey - summary: "The tenant that owns this record." - content: | - Available only when the host enables CRM tenancy. The session must hold the matching tenant key; changing this value changes who can access the record. - - key: table:crm_consent_record;slot:help - summary: "Immutable evidence of a consent decision." - content: | - Immutable evidence of a consent decision. Record withdrawals as new records; erasure redacts evidence text. - - **How rows get created:** the CRM writes it: subscribing to a list, a web form with consent, an unsubscribe or a withdrawal each add a row of evidence. Records are never edited. You do not add rows by hand. - - key: table:crm_contact;slot:help - summary: "People and their relationship with your organization." - content: | - People and their relationship with your organization. Check consent before sending marketing email. - - **How rows get created:** a person adds one with New, an import or bulk load creates them, a web form creates one when you convert a web lead, and Merge Contacts keeps one. Set the lifecycle stage and lead source from the lists in Settings. - - key: table:crm_contact;field:firstTouchUtmSource - summary: "First-touch campaign attribution: first touch utm source." - content: | - First-touch campaign attribution: first touch utm source. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:firstTouchUtmMedium - summary: "First-touch campaign attribution: first touch utm medium." - content: | - First-touch campaign attribution: first touch utm medium. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:firstTouchUtmCampaign - summary: "First-touch campaign attribution: first touch utm campaign." - content: | - First-touch campaign attribution: first touch utm campaign. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:firstTouchUtmContent - summary: "First-touch campaign attribution: first touch utm content." - content: | - First-touch campaign attribution: first touch utm content. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:firstTouchUtmTerm - summary: "First-touch campaign attribution: first touch utm term." - content: | - First-touch campaign attribution: first touch utm term. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:firstTouchLandingPage - summary: "First touch landing page." - content: | - First touch landing page. Captured from the visitor journey for attribution reporting. - - key: table:crm_contact;field:firstTouchReferrer - summary: "First touch referrer." - content: | - First touch referrer. Captured from the visitor journey for attribution reporting. - - key: table:crm_contact;field:firstTouchDate - summary: "First touch date." - content: | - First touch date. Captured from the visitor journey for attribution reporting. - - key: table:crm_contact;field:lastTouchUtmSource - summary: "Latest-touch campaign attribution: last touch utm source." - content: | - Latest-touch campaign attribution: last touch utm source. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:lastTouchUtmMedium - summary: "Latest-touch campaign attribution: last touch utm medium." - content: | - Latest-touch campaign attribution: last touch utm medium. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:lastTouchUtmCampaign - summary: "Latest-touch campaign attribution: last touch utm campaign." - content: | - Latest-touch campaign attribution: last touch utm campaign. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:lastTouchUtmContent - summary: "Latest-touch campaign attribution: last touch utm content." - content: | - Latest-touch campaign attribution: last touch utm content. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:lastTouchUtmTerm - summary: "Latest-touch campaign attribution: last touch utm term." - content: | - Latest-touch campaign attribution: last touch utm term. Supplied by the host from the visitor journey. - - key: table:crm_contact;field:lastTouchLandingPage - summary: "Last touch landing page." - content: | - Last touch landing page. Captured from the visitor journey for attribution reporting. - - key: table:crm_contact;field:lastTouchReferrer - summary: "Last touch referrer." - content: | - Last touch referrer. Captured from the visitor journey for attribution reporting. - - key: table:crm_contact;field:lastTouchDate - summary: "Last touch date." - content: | - Last touch date. Captured from the visitor journey for attribution reporting. - - key: table:crm_contact;field:id - summary: "System-assigned record identifier." - content: | - System-assigned record identifier. Use this value when linking records or investigating an import. - - key: table:crm_contact;field:firstName - summary: "The person's given name." - content: | - The person's given name, when supplied. Email-only contacts may leave names blank. This is personal data and is removed by Erase Personal Data. - - key: table:crm_contact;field:lastName - summary: "The person's family name." - content: | - The person's family name, when supplied. This is personal data and is removed by Erase Personal Data. - - key: table:crm_contact;field:email - summary: "Email address used to identify or contact the person." - content: | - Email address used to identify or contact the person. Marketing still requires valid, unsuppressed consent. - - key: table:crm_contact;field:secondaryEmail - summary: "An alternate email address for the contact." - content: | - An alternate email address for the contact. It is included in personal-data erasure. - - key: table:crm_contact;field:phone - summary: "A telephone number including country code where needed." - content: | - A telephone number including country code where needed. Respect the contact's calling preferences. - - key: table:crm_contact;field:mobilePhone - summary: "The contact's mobile telephone number." - content: | - The contact's mobile telephone number. Respect the contact's calling preferences. - - key: table:crm_contact;field:jobTitle - summary: "The contact's job title at their organization." - content: | - The contact's job title at their organization. - - key: table:crm_contact;field:department - summary: "The department or team where the contact works." - content: | - The department or team where the contact works. - - key: table:crm_contact;field:companyId - summary: "The linked company." - content: | - The linked company. Select an existing company so contacts and deals share the same organization. - - key: table:crm_contact;field:lifecycleStageId - summary: "The contact's current relationship stage, such as lead or customer." - content: | - The contact's current relationship stage, such as lead or customer. - - key: table:crm_contact;field:leadSourceId - summary: "The source that brought this contact or deal to your organization." - content: | - The source that brought this contact or deal to your organization. - - key: table:crm_contact;field:ownerUserId - summary: "The user responsible for following up on this record." - content: | - The user responsible for following up on this record. - - key: table:crm_contact;field:addressLine1 - summary: "The first line of the postal address, such as street and building number." - content: | - The first line of the postal address, such as street and building number. - - key: table:crm_contact;field:addressLine2 - summary: "Additional address details, such as apartment or suite." - content: | - Additional address details, such as apartment or suite. - - key: table:crm_contact;field:city - summary: "City or locality in the postal address." - content: | - City or locality in the postal address. - - key: table:crm_contact;field:state - summary: "State, province or region in the postal address." - content: | - State, province or region in the postal address. - - key: table:crm_contact;field:postalCode - summary: "Postal or ZIP code in the address." - content: | - Postal or ZIP code in the address. - - key: table:crm_contact;field:country - summary: "Country in the postal address." - content: | - Country in the postal address. - - key: table:crm_contact;field:timezone - summary: "The contact's time-zone identifier, such as America/Chicago, used when scheduling sequence steps." - content: | - The contact's time-zone identifier, such as America/Chicago, used when scheduling sequence steps. - - key: table:crm_contact;field:preferredLanguage - summary: "The contact's preferred language for communication." - content: | - The contact's preferred language for communication. - - key: table:crm_contact;field:website - summary: "The public website URL for this person or organization." - content: | - The public website URL for this person or organization. - - key: table:crm_contact;field:linkedinUrl - summary: "The contact's LinkedIn profile URL." - content: | - The contact's LinkedIn profile URL. This is classified as personal data. - - key: table:crm_contact;field:description - summary: "Additional context for this record." - content: | - Additional context for this record. Include only information needed for the relationship. - - key: table:crm_contact;field:leadScore - summary: "The latest calculated score from the enabled lead-score rules." - content: | - The latest calculated score from the enabled lead-score rules. - - key: table:crm_contact;field:doNotEmail - summary: "Suppress email to this contact even when a marketing consent record exists." - content: | - Suppress email to this contact even when a marketing consent record exists. - - key: table:crm_contact;field:doNotCall - summary: "Indicates that this contact should not receive telephone calls." - content: | - Indicates that this contact should not receive telephone calls. - - key: table:crm_contact;field:unsubscribeDate - summary: "When the contact unsubscribed." - content: | - When the contact unsubscribed. This suppresses marketing email. - - key: table:crm_contact;field:lastActivityDate - summary: "The latest logged interaction date maintained by the CRM." - content: | - The latest logged interaction date maintained by the CRM. - - key: table:crm_contact;field:lastContactedDate - summary: "Last contacted date for this contact." - content: | - Last contacted date for this contact. Review this value when updating the record. - - key: table:crm_contact;field:createDate - summary: "When this record was created." - content: | - When this record was created. The system maintains this timestamp. - - key: table:crm_contact;field:modifyDate - summary: "When this record was last changed." - content: | - When this record was last changed. The system maintains this timestamp. - - key: table:crm_contact;field:tenantKey - summary: "The tenant that owns this record." - content: | - Available only when the host enables CRM tenancy. The session must hold the matching tenant key; changing this value changes who can access the record. - - key: table:crm_currency;slot:help - summary: "Currency codes and exchange rates used to report deal values in a base currency." - content: | - Currency codes and exchange rates used to report deal values in a base currency. - - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds US Dollar as the base currency (rate 1) when you have none. Add other currencies with New and a rate to the base; changing a rate stamps Rate last updated. Change the base before your first deal if you do not report in USD. Without a base currency, amounts have no prefix and conversion does nothing. - - key: table:crm_email_list;slot:help - summary: "Mailing lists and opt-in settings." - content: | - Mailing lists and opt-in settings. List membership alone does not grant permission to send marketing email. - - **How rows get created:** an administrator creates a list with New (name, and whether joining needs confirmation). Members join through the Add to List action or a web form. Joining a list is not consent to marketing email on its own. - - key: table:crm_email_list;field:listKey - summary: "A stable integration key used by hosts to subscribe people to this list." - content: | - A stable integration key used by hosts to subscribe people to this list. - - key: table:crm_email_list;field:requireDoubleOptIn - summary: "Require double opt in for this email list." - content: | - Require double opt in for this email list. Review this value when updating the record. - - key: table:crm_email_list;field:consentText - summary: "The exact wording shown when consent was requested." - content: | - The exact wording shown when consent was requested. Treat this as personal evidence. - - key: table:crm_email_list;field:id - summary: "System-assigned record identifier." - content: | - System-assigned record identifier. Use this value when linking records or investigating an import. - - key: table:crm_email_list;field:name - summary: "The display name shown in lists and record links." - content: | - The display name shown in lists and record links. Choose a name that is easy to recognize. - - key: table:crm_email_list;field:slug - summary: "A short machine-friendly name for this list." - content: | - A short machine-friendly name for this list. - - key: table:crm_email_list;field:description - summary: "Additional context for this record." - content: | - Additional context for this record. Include only information needed for the relationship. - - key: table:crm_email_list;field:isActive - summary: "Whether this record is available for new work." - content: | - Whether this record is available for new work. - - key: table:crm_email_list;field:isPublic - summary: "Is public for this email list." - content: | - Is public for this email list. Review this value when updating the record. - - key: table:crm_email_list;field:sortOrder - summary: "Sort order for this email list." - content: | - Sort order for this email list. Review this value when updating the record. - - key: table:crm_email_list;field:memberCount - summary: "Member count for this email list." - content: | - Member count for this email list. Review this value when updating the record. - - key: table:crm_email_list;field:createDate - summary: "When this record was created." - content: | - When this record was created. The system maintains this timestamp. - - key: table:crm_email_list;field:modifyDate - summary: "When this record was last changed." - content: | - When this record was last changed. The system maintains this timestamp. - - key: table:crm_email_list;field:tenantKey - summary: "The tenant that owns this record." - content: | - Available only when the host enables CRM tenancy. The session must hold the matching tenant key; changing this value changes who can access the record. - - key: table:crm_email_list_member;slot:help - summary: "A contact or email address in a list, including opt-in state and confirmation evidence." - content: | - A contact or email address in a list, including opt-in state and confirmation evidence. - - **How rows get created:** the Add to List and Remove from List actions, web forms and the public subscribe call write it, one row per contact or address and list. Merging contacts and expiring consent update it. You do not add rows by hand. - - key: table:crm_form_submission;slot:help - summary: "Web leads captured from forms, including consent evidence and attribution." - content: | - Web leads captured from forms, including consent evidence and attribution. Convert a lead to link a contact. - - **How rows get created:** the host's public intake call writes one for each web form that arrives (contact us, sign-up, demo request). Convert to Contact turns it into a contact and links it. You do not add rows by hand. - - key: table:crm_form_submission;field:formKey - summary: "The stable host-defined identifier for the form that captured this submission." - content: | - The stable host-defined identifier for the form that captured this submission. - - key: table:crm_form_submission;field:marketingConsent - summary: "Marketing consent for this form submission." - content: | - Marketing consent for this form submission. Review this value when updating the record. - - key: table:crm_form_submission;field:consentText - summary: "The exact wording shown when consent was requested." - content: | - The exact wording shown when consent was requested. Treat this as personal evidence. - - key: table:crm_form_submission;field:landingPage - summary: "The landing page associated with this submission." - content: | - The landing page associated with this submission. - - key: table:crm_form_submission;field:visitorKey - summary: "A hashed visitor identifier, stored only when the host has the required visitor-identity consent." - content: | - A hashed visitor identifier, stored only when the host has the required visitor-identity consent. - - key: table:crm_form_submission;field:clientHash - summary: "A salted client identifier supplied by the host." - content: | - A salted client identifier supplied by the host. Never put a raw IP address here. - - key: table:crm_form_submission;field:id - summary: "System-assigned record identifier." - content: | - System-assigned record identifier. Use this value when linking records or investigating an import. - - key: table:crm_form_submission;field:formType - summary: "The purpose of the submitted form." - content: | - The purpose of the submitted form. A contact form does not automatically grant marketing consent. - - key: table:crm_form_submission;field:email - summary: "Email address used to identify or contact the person." - content: | - Email address used to identify or contact the person. Marketing still requires valid, unsuppressed consent. - - key: table:crm_form_submission;field:firstName - summary: "The person's given name." - content: | - The person's given name, when supplied. Email-only contacts may leave names blank. This is personal data and is removed by Erase Personal Data. - - key: table:crm_form_submission;field:lastName - summary: "The person's family name." - content: | - The person's family name, when supplied. This is personal data and is removed by Erase Personal Data. - - key: table:crm_form_submission;field:company - summary: "The company name as submitted on the form; review it before linking to an existing organization." - content: | - The company name as submitted on the form; review it before linking to an existing organization. - - key: table:crm_form_submission;field:phone - summary: "A telephone number including country code where needed." - content: | - A telephone number including country code where needed. Respect the contact's calling preferences. - - key: table:crm_form_submission;field:message - summary: "The message submitted by the person." - content: | - The message submitted by the person. Avoid copying sensitive information into unrelated records. - - key: table:crm_form_submission;field:sourceUrl - summary: "The page URL where the form was submitted." - content: | - The page URL where the form was submitted. - - key: table:crm_form_submission;field:utmSource - summary: "Captured campaign attribution: utm source." - content: | - Captured campaign attribution: utm source. Supplied by the host from the visitor journey. - - key: table:crm_form_submission;field:utmMedium - summary: "Captured campaign attribution: utm medium." - content: | - Captured campaign attribution: utm medium. Supplied by the host from the visitor journey. - - key: table:crm_form_submission;field:utmCampaign - summary: "Captured campaign attribution: utm campaign." - content: | - Captured campaign attribution: utm campaign. Supplied by the host from the visitor journey. - - key: table:crm_form_submission;field:utmTerm - summary: "Captured campaign attribution: utm term." - content: | - Captured campaign attribution: utm term. Supplied by the host from the visitor journey. - - key: table:crm_form_submission;field:utmContent - summary: "Captured campaign attribution: utm content." - content: | - Captured campaign attribution: utm content. Supplied by the host from the visitor journey. - - key: table:crm_form_submission;field:referrer - summary: "The referring page captured by the host." - content: | - The referring page captured by the host. - - key: table:crm_form_submission;field:contactId - summary: "The linked contact." - content: | - The linked contact. This connects the record with that person's history and consent. - - key: table:crm_form_submission;field:conversionStatus - summary: "Whether this web lead has been converted or linked to a contact." - content: | - Whether this web lead has been converted or linked to a contact. - - key: table:crm_form_submission;field:convertedDate - summary: "When the submission was converted to a contact." - content: | - When the submission was converted to a contact. - - key: table:crm_form_submission;field:convertedByUserId - summary: "The user who converted the submission to a contact." - content: | - The user who converted the submission to a contact. - - key: table:crm_form_submission;field:metadata - summary: "Additional host-supplied form details." - content: | - Additional host-supplied form details. Do not store credentials or raw IP addresses. - - key: table:crm_form_submission;field:createDate - summary: "When this record was created." - content: | - When this record was created. The system maintains this timestamp. - - key: table:crm_form_submission;field:modifyDate - summary: "When this record was last changed." - content: | - When this record was last changed. The system maintains this timestamp. - - key: table:crm_form_submission;field:tenantKey - summary: "The tenant that owns this record." - content: | - Available only when the host enables CRM tenancy. The session must hold the matching tenant key; changing this value changes who can access the record. - - key: table:crm_industry;slot:help - summary: "Industry categories for companies." - content: | - Industry categories for companies. Choose one that describes the primary business. - - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds ten generic industries (Technology, Healthcare and so on). Add or retire your own with New. A company picks one. - - key: table:crm_lead_source;slot:help - summary: "Where a contact or deal originated." - content: | - Where a contact or deal originated. Use consistent categories for attribution reports. - - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds eight sources: Website (the one web forms use), Referral, Event, Email Campaign, Social, Partner, Cold Outreach and Other. Add your own with New. Contacts and deals pick one for attribution reports. + - key: table:crm_job_state;field:lastSuccess + summary: "When the maintenance job last completed successfully." + - key: table:crm_job_state;field:lastFullPass + summary: "When the maintenance job last completed a full pass." - key: table:crm_lifecycle_stage;slot:help summary: "Lifecycle categories for contacts, such as lead and customer." content: | - Lifecycle categories for contacts, such as lead and customer. + Use **{{label:crm_lifecycle_stage}}** to review lifecycle categories for contacts, such as lead and customer. - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds eight stages: Subscriber, Lead, Marketing Qualified Lead, Sales Qualified Lead, Opportunity, Customer, Evangelist and Other. Keep the names Lead and Opportunity exactly: new web leads get Lead, and Create Deal (Convert lead) moves the contact to Opportunity. A missing one is skipped silently. - - key: table:crm_activity;slot:help - summary: "Past interactions with contacts, companies and deals." - content: | - Past interactions with contacts, companies and deals. Use collaboration tasks for future work. - - **How rows get created:** a person logs a call, meeting, email or note with the Log Activity action on a contact, company or deal, or New. Web forms and sequence steps also write them. Logging one updates the last-activity dates of what it links to. - - key: table:crm_activity;field:id + **How rows get created:** Add relationship stages with **New**. Ask your administrator to keep the configured stages aligned with intake and deal-creation workflows. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_lifecycle_stage;section:identity + summary: "The identifying details for this record." + - key: table:crm_lifecycle_stage;section:data + summary: "The main values and settings for this record." + - key: table:crm_lifecycle_stage;section:dates + summary: "When this record was created or changed." + - key: table:crm_lifecycle_stage;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_lifecycle_stage;field:id summary: "System-assigned record identifier." - content: | - System-assigned record identifier. Use this value when linking records or investigating an import. - - key: table:crm_activity;field:activityTypeId - summary: "The kind of interaction." - content: | - The kind of interaction. Choose this before selecting an outcome. - - key: table:crm_activity;field:subject - summary: "A short description of the interaction." - content: | - A short description of the interaction. Avoid unnecessary personal information. - - key: table:crm_activity;field:description + - key: table:crm_lifecycle_stage;field:description summary: "Additional context for this record." - content: | - Additional context for this record. Include only information needed for the relationship. - - key: table:crm_activity;field:contactId - summary: "The linked contact." - content: | - The linked contact. This connects the record with that person's history and consent. - - key: table:crm_activity;field:companyId - summary: "The linked company." - content: | - The linked company. Select an existing company so contacts and deals share the same organization. - - key: table:crm_activity;field:dealId - summary: "The related sales opportunity." - content: | - The related sales opportunity. Link the deal to include this interaction in its history. - - key: table:crm_activity;field:ownerUserId - summary: "The user responsible for following up on this record." - content: | - The user responsible for following up on this record. - - key: table:crm_activity;field:assignedToUserId - summary: "The user assigned to handle this activity." - content: | - The user assigned to handle this activity. - - key: table:crm_activity;field:startDate - summary: "When the interaction started." - content: | - When the interaction started. - - key: table:crm_activity;field:endDate - summary: "When the interaction ended." - content: | - When the interaction ended. - - key: table:crm_activity;field:dueDate - summary: "The due date recorded on the activity." - content: | - The due date recorded on the activity. Use collaboration tasks to manage future to-dos. - - key: table:crm_activity;field:completedDate - summary: "When this activity was completed." - content: | - When this activity was completed. - - key: table:crm_activity;field:isCompleted - summary: "Whether this activity is complete." - content: | - Whether this activity is complete. - - key: table:crm_activity;field:priority - summary: "Relative urgency used to organize work." - content: | - Relative urgency used to organize work. - - key: table:crm_activity;field:durationMinutes - summary: "Duration of the interaction in minutes." - content: | - Duration of the interaction in minutes. - - key: table:crm_activity;field:outcomeId - summary: "The result of the interaction." - content: | - The result of the interaction. It must belong to the selected activity type. - - key: table:crm_activity;field:location - summary: "Where the interaction took place." - content: | - Where the interaction took place. - - key: table:crm_activity;field:conferenceLink - summary: "Meeting link associated with the interaction." - content: | - Meeting link associated with the interaction. - - key: table:crm_activity;field:direction - summary: "Whether the interaction was inbound or outbound." - content: | - Whether the interaction was inbound or outbound. - - key: table:crm_activity;field:isReminderSet - summary: "Legacy activity reminder state." - content: | - Legacy activity reminder state. Use collaboration tasks for current reminder workflows. - - key: table:crm_activity;field:reminderDate - summary: "Legacy activity reminder time." - content: | - Legacy activity reminder time. Use collaboration tasks for current reminder workflows. - - key: table:crm_activity;field:externalCalendarId - summary: "Identifier of the related event in the host calendar system." - content: | - Identifier of the related event in the host calendar system. - - key: table:crm_activity;field:createDate + - key: table:crm_lifecycle_stage;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_lifecycle_stage;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_lifecycle_stage;field:createDate summary: "When this record was created." - content: | - When this record was created. The system maintains this timestamp. - - key: table:crm_activity;field:modifyDate + - key: table:crm_lifecycle_stage;field:modifyDate summary: "When this record was last changed." + - key: table:crm_lead_source;slot:help + summary: "Where a contact or deal originated." content: | - When this record was last changed. The system maintains this timestamp. - - key: table:crm_activity;field:tenantKey - summary: "The tenant that owns this record." - content: | - Available only when the host enables CRM tenancy. The session must hold the matching tenant key; changing this value changes who can access the record. - - key: table:crm_activity_outcome;slot:help - summary: "The result of an activity." - content: | - The result of an activity. Only outcomes belonging to the selected activity type are offered. + Use **{{label:crm_lead_source}}** to review where a contact or deal originated. - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds Connected, Left voicemail and No answer for calls and Meeting held and Meeting no-show for meetings. Add your own with New, choosing the activity type it belongs to. - - key: table:crm_activity_participant;slot:help - summary: "People participating in a recorded activity and their roles." + **How rows get created:** Add sources with **New**. Use consistent categories when recording where contacts and deals originated. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_lead_source;section:identity + summary: "The identifying details for this record." + - key: table:crm_lead_source;section:dates + summary: "When this record was created or changed." + - key: table:crm_lead_source;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_lead_source;field:id + summary: "System-assigned record identifier." + - key: table:crm_lead_source;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_lead_source;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_lead_source;field:createDate + summary: "When this record was created." + - key: table:crm_lead_source;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_company;slot:help + summary: "Organizations linked to contacts and deals." content: | - People participating in a recorded activity and their roles. + Use **Companies** to group the organizations linked to your contacts and deals. Record the company name and domain so you can distinguish similar organizations. Open a company to review its contacts, activities and sales opportunities. Use **Merge Companies** only after checking which record you want to keep and the relationships attached to both records. - **How rows get created:** a person adds the people on an activity from the activity's record. The CRM does not add them for you, so it stays empty until someone does. + **How rows get created:** Add a company with **New** or import your company records. You can then link contacts and deals to it. + - key: table:crm_company;section:identity + summary: "The identifying details for this record." + - key: table:crm_company;section:details + summary: "Additional information and settings for this record." + - key: table:crm_company;section:address + summary: "The postal address associated with this record." + - key: table:crm_company;section:data + summary: "The main values and settings for this record." + - key: table:crm_company;section:dates + summary: "When this record was created or changed." + - key: table:crm_company;section:crm_company_join_crm_activity + summary: "Related activities for this record." + - key: table:crm_company;section:crm_company_join_crm_contact + summary: "Related contacts for this record." + - key: table:crm_company;section:crm_company_join_crm_deal + summary: "Related deals for this record." + - key: table:crm_company;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_company;field:id + summary: "System-assigned record identifier." + - key: table:crm_company;field:state + summary: "State, province or region in the postal address." + - key: table:crm_company;field:country + summary: "Country in the postal address." + - key: table:crm_company;field:description + summary: "Additional context for this record." + - key: table:crm_company;field:createDate + summary: "When this record was created." + - key: table:crm_company;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_company;field:employeeCount + summary: "The approximate number of people employed by the company." + - key: table:crm_company;field:annualRevenue + summary: "The company's approximate annual revenue in its revenue currency." + - key: table:crm_company;field:postalCode + summary: "Postal or ZIP code in the address." + - key: table:crm_company;field:addressLine2 + summary: "Additional address details, such as apartment or suite." + - key: table:crm_company;field:addressLine1 + summary: "The first line of the postal address, such as street and building number." + - key: table:crm_company;field:companyType + summary: "The company's relationship to your organization, such as customer or prospect." + - key: table:crm_company;field:parentCompanyId + summary: "The parent organization, if this company is part of a larger group." + - key: table:crm_company;field:industryId + summary: "The industry that best describes the company's business." + - key: table:crm_company;field:city + summary: "City or locality in the postal address." + - key: table:crm_company;field:phone + summary: "A telephone number including country code where needed." + - key: table:crm_company;field:domain + summary: "The company's internet domain, for example example.com." + - key: table:crm_company;field:annualRevenueCurrencyCode + summary: "Currency used for the annual revenue estimate." + - key: table:crm_company;field:ownerUserId + summary: "The user responsible for following up on this record." + - key: table:crm_company;field:lastActivityDate + summary: "The latest logged interaction date maintained by the CRM." + - key: table:crm_company;field:lastContactedDate + summary: "When this company was last contacted." + - key: table:crm_company;field:website + summary: "The public website URL for this person or organization." + - key: table:crm_consent_record;slot:help + summary: "Immutable evidence of a consent decision." + content: | + Use **{{label:crm_consent_record}}** to review immutable evidence of a consent decision. + + **How rows get created:** Intake, subscriptions and withdrawals record consent evidence. Review the recorded wording and dates. Ordinary edits are blocked; **Erase Personal Data** can redact evidence text. + - key: table:crm_consent_record;section:identity + summary: "The identifying details for this record." + - key: table:crm_consent_record;section:data + summary: "The main values and settings for this record." + - key: table:crm_consent_record;section:dates + summary: "When this record was created or changed." + - key: table:crm_consent_record;field:id + summary: "System-assigned record identifier." + - key: table:crm_consent_record;field:source + summary: "Where the subscription or consent was recorded." + - key: table:crm_consent_record;field:status + summary: "The recorded consent decision: {{values:CrmConsentStatus}}." + - key: table:crm_consent_record;field:expiryDate + summary: "When the recorded consent expires." + - key: table:crm_consent_record;field:createDate + summary: "When this record was created." + - key: table:crm_consent_record;field:consentText + summary: "The exact wording shown when consent was requested." + - key: table:crm_consent_record;field:consentDate + summary: "When consent was recorded." + - key: table:crm_consent_record;field:consentType + summary: "The kind of permission requested from the contact." + - key: table:crm_consent_record;field:legalBasis + summary: "The recorded basis for processing the contact's information." + - key: table:crm_consent_record;field:contactId + summary: "The linked contact." + - key: table:crm_consent_record;field:evidenceFormSubmissionId + summary: "The web lead that supplies evidence of consent." + - key: table:crm_email_list_member;slot:help + summary: "A contact or email address in a list, including opt-in state and confirmation evidence." + content: | + Use **{{label:crm_email_list_member}}** to review a contact or email address in a list, including opt-in state and confirmation evidence. + + **How rows get created:** Use **Add to List** and **Remove from List** on contacts, or your configured subscription form. Review membership status and consent separately. + - key: table:crm_email_list_member;section:identity + summary: "The identifying details for this record." + - key: table:crm_email_list_member;section:data + summary: "The main values and settings for this record." + - key: table:crm_email_list_member;section:dates + summary: "When this record was created or changed." + - key: table:crm_email_list_member;field:id + summary: "System-assigned record identifier." + - key: table:crm_email_list_member;field:source + summary: "Where the subscription or consent was recorded." + - key: table:crm_email_list_member;field:formSubmissionId + summary: "The web lead associated with this membership." + - key: table:crm_email_list_member;field:confirmationSentDate + summary: "When the confirmation request was sent." + - key: table:crm_email_list_member;field:confirmationTokenHash + summary: "A protected verification value for the membership confirmation link." + - key: table:crm_email_list_member;field:status + summary: "The current subscription or confirmation state." + - key: table:crm_email_list_member;field:createDate + summary: "When this record was created." + - key: table:crm_email_list_member;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_email_list_member;field:firstName + summary: "The person's given name." + - key: table:crm_email_list_member;field:consentText + summary: "The exact wording shown when consent was requested." + - key: table:crm_email_list_member;field:contactId + summary: "The linked contact." + - key: table:crm_email_list_member;field:emailListId + summary: "The list associated with this membership." + - key: table:crm_email_list_member;field:confirmedDate + summary: "When the recipient confirmed the subscription." + - key: table:crm_email_list_member;field:subscribedDate + summary: "When the subscription began." + - key: table:crm_email_list_member;field:unsubscribedDate + summary: "When the recipient left the list." + - key: table:crm_email_list_member;field:subscriptionSource + summary: "The recorded origin of the subscription." + - key: table:crm_email_list_member;field:email + summary: "Email address used to identify or contact the person." + - key: table:crm_form_submission;slot:help + summary: "Web leads captured from forms, including consent evidence and attribution." + content: | + Use **Web Leads** to review incoming form submissions, including the submitted message, contact details and consent evidence. Check the information before using **Convert to Contact**. Conversion links the submission to a contact or creates one when appropriate. The submission keeps the original form context so you can understand where the relationship began. + + **How rows get created:** Your configured form integration creates web leads. Review each submission and use **Convert to Contact** to link or create the contact. + - key: table:crm_form_submission;section:identity + summary: "The identifying details for this record." + - key: table:crm_form_submission;section:data + summary: "The main values and settings for this record." + - key: table:crm_form_submission;section:utm + summary: "The campaign source and tracking details captured with the web lead." + - key: table:crm_form_submission;section:conversion + summary: "The contact linked to the web lead and the conversion outcome." + - key: table:crm_form_submission;section:technical + summary: "Supporting submission details and visitor references." + - key: table:crm_form_submission;section:dates + summary: "When this record was created or changed." + - key: table:crm_form_submission;field:message + summary: "The message submitted by the person." + - key: table:crm_form_submission;field:id + summary: "System-assigned record identifier." + - key: table:crm_form_submission;field:metadata + summary: "Additional host-supplied form details." + - key: table:crm_form_submission;field:convertedByUserId + summary: "The user who converted the submission to a contact." + - key: table:crm_form_submission;field:marketingConsent + summary: "Whether the person agreed to marketing when submitting the form." + - key: table:crm_form_submission;field:conversionStatus + summary: "Whether this web lead has been converted or linked to a contact." + - key: table:crm_form_submission;field:createDate + summary: "When this record was created." + - key: table:crm_form_submission;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_form_submission;field:landingPage + summary: "The landing page associated with this submission." + - key: table:crm_form_submission;field:clientHash + summary: "A salted client identifier supplied by the host." + - key: table:crm_form_submission;field:convertedDate + summary: "When the submission was converted to a contact." + - key: table:crm_form_submission;field:visitorKey + summary: "A hashed visitor identifier, stored only when the host has the required visitor-identity consent." + - key: table:crm_form_submission;field:firstName + summary: "The person's given name." + - key: table:crm_form_submission;field:lastName + summary: "The person's family name." + - key: table:crm_form_submission;field:consentText + summary: "The exact wording shown when consent was requested." + - key: table:crm_form_submission;field:contactId + summary: "The linked contact." + - key: table:crm_form_submission;field:utmSource + summary: "The campaign source captured with the web lead." + - key: table:crm_form_submission;field:formType + summary: "The purpose of the submitted form." + - key: table:crm_form_submission;field:referrer + summary: "The referring page captured by the host." + - key: table:crm_form_submission;field:utmCampaign + summary: "The campaign name captured with the web lead." + - key: table:crm_form_submission;field:sourceUrl + summary: "The page URL where the form was submitted." + - key: table:crm_form_submission;field:utmMedium + summary: "The campaign channel captured with the web lead." + - key: table:crm_form_submission;field:utmContent + summary: "The campaign content variation captured with the web lead." + - key: table:crm_form_submission;field:phone + summary: "A telephone number including country code where needed." + - key: table:crm_form_submission;field:utmTerm + summary: "The campaign search term captured with the web lead." + - key: table:crm_form_submission;field:company + summary: "The company name as submitted on the form; review it before linking to an existing organization." + - key: table:crm_form_submission;field:formKey + summary: "The stable host-defined identifier for the form that captured this submission." + - key: table:crm_form_submission;field:email + summary: "Email address used to identify or contact the person." + - key: table:crm_contact;slot:help + summary: "People and their relationship with your organization." + content: | + Use **Contacts** to keep the people you work with, their company, contact details and relationship stage together. Set **Lifecycle Stage** and **Lead Source** to describe the relationship. Open the related lists to review deals, activities, list memberships and email history. Before sending marketing email, check the contact's consent and communication restrictions. + + **How rows get created:** Add a person with **New**, import contacts, or use your configured intake and **Convert to Contact** workflows. Set the lifecycle stage and lead source for the relationship. + - key: table:crm_contact;section:identity + summary: "The identifying details for this record." + - key: table:crm_contact;section:details + summary: "Additional information and settings for this record." + - key: table:crm_contact;section:attribution + summary: "The first and most recent campaign interactions recorded for the contact." + - key: table:crm_contact;section:crm_contact_join_crm_deal + summary: "Related deals for this record." + - key: table:crm_contact;section:crm_contact_join_crm_email_list_member + summary: "Related list memberships for this record." + - key: table:crm_contact;section:crm_contact_join_crm_sequence_enrollment + summary: "Related enrollments for this record." + - key: table:crm_contact;section:crm_contact_join_crm_email_message + summary: "Related email messages for this record." + - key: table:crm_contact;section:crm_contact_join_crm_form_submission + summary: "Related web leads for this record." + - key: table:crm_contact;section:crm_contact_join_crm_activity + summary: "Related activities for this record." + - key: table:crm_contact;section:crm_contact_join_crm_consent_record + summary: "Related consent records for this record." + - key: table:crm_contact;section:crm_contact_timeline + summary: "The contact's interactions and email history in chronological order." + - key: table:crm_contact;field:id + summary: "System-assigned record identifier." + - key: table:crm_contact;field:state + summary: "State, province or region in the postal address." + - key: table:crm_contact;field:country + summary: "Country in the postal address." + - key: table:crm_contact;field:description + summary: "Additional context for this record." + - key: table:crm_contact;field:lastTouchLandingPage + summary: "The landing page recorded for the contact's most recent interaction." + - key: table:crm_contact;field:lastTouchReferrer + summary: "The referring page recorded for the contact's most recent interaction." + - key: table:crm_contact;field:createDate + summary: "When this record was created." + - key: table:crm_contact;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_contact;field:leadScore + summary: "The latest calculated score from the enabled lead-score rules." + - key: table:crm_contact;field:doNotCall + summary: "Indicates that this contact should not receive telephone calls." + - key: table:crm_contact;field:firstTouchDate + summary: "The interaction date recorded for the contact's first interaction." + - key: table:crm_contact;field:jobTitle + summary: "The contact's job title at their organization." + - key: table:crm_contact;field:leadSourceId + summary: "The source that brought this contact or deal to your organization." + - key: table:crm_contact;field:unsubscribeDate + summary: "When the contact unsubscribed." + - key: table:crm_contact;field:department + summary: "The department or team where the contact works." + - key: table:crm_contact;field:companyId + summary: "The linked company." + - key: table:crm_contact;field:mobilePhone + summary: "The contact's mobile telephone number." + - key: table:crm_contact;field:timezone + summary: "The contact's time-zone identifier, such as America/Chicago, used when scheduling sequence steps." + - key: table:crm_contact;field:secondaryEmail + summary: "An alternate email address for the contact." + - key: table:crm_contact;field:linkedinUrl + summary: "The contact's LinkedIn profile URL." + - key: table:crm_contact;field:doNotEmail + summary: "Suppress email to this contact even when a marketing consent record exists." + - key: table:crm_contact;field:firstName + summary: "The person's given name." + - key: table:crm_contact;field:lastName + summary: "The person's family name." + - key: table:crm_contact;field:postalCode + summary: "Postal or ZIP code in the address." + - key: table:crm_contact;field:addressLine2 + summary: "Additional address details, such as apartment or suite." + - key: table:crm_contact;field:addressLine1 + summary: "The first line of the postal address, such as street and building number." + - key: table:crm_contact;field:city + summary: "City or locality in the postal address." + - key: table:crm_contact;field:phone + summary: "A telephone number including country code where needed." + - key: table:crm_contact;field:firstTouchUtmSource + summary: "The campaign source recorded for the contact's first interaction." + - key: table:crm_contact;field:firstTouchUtmMedium + summary: "The campaign channel recorded for the contact's first interaction." + - key: table:crm_contact;field:preferredLanguage + summary: "The contact's preferred language for communication." + - key: table:crm_contact;field:firstTouchUtmCampaign + summary: "The campaign name recorded for the contact's first interaction." + - key: table:crm_contact;field:firstTouchUtmContent + summary: "The campaign content variation recorded for the contact's first interaction." + - key: table:crm_contact;field:lifecycleStageId + summary: "The contact's current relationship stage, such as lead or customer." + - key: table:crm_contact;field:ownerUserId + summary: "The user responsible for following up on this record." + - key: table:crm_contact;field:lastTouchDate + summary: "The interaction date recorded for the contact's most recent interaction." + - key: table:crm_contact;field:lastActivityDate + summary: "The latest logged interaction date maintained by the CRM." + - key: table:crm_contact;field:lastContactedDate + summary: "Last contacted date for this contact." + - key: table:crm_contact;field:lastTouchUtmMedium + summary: "The campaign channel recorded for the contact's most recent interaction." + - key: table:crm_contact;field:firstTouchLandingPage + summary: "The landing page recorded for the contact's first interaction." + - key: table:crm_contact;field:lastTouchUtmSource + summary: "The campaign source recorded for the contact's most recent interaction." + - key: table:crm_contact;field:firstTouchReferrer + summary: "The referring page recorded for the contact's first interaction." + - key: table:crm_contact;field:lastTouchUtmContent + summary: "The campaign content variation recorded for the contact's most recent interaction." + - key: table:crm_contact;field:lastTouchUtmCampaign + summary: "The campaign name recorded for the contact's most recent interaction." + - key: table:crm_contact;field:firstTouchUtmTerm + summary: "The campaign search term recorded for the contact's first interaction." + - key: table:crm_contact;field:lastTouchUtmTerm + summary: "The campaign search term recorded for the contact's most recent interaction." + - key: table:crm_contact;field:email + summary: "Email address used to identify or contact the person." + - key: table:crm_contact;field:website + summary: "The public website URL for this person or organization." + - key: table:crm_currency;slot:help + summary: "Currency codes and exchange rates used to report deal values in a base currency." + content: | + Use **{{label:crm_currency}}** to review currency codes and exchange rates used to report deal values in a base currency. + + **How rows get created:** Add currencies with **New** and set their exchange rates to your reporting base currency. Updating a rate stamps its last-updated date. Check the base currency before relying on converted totals. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_currency;section:identity + summary: "The identifying details for this record." + - key: table:crm_currency;section:data + summary: "The main values and settings for this record." + - key: table:crm_currency;section:dates + summary: "When this record was created or changed." + - key: table:crm_currency;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_currency;field:id + summary: "System-assigned record identifier." + - key: table:crm_currency;field:symbol + summary: "The symbol displayed for this currency." + - key: table:crm_currency;field:currencyCode + summary: "The currency used for monetary amounts." + - key: table:crm_currency;field:exchangeRateToBase + summary: "The multiplier used to convert an amount into the base currency." + content: | + Enter the multiplier from this currency to your reporting base currency. Conversion multiplies the amount by this rate and rounds to two decimal places. Review rates before relying on converted deal values or goals. Keep the base currency and rate settings consistent with the currency used for your reporting. + - key: table:crm_currency;field:rateLastUpdatedDate + summary: "When the currency exchange rate was last updated." + - key: table:crm_currency;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_currency;field:createDate + summary: "When this record was created." + - key: table:crm_currency;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_currency;field:isBaseCurrency + summary: "Whether this currency is the reporting base for converted amounts." + - key: table:crm_email_list;slot:help + summary: "Mailing lists and opt-in settings." + content: | + Use **Lists** to organize subscriptions and choose whether a recipient must confirm membership. Open a list to review its members and their subscription status. Use **Add to List** or **Remove from List** from Contacts to change membership. Membership alone does not establish permission for marketing email; review the recorded consent as well. + + **How rows get created:** Create a list with **New** and choose its confirmation requirements. Contacts can join through **Add to List** or your configured subscription form. + - key: table:crm_email_list;section:identity + summary: "The identifying details for this record." + - key: table:crm_email_list;section:data + summary: "The main values and settings for this record." + - key: table:crm_email_list;section:dates + summary: "When this record was created or changed." + - key: table:crm_email_list;section:crm_email_list_join_crm_email_list_member + summary: "Related members for this record." + - key: table:crm_email_list;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_email_list;field:id + summary: "System-assigned record identifier." + - key: table:crm_email_list;field:description + summary: "Additional context for this record." + - key: table:crm_email_list;field:requireDoubleOptIn + summary: "Whether recipients must confirm before their list membership becomes subscribed." + content: | + Choose whether public subscription requests require confirmation before membership becomes subscribed. The default is {{default:crm_email_list.requireDoubleOptIn}}. Review recorded consent before sending marketing email. + - key: table:crm_email_list;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_email_list;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_email_list;field:createDate + summary: "When this record was created." + - key: table:crm_email_list;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_email_list;field:slug + summary: "A short machine-friendly name for this list." + - key: table:crm_email_list;field:consentText + summary: "The exact wording shown when consent was requested." + - key: table:crm_email_list;field:listKey + summary: "A stable integration key used by hosts to subscribe people to this list." + - key: table:crm_email_list;field:memberCount + summary: "The recorded number of members in the list." + - key: table:crm_email_list;field:isPublic + summary: "Whether the list is marked as public." + - key: table:crm_industry;slot:help + summary: "Industry categories for companies." + content: | + Use **{{label:crm_industry}}** to review industry categories for companies. + + **How rows get created:** Add or retire categories with **New** and the active setting. Choose an industry on each company where useful. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_industry;section:identity + summary: "The identifying details for this record." + - key: table:crm_industry;section:dates + summary: "When this record was created or changed." + - key: table:crm_industry;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_industry;field:id + summary: "System-assigned record identifier." + - key: table:crm_industry;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_industry;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_industry;field:createDate + summary: "When this record was created." + - key: table:crm_industry;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_product;slot:help + summary: "Products and services available as deal line items." + content: | + Use **{{label:crm_product}}** to review products and services available as deal line items. + + **How rows get created:** Add your products or services with **New**, including their prices and currencies. You can then select them on deal product lines. + - key: table:crm_product;section:identity + summary: "The identifying details for this record." + - key: table:crm_product;section:pricing + summary: "Product quantity, price and discount details." + - key: table:crm_product;section:data + summary: "The main values and settings for this record." + - key: table:crm_product;section:dates + summary: "When this record was created or changed." + - key: table:crm_product;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_product;field:id + summary: "System-assigned record identifier." + - key: table:crm_product;field:currencyCode + summary: "The currency used for monetary amounts." + - key: table:crm_product;field:description + summary: "Additional context for this record." + - key: table:crm_product;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_product;field:createDate + summary: "When this record was created." + - key: table:crm_product;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_product;field:unitPrice + summary: "The price for one unit of the product." + - key: table:crm_product;field:sku + summary: "The product code used to identify the item." + - key: table:crm_deal_stage_history;slot:help + summary: "The history of a deal moving between pipeline stages." + content: | + Use **{{label:crm_deal_stage_history}}** to review the history of a deal moving between pipeline stages. + + **How rows get created:** The CRM records a history row when you create a deal or change its stage. Review the previous stage and time spent there; you do not need to add rows manually. + - key: table:crm_deal_stage_history;section:identity + summary: "The identifying details for this record." + - key: table:crm_deal_stage_history;section:dates + summary: "When this record was created or changed." + - key: table:crm_deal_stage_history;field:id + summary: "System-assigned record identifier." + - key: table:crm_deal_stage_history;field:durationInFromStageDays + summary: "The number of days the deal spent in its previous stage." + - key: table:crm_deal_stage_history;field:createDate + summary: "When this record was created." + - key: table:crm_deal_stage_history;field:userId + summary: "The user associated with this record." + - key: table:crm_deal_stage_history;field:dealId + summary: "The related sales opportunity." + - key: table:crm_deal_stage_history;field:toStageId + summary: "The stage the deal moved into." + - key: table:crm_deal_stage_history;field:fromStageId + summary: "The stage the deal moved out of." + - key: table:crm_deal_stage_history;field:transitionDate + summary: "When the deal changed stages." + - key: table:crm_deal_contact;slot:help + summary: "Contacts involved in a deal, with their relationship or role." + content: | + Use **{{label:crm_deal_contact}}** to review contacts involved in a deal, with their relationship or role. + + **How rows get created:** Use **Add Contact** on a deal and choose the contact and role. **Create Deal** and **Clone** also create these links. + - key: table:crm_deal_contact;section:identity + summary: "The identifying details for this record." + - key: table:crm_deal_contact;section:dates + summary: "When this record was created or changed." + - key: table:crm_deal_contact;field:id + summary: "System-assigned record identifier." + - key: table:crm_deal_contact;field:isPrimary + summary: "Whether this is the main contact for the deal." + - key: table:crm_deal_contact;field:createDate + summary: "When this record was created." + - key: table:crm_deal_contact;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_deal_contact;field:contactId + summary: "The linked contact." + - key: table:crm_deal_contact;field:dealId + summary: "The related sales opportunity." + - key: table:crm_deal_contact;field:contactRoleId + summary: "The contact's role in the deal." + - key: table:crm_deal_product;slot:help + summary: "Product quantities and prices on a deal." + content: | + Use **{{label:crm_deal_product}}** to review product quantities and prices on a deal. + + **How rows get created:** Add product lines from the deal record. Changes recalculate the deal amount; **Clone** copies the lines. + - key: table:crm_deal_product;section:identity + summary: "The identifying details for this record." + - key: table:crm_deal_product;section:pricing + summary: "Product quantity, price and discount details." + - key: table:crm_deal_product;section:dates + summary: "When this record was created or changed." + - key: table:crm_deal_product;field:id + summary: "System-assigned record identifier." + - key: table:crm_deal_product;field:createDate + summary: "When this record was created." + - key: table:crm_deal_product;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_deal_product;field:dealId + summary: "The related sales opportunity." + - key: table:crm_deal_product;field:unitPrice + summary: "The price for one unit of the product." + - key: table:crm_deal_product;field:discountPct + summary: "The percentage discount applied to this product line." + - key: table:crm_deal_product;field:quantity + summary: "The number of product units on the deal." + - key: table:crm_deal_product;field:productId + summary: "The product included in the deal." + - key: table:crm_deal_product;field:totalAmount + summary: "The product line amount after quantity and discount are applied." + - key: table:crm_contact_role;slot:help + summary: "Roles a contact can play in a deal or relationship." + content: | + Use **{{label:crm_contact_role}}** to review roles a contact can play in a deal or relationship. + + **How rows get created:** Add roles with **New** for use when attaching contacts to deals. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_contact_role;section:identity + summary: "The identifying details for this record." + - key: table:crm_contact_role;section:dates + summary: "When this record was created or changed." + - key: table:crm_contact_role;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_contact_role;field:id + summary: "System-assigned record identifier." + - key: table:crm_contact_role;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_contact_role;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_contact_role;field:createDate + summary: "When this record was created." + - key: table:crm_contact_role;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_win_loss_reason;slot:help + summary: "Reasons for winning or losing a deal." + content: | + Use **{{label:crm_win_loss_reason}}** to review reasons for winning or losing a deal. + + **How rows get created:** Add reasons with **New** and choose whether each represents a won or lost outcome. Select a reason when marking a deal won or lost. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_win_loss_reason;section:identity + summary: "The identifying details for this record." + - key: table:crm_win_loss_reason;section:dates + summary: "When this record was created or changed." + - key: table:crm_win_loss_reason;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_win_loss_reason;field:id + summary: "System-assigned record identifier." + - key: table:crm_win_loss_reason;field:type + summary: "Whether the reason describes a win or a loss." + - key: table:crm_win_loss_reason;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_win_loss_reason;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_win_loss_reason;field:createDate + summary: "When this record was created." + - key: table:crm_win_loss_reason;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_pipeline;slot:help + summary: "Sales pipelines that group stages." + content: | + Use **Pipelines** to organize the stages of your sales process. Open a pipeline to review and order its stages, including the stages that represent won and lost deals. Choose the default pipeline deliberately. Before creating deals, make sure the pipeline has the stages you need and that their outcomes reflect your sales process. + + **How rows get created:** Add a pipeline with **New**, then add its stages. Choose the default pipeline for your sales process. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_pipeline;section:identity + summary: "The identifying details for this record." + - key: table:crm_pipeline;section:dates + summary: "When this record was created or changed." + - key: table:crm_pipeline;section:crm_pipeline_join_crm_pipeline_stage + summary: "Related stages for this record." + - key: table:crm_pipeline;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_pipeline;field:id + summary: "System-assigned record identifier." + - key: table:crm_pipeline;field:description + summary: "Additional context for this record." + - key: table:crm_pipeline;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_pipeline;field:createDate + summary: "When this record was created." + - key: table:crm_pipeline;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_pipeline;field:isDefault + summary: "Whether this is the default sales pipeline." + - key: table:crm_pipeline_stage;slot:help + summary: "Ordered stages within a pipeline, with probability, required fields and won or lost outcomes." + content: | + Use **{{label:crm_pipeline_stage}}** to review ordered stages within a pipeline, with probability, required fields and won or lost outcomes. + + **How rows get created:** Add stages from the pipeline record. Set their order, probability and any required deal fields. Mark the stages that represent won and lost deals. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_pipeline_stage;section:identity + summary: "The identifying details for this record." + - key: table:crm_pipeline_stage;section:data + summary: "The main values and settings for this record." + - key: table:crm_pipeline_stage;section:dates + summary: "When this record was created or changed." + - key: table:crm_pipeline_stage;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_pipeline_stage;field:id + summary: "System-assigned record identifier." + - key: table:crm_pipeline_stage;field:requiredFieldsJson + summary: "The configured list of values a deal must contain before entering this stage." + content: | + Use **Required Fields Json** to specify which deal values must be present before a move into this stage is accepted. The setting is a structured list of field names, so coordinate changes with your administrator. Review the required information against your sales process and check a stage move after updating the configuration. + - key: table:crm_pipeline_stage;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_pipeline_stage;field:createDate + summary: "When this record was created." + - key: table:crm_pipeline_stage;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_pipeline_stage;field:rotDays + summary: "The number of days in this stage before an open deal needs attention." + - key: table:crm_pipeline_stage;field:isClosedWon + summary: "Whether this stage represents a won deal." + - key: table:crm_pipeline_stage;field:isClosedLost + summary: "Whether this stage represents a lost deal." + - key: table:crm_pipeline_stage;field:probabilityPct + summary: "The stage's estimated chance of winning, expressed as a percentage." + - key: table:crm_pipeline_stage;field:pipelineId + summary: "The sales pipeline for this record." + - key: table:crm_deal;slot:help + summary: "Sales opportunities tracked through a pipeline." + content: | + Use **Deals** to track sales opportunities through a pipeline. Choose **Pipeline** before **Pipeline Stage**, then record the amount, currency, expected close date and owner. Use **Move Stage**, **Mark Won**, **Mark Lost** or **Reopen** as the opportunity changes. Related contacts, products and stage history give you context for reviewing the deal. + + **How rows get created:** Use **New** to create an opportunity, or **Create Deal** on a contact. Choose the pipeline and stage before reviewing the new deal. + - key: table:crm_deal;section:identity + summary: "The identifying details for this record." + - key: table:crm_deal;section:details + summary: "Additional information and settings for this record." + - key: table:crm_deal;section:data + summary: "The main values and settings for this record." + - key: table:crm_deal;section:dates + summary: "When this record was created or changed." + - key: table:crm_deal;section:crm_deal_join_crm_deal_contact + summary: "Related contacts for this record." + - key: table:crm_deal;section:crm_deal_join_crm_deal_product + summary: "Related products for this record." + - key: table:crm_deal;section:crm_deal_join_crm_deal_stage_history + summary: "Related stage history for this record." + - key: table:crm_deal;section:crm_deal_join_crm_activity + summary: "Related activities for this record." + - key: table:crm_deal;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_deal;field:priority + summary: "Relative urgency used to organize work." + - key: table:crm_deal;field:id + summary: "System-assigned record identifier." + - key: table:crm_deal;field:currencyCode + summary: "The currency used for monetary amounts." + - key: table:crm_deal;field:description + summary: "Additional context for this record." + - key: table:crm_deal;field:amountInBaseCurrency + summary: "The deal amount converted to the configured base currency for reporting." + - key: table:crm_deal;field:probabilityOverridePct + summary: "Optional closing probability percentage that overrides the stage probability." + - key: table:crm_deal;field:primaryContactId + summary: "The main contact for this deal." + - key: table:crm_deal;field:expectedCloseDate + summary: "The date you expect the opportunity to close." + - key: table:crm_deal;field:stageEnteredDate + summary: "When the deal entered its current stage, used to identify deals that have stalled." + - key: table:crm_deal;field:createDate + summary: "When this record was created." + - key: table:crm_deal;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_deal;field:leadSourceId + summary: "The source that brought this contact or deal to your organization." + - key: table:crm_deal;field:companyId + summary: "The linked company." + - key: table:crm_deal;field:ownerUserId + summary: "The user responsible for following up on this record." + - key: table:crm_deal;field:pipelineId + summary: "The sales pipeline for this record." + - key: table:crm_deal;field:pipelineStageId + summary: "The current stage within the chosen pipeline." + - key: table:crm_deal;field:actualCloseDate + summary: "When the deal was won or lost." + - key: table:crm_deal;field:winLossReasonId + summary: "Why the deal was won or lost." + - key: table:crm_deal;field:weightedAmount + summary: "The deal amount weighted by its probability of closing." + - key: table:crm_deal;field:amount + summary: "The deal amount in the selected currency." + - key: table:crm_deal;field:lastActivityDate + summary: "The latest logged interaction date maintained by the CRM." - key: table:crm_activity_type;slot:help summary: "Types of interaction such as calls, meetings and notes." content: | - Types of interaction such as calls, meetings and notes. Outcomes are scoped to a type. + Use **{{label:crm_activity_type}}** to review types of interaction such as calls, meetings and notes. - **How rows get created:** when the host includes the crm-defaults changelog, the qbit seeds Note, Email, Call, Meeting, Form submission and Sequence step, and the CRM adds any that are missing the first time it needs them. Add your own with New. - - key: possibleValueSource:CrmActivityPriority;slot:help - summary: "Available activity priority values." + **How rows get created:** Add types with **New**. CRM intake initializes its standard activity types when needed. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_activity_type;section:identity + summary: "The identifying details for this record." + - key: table:crm_activity_type;section:data + summary: "The main values and settings for this record." + - key: table:crm_activity_type;section:dates + summary: "When this record was created or changed." + - key: table:crm_activity_type;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_activity_type;field:id + summary: "System-assigned record identifier." + - key: table:crm_activity_type;field:code + summary: "The stable code identifying this activity type." + - key: table:crm_activity_type;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_activity_type;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_activity_type;field:createDate + summary: "When this record was created." + - key: table:crm_activity_type;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_activity_type;field:iconName + summary: "The icon displayed for this activity type." + - key: table:crm_activity_type;field:isSystem + summary: "Whether this activity type is supplied for system use." + - key: table:crm_activity_participant;slot:help + summary: "People participating in a recorded activity and their roles." content: | - Choose the value that describes the record. Options: Low, Medium, High. - - key: possibleValueSource:CrmAssignableEntity;slot:help - summary: "Available assignable entity values." + Use **{{label:crm_activity_participant}}** to review people participating in a recorded activity and their roles. + + **How rows get created:** Add participants from the activity record. You choose the people and their roles; the CRM does not populate this list automatically. + - key: table:crm_activity_participant;section:identity + summary: "The identifying details for this record." + - key: table:crm_activity_participant;section:dates + summary: "When this record was created or changed." + - key: table:crm_activity_participant;field:id + summary: "System-assigned record identifier." + - key: table:crm_activity_participant;field:createDate + summary: "When this record was created." + - key: table:crm_activity_participant;field:contactId + summary: "The linked contact." + - key: table:crm_activity_participant;field:userId + summary: "The user associated with this record." + - key: table:crm_activity_participant;field:role + summary: "The person's role in the activity." + - key: table:crm_activity_participant;field:activityId + summary: "The interaction associated with this record." + - key: table:crm_activity;slot:help + summary: "Past interactions with contacts, companies and deals." content: | - Choose the value that describes the record. Options: Contact, Deal. - - key: possibleValueSource:CrmAssignStrategy;slot:help - summary: "Available assign strategy values." + Use **Activities** to record calls, meetings, messages and other interactions with contacts, companies or deals. Choose an activity type and describe what happened. You can also use **Log Activity** from a related record. Review the linked people and opportunity so that the interaction appears with the work it belongs to. + + **How rows get created:** Use **Log Activity** on a contact, company or deal, or **New**. Intake and sequence processing can also record activities. Review the linked records to keep the history accurate. + - key: table:crm_activity;section:identity + summary: "The identifying details for this record." + - key: table:crm_activity;section:details + summary: "Additional information and settings for this record." + - key: table:crm_activity;section:scheduling + summary: "Activity start, end, due dates and reminders." + - key: table:crm_activity;section:completion + summary: "Whether the activity is finished and its recorded outcome." + - key: table:crm_activity;section:participants + summary: "The people associated with this activity." + - key: table:crm_activity;section:dates + summary: "When this record was created or changed." + - key: table:crm_activity;section:crm_activity_join_crm_email_message + summary: "Related email details for this record." + - key: table:crm_activity;field:location + summary: "Where the interaction took place." + - key: table:crm_activity;field:priority + summary: "Relative urgency used to organize work." + - key: table:crm_activity;field:id + summary: "System-assigned record identifier." + - key: table:crm_activity;field:assignedToUserId + summary: "The user assigned to handle this activity." + - key: table:crm_activity;field:externalCalendarId + summary: "Identifier of the related event in the host calendar system." + - key: table:crm_activity;field:description + summary: "Additional context for this record." + - key: table:crm_activity;field:startDate + summary: "When the interaction started." + - key: table:crm_activity;field:createDate + summary: "When this record was created." + - key: table:crm_activity;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_activity;field:companyId + summary: "The linked company." + - key: table:crm_activity;field:contactId + summary: "The linked contact." + - key: table:crm_activity;field:dealId + summary: "The related sales opportunity." + - key: table:crm_activity;field:dueDate + summary: "The due date recorded on the activity." + - key: table:crm_activity;field:subject + summary: "A short description of the interaction." + - key: table:crm_activity;field:ownerUserId + summary: "The user responsible for following up on this record." + - key: table:crm_activity;field:completedDate + summary: "When this activity was completed." + - key: table:crm_activity;field:isCompleted + summary: "Whether this activity is complete." + - key: table:crm_activity;field:isReminderSet + summary: "Legacy activity reminder state." + - key: table:crm_activity;field:activityTypeId + summary: "The kind of interaction." + - key: table:crm_activity;field:outcomeId + summary: "The result of the interaction." + - key: table:crm_activity;field:conferenceLink + summary: "Meeting link associated with the interaction." + - key: table:crm_activity;field:durationMinutes + summary: "Duration of the interaction in minutes." + - key: table:crm_activity;field:direction + summary: "Whether the interaction was inbound or outbound." + - key: table:crm_activity;field:reminderDate + summary: "Legacy activity reminder time." + - key: table:crm_activity;field:endDate + summary: "When the interaction ended." + - key: table:crm_activity_outcome;slot:help + summary: "The result of an activity." content: | - Choose the value that describes the record. Options: Specific User, Round Robin, Least Active. - - key: possibleValueSource:CrmBounceType;slot:help - summary: "Available bounce type values." + Use **{{label:crm_activity_outcome}}** to review the result of an activity. + + **How rows get created:** Add an outcome with **New**, choosing the activity type it belongs to. Only outcomes for the selected type appear when you log an activity. If your administrator installs the optional CRM defaults, it seeds starter records where applicable. Review the records configured for your installation. + - key: table:crm_activity_outcome;section:identity + summary: "The identifying details for this record." + - key: table:crm_activity_outcome;section:data + summary: "The main values and settings for this record." + - key: table:crm_activity_outcome;section:dates + summary: "When this record was created or changed." + - key: table:crm_activity_outcome;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_activity_outcome;field:id + summary: "System-assigned record identifier." + - key: table:crm_activity_outcome;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_activity_outcome;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_activity_outcome;field:createDate + summary: "When this record was created." + - key: table:crm_activity_outcome;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_activity_outcome;field:activityTypeId + summary: "The kind of interaction." + - key: table:crm_sequence_step;slot:help + summary: "One timed action in an outreach sequence." content: | - Choose the value that describes the record. Options: Hard, Soft. - - key: possibleValueSource:CrmCompanyType;slot:help - summary: "Available company type values." + Use **{{label:crm_sequence_step}}** to review one timed action in an outreach sequence. + + **How rows get created:** Add steps from the sequence record. Choose a type, delay and any required email template. Review the steps in order before activating the sequence. + - key: table:crm_sequence_step;section:identity + summary: "The identifying details for this record." + - key: table:crm_sequence_step;section:data + summary: "The main values and settings for this record." + - key: table:crm_sequence_step;section:dates + summary: "When this record was created or changed." + - key: table:crm_sequence_step;field:id + summary: "System-assigned record identifier." + - key: table:crm_sequence_step;field:createDate + summary: "When this record was created." + - key: table:crm_sequence_step;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_sequence_step;field:stepType + summary: "Whether the sequence step sends email, creates a call or task, or waits." + - key: table:crm_sequence_step;field:emailTemplateId + summary: "The reusable email template selected for this message or step." + - key: table:crm_sequence_step;field:sequenceId + summary: "The outreach sequence associated with this record." + - key: table:crm_sequence_step;field:taskSubject + summary: "The subject used for the task created by this step." + - key: table:crm_sequence_step;field:taskDescription + summary: "The details included in the task created by this step." + - key: table:crm_sequence_step;field:delayDays + summary: "The delay in days used to schedule the sequence step." + - key: table:crm_sequence_step;field:stepNumber + summary: "The step's position in the outreach sequence." + - key: table:crm_sequence_step;field:delayHours + summary: "The additional delay in hours used to schedule the sequence step." + - key: table:crm_email_sequence;slot:help + summary: "Ordered outreach steps." content: | - Choose the value that describes the record. Options: Prospect, Customer, Partner, Competitor, Other. - - key: possibleValueSource:CrmConsentStatus;slot:help - summary: "Available consent status values." + Use **Email Sequences** to prepare ordered outreach steps. Add and review the steps, their delays and any email templates before activating a sequence. Enroll contacts through **Enroll in Sequence**. Check consent and email delivery readiness before expecting messages to send. You can pause a sequence while retaining its enrollments and progress. + + **How rows get created:** Create a sequence with **New**, then add its steps and templates. Use **Enroll in Sequence** on contacts after reviewing timing and consent. + - key: table:crm_email_sequence;section:identity + summary: "The identifying details for this record." + - key: table:crm_email_sequence;section:details + summary: "Additional information and settings for this record." + - key: table:crm_email_sequence;section:sendWindow + summary: "The days and hours during which sequence work may run." + - key: table:crm_email_sequence;section:dates + summary: "When this record was created or changed." + - key: table:crm_email_sequence;section:crm_email_sequence_join_crm_sequence_step + summary: "Related steps for this record." + - key: table:crm_email_sequence;section:crm_email_sequence_join_crm_sequence_enrollment + summary: "Related enrollments for this record." + - key: table:crm_email_sequence;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_email_sequence;field:id + summary: "System-assigned record identifier." + - key: table:crm_email_sequence;field:description + summary: "Additional context for this record." + - key: table:crm_email_sequence;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_email_sequence;field:createDate + summary: "When this record was created." + - key: table:crm_email_sequence;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_email_sequence;field:ownerUserId + summary: "The user responsible for following up on this record." + - key: table:crm_email_sequence;field:totalSteps + summary: "The number of steps in the sequence." + - key: table:crm_email_sequence;field:businessDaysOnly + summary: "Whether sequence work is limited to weekdays in the contact's time zone." content: | - Choose the value that describes the record. Options: Granted, Withdrawn. - - key: possibleValueSource:CrmConsentType;slot:help - summary: "Available consent type values." + Enable this setting to restrict sequence work to weekdays in the contact's time zone. The sending window also limits the hours during which due work can advance. Review the contact's time zone and the sequence window together when a step is due but has not yet run. + - key: table:crm_email_sequence;field:sendWindowEndHour + summary: "The hour at which the sequence's daily sending window closes." + - key: table:crm_email_sequence;field:sendWindowStartHour + summary: "The hour at which the sequence's daily sending window opens." + - key: table:crm_email_message;slot:help + summary: "Delivery information and content for an email associated with a contact or activity." content: | - Choose the value that describes the record. Options: Email, Call, SMS, Data Processing, Reply to inquiry. - - key: possibleValueSource:CrmDealPriority;slot:help - summary: "Available deal priority values." + Use **{{label:crm_email_message}}** to review delivery information and content for an email associated with a contact or activity. + + **How rows get created:** CRM email sending creates a message record with its delivery state. You can review it from the contact. Delivery synchronization updates supported provider results when your administrator enables it. + - key: table:crm_email_message;section:identity + summary: "The identifying details for this record." + - key: table:crm_email_message;section:addresses + summary: "The sender and recipient email addresses." + - key: table:crm_email_message;section:content + summary: "The subject and body of the email." + - key: table:crm_email_message;section:tracking + summary: "Email delivery and engagement results." + - key: table:crm_email_message;section:references + summary: "Related records and message identifiers." + - key: table:crm_email_message;section:dates + summary: "When this record was created or changed." + - key: table:crm_email_message;field:id + summary: "System-assigned record identifier." + - key: table:crm_email_message;field:threadId + summary: "The identifier connecting messages in the same conversation." + - key: table:crm_email_message;field:status + summary: "The current sending or delivery state." + - key: table:crm_email_message;field:createDate + summary: "When this record was created." + - key: table:crm_email_message;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_email_message;field:contactId + summary: "The linked contact." + - key: table:crm_email_message;field:subject + summary: "The subject line displayed to email recipients." + - key: table:crm_email_message;field:activityId + summary: "The interaction associated with this record." + - key: table:crm_email_message;field:direction + summary: "Whether the interaction was inbound or outbound." + - key: table:crm_email_message;field:emailTemplateId + summary: "The reusable email template selected for this message or step." + - key: table:crm_email_message;field:replyToEmailId + summary: "The earlier email to which this message replies." + - key: table:crm_email_message;field:fromName + summary: "The sender name displayed with the email address." + - key: table:crm_email_message;field:bccAddresses + summary: "Recipients whose addresses are hidden from other recipients." + - key: table:crm_email_message;field:openCount + summary: "The recorded number of email opens." + - key: table:crm_email_message;field:bounceType + summary: "The kind of delivery failure reported for the email." + - key: table:crm_email_message;field:fromAddress + summary: "The email address from which the message was sent." + - key: table:crm_email_message;field:firstOpenedDate + summary: "When the first email open was recorded." + - key: table:crm_email_message;field:isSpamComplaint + summary: "Whether the recipient reported the email as spam." + - key: table:crm_email_message;field:emailMessageId + summary: "The related outgoing message in the email delivery service." + - key: table:crm_email_message;field:sentDate + summary: "When the email was sent." + - key: table:crm_email_message;field:bodyText + summary: "The plain text version of the email body." + - key: table:crm_email_message;field:deliveredDate + summary: "When the email provider reported delivery." + - key: table:crm_email_message;field:bouncedDate + summary: "When the email provider reported a delivery failure." + - key: table:crm_email_message;field:ccAddresses + summary: "Recipients receiving a visible copy of the email." + - key: table:crm_email_message;field:bodyHtml + summary: "The formatted version of the email body." + - key: table:crm_email_message;field:idempotencyKey + summary: "A unique sending reference used to prevent duplicate messages." + - key: table:crm_email_message;field:clickCount + summary: "The recorded number of link clicks in the email." + - key: table:crm_email_message;field:toAddresses + summary: "The email's primary recipients." + - key: table:crm_email_message;field:isTracked + summary: "Whether engagement tracking is enabled for the email." + - key: table:crm_email_message;field:firstClickedDate + summary: "When the first email link click was recorded." + - key: table:crm_email_message;field:sequenceEnrollmentId + summary: "The sequence enrollment that generated the email." + - key: table:crm_sequence_enrollment;slot:help + summary: "A contact enrolled in a sequence, with progress, status and next scheduled step." content: | - Choose the value that describes the record. Options: Low, Medium, High, Critical. - - key: possibleValueSource:CrmDirection;slot:help - summary: "Available direction values." + Use **{{label:crm_sequence_enrollment}}** to review a contact enrolled in a sequence, with progress, status and next scheduled step. + + **How rows get created:** Use **Enroll in Sequence** on contacts to create enrollments. Background sequence processing advances due enrollments when configured by your administrator. Use **Unenroll from Sequence** to stop progression. + - key: table:crm_sequence_enrollment;section:identity + summary: "The identifying details for this record." + - key: table:crm_sequence_enrollment;section:progress + summary: "The enrollment status and next scheduled step." + - key: table:crm_sequence_enrollment;section:completion + summary: "Whether the activity is finished and its recorded outcome." + - key: table:crm_sequence_enrollment;section:errors + summary: "Failures recorded while advancing the sequence." + - key: table:crm_sequence_enrollment;section:dates + summary: "When this record was created or changed." + - key: table:crm_sequence_enrollment;field:id + summary: "System-assigned record identifier." + - key: table:crm_sequence_enrollment;field:status + summary: "Whether this enrollment is active, paused, completed or ended." + - key: table:crm_sequence_enrollment;field:createDate + summary: "When this record was created." + - key: table:crm_sequence_enrollment;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_sequence_enrollment;field:contactId + summary: "The linked contact." + - key: table:crm_sequence_enrollment;field:dealId + summary: "The related sales opportunity." + - key: table:crm_sequence_enrollment;field:completedDate + summary: "When the contact completed the sequence." + - key: table:crm_sequence_enrollment;field:failureCount + summary: "The number of recorded failures while advancing this enrollment." + - key: table:crm_sequence_enrollment;field:sequenceId + summary: "The outreach sequence associated with this record." + - key: table:crm_sequence_enrollment;field:nextStepDate + summary: "When this enrollment is next due to advance." + - key: table:crm_sequence_enrollment;field:enrolledDate + summary: "When the contact joined the sequence." + - key: table:crm_sequence_enrollment;field:unenrolledDate + summary: "When the contact left the sequence." + - key: table:crm_sequence_enrollment;field:unenrollReason + summary: "Why the contact was removed from the sequence." + - key: table:crm_sequence_enrollment;field:currentStepNumber + summary: "The last completed position in the sequence." + - key: table:crm_sequence_enrollment;field:enrolledByUserId + summary: "The user who enrolled the contact." + - key: table:crm_sequence_enrollment;field:lastFailureMessage + summary: "The most recent reason this enrollment could not advance." + - key: table:crm_email_template;slot:help + summary: "Reusable email subject and content." content: | - Choose the value that describes the record. Options: Inbound, Outbound. - - key: possibleValueSource:CrmEmailStatus;slot:help - summary: "Available email status values." + Use **{{label:crm_email_template}}** to review reusable email subject and content. + + **How rows get created:** Write a template with **New**, including its subject and body. Review the content before selecting it for outreach. + - key: table:crm_email_template;section:identity + summary: "The identifying details for this record." + - key: table:crm_email_template;section:content + summary: "The subject and body of the email." + - key: table:crm_email_template;section:ownership + summary: "The user responsible for this record." + - key: table:crm_email_template;section:dates + summary: "When this record was created or changed." + - key: table:crm_email_template;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_email_template;field:id + summary: "System-assigned record identifier." + - key: table:crm_email_template;field:createDate + summary: "When this record was created." + - key: table:crm_email_template;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_email_template;field:category + summary: "The category used to organize the email template." + - key: table:crm_email_template;field:subject + summary: "The subject line displayed to email recipients." + - key: table:crm_email_template;field:ownerUserId + summary: "The user responsible for following up on this record." + - key: table:crm_email_template;field:bodyText + summary: "The plain text version of the email body." + - key: table:crm_email_template;field:bodyHtml + summary: "The formatted version of the email body." + - key: table:crm_email_template;field:isShared + summary: "Whether the email template is marked as shared." + - key: table:crm_external_mapping;slot:help + summary: "Links between CRM records and identifiers in external systems." content: | - Choose the value that describes the record. Options: Draft, Sent, Delivered, Failed, Queued, Bounced, Complained, Opened, Clicked, Suppressed. - - key: possibleValueSource:CrmEnrollmentStatus;slot:help - summary: "Available enrollment status values." + Use **{{label:crm_external_mapping}}** to review links between CRM records and identifiers in external systems. + + **How rows get created:** This table is not used yet by a CRM synchronization service. Your integration can store external identifiers here. Erasing a contact deletes its mappings. + - key: table:crm_external_mapping;section:identity + summary: "The identifying details for this record." + - key: table:crm_external_mapping;section:sync + summary: "External identifiers and recorded synchronization results." + - key: table:crm_external_mapping;section:dates + summary: "When this record was created or changed." + - key: table:crm_external_mapping;field:id + summary: "System-assigned record identifier." + - key: table:crm_external_mapping;field:entityType + summary: "The kind of CRM record to which this item applies." + - key: table:crm_external_mapping;field:createDate + summary: "When this record was created." + - key: table:crm_external_mapping;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_external_mapping;field:lastSyncDate + summary: "When synchronization with the external system was last recorded." + - key: table:crm_external_mapping;field:externalSystem + summary: "The external service associated with this record mapping." + - key: table:crm_external_mapping;field:entityId + summary: "The CRM record associated with the external identifier." + - key: table:crm_external_mapping;field:externalId + summary: "The identifier used for the record in the external service." + - key: table:crm_external_mapping;field:syncStatus + summary: "The recorded synchronization state for this mapping." + - key: table:crm_assignment_rule;slot:help + summary: "Rules for selecting the owner of a new contact or deal." content: | - Choose the value that describes the record. Options: Active, Paused, Completed, Bounced, Replied, Unenrolled, Failed. - - key: possibleValueSource:CrmEntityType;slot:help - summary: "Available entity type values." + Use **Assignment Rules** to choose who receives contacts or deals. Set the matching conditions and choose **Specific User**, **Round Robin** or **Least Active**. For a group strategy, add the eligible users under **Members**. Review rule order and active membership before applying automatic assignment so the selected owner reflects your intended routing. + + **How rows get created:** Add a rule with **New**, then choose its matching conditions and owner-selection strategy. Add eligible users under **Members** for group assignment. + - key: table:crm_assignment_rule;section:identity + summary: "The identifying details for this record." + - key: table:crm_assignment_rule;section:data + summary: "The main values and settings for this record." + - key: table:crm_assignment_rule;section:dates + summary: "When this record was created or changed." + - key: table:crm_assignment_rule;section:crm_assignment_rule_join_crm_assignment_rule_member + summary: "Related members for this record." + - key: table:crm_assignment_rule;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_assignment_rule;field:id + summary: "System-assigned record identifier." + - key: table:crm_assignment_rule;field:description + summary: "Additional context for this record." + - key: table:crm_assignment_rule;field:entityType + summary: "The kind of CRM record to which this item applies." + - key: table:crm_assignment_rule;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_assignment_rule;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_assignment_rule;field:createDate + summary: "When this record was created." + - key: table:crm_assignment_rule;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_assignment_rule;field:criteriaJson + summary: "The matching conditions that determine whether this assignment rule applies." + - key: table:crm_assignment_rule;field:assignStrategy + summary: "How the rule chooses a user to receive the assigned record." content: | - Choose the value that describes the record. Options: Contact, Company, Deal, Activity. - - key: possibleValueSource:CrmFormConversionStatus;slot:help - summary: "Available form conversion status values." + Choose how the rule selects an owner. **Specific User** uses the configured recipient. **Round Robin** rotates through active members. In this version, **Least Active** selects the member with the oldest assignment time; it does not count open work. Review the rule's members and assignment history when checking who will receive the next record. + - key: table:crm_assignment_rule;field:assignToUserId + summary: "The recipient used when the assignment strategy is Specific User." + - key: table:crm_sales_goal;slot:help + summary: "Revenue targets for a user and period, optionally limited to a pipeline." content: | - Choose the value that describes the record. Options: New, Converted to Contact, Spam, Ignored. - - key: possibleValueSource:CrmFormType;slot:help - summary: "Available form type values." + Use **Sales Goals** to set a revenue target for a user and period. Choose the dates, target amount and currency, and optionally limit the goal to one pipeline. The **Goals** card compares current targets with won deals in the period. Review the dates and owner when a result differs from your expectations. + + **How rows get created:** Add a target with **New**, choosing the owner, period, currency and optional pipeline. Review progress on the **Goals** card. + - key: table:crm_sales_goal;section:identity + summary: "The identifying details for this record." + - key: table:crm_sales_goal;section:data + summary: "The main values and settings for this record." + - key: table:crm_sales_goal;section:dates + summary: "When this record was created or changed." + - key: table:crm_sales_goal;field:id + summary: "System-assigned record identifier." + - key: table:crm_sales_goal;field:currencyCode + summary: "The currency used for monetary amounts." + - key: table:crm_sales_goal;field:createDate + summary: "When this record was created." + - key: table:crm_sales_goal;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_sales_goal;field:userId + summary: "The user associated with this record." + - key: table:crm_sales_goal;field:pipelineId + summary: "The sales pipeline for this record." + - key: table:crm_sales_goal;field:periodStart + summary: "The first date included in the sales goal period." + - key: table:crm_sales_goal;field:periodType + summary: "The type of reporting period used for the sales goal." + - key: table:crm_sales_goal;field:targetAmount + summary: "The revenue target for the user and period." + - key: table:crm_sales_goal;field:periodEnd + summary: "The last date included in the sales goal period." + - key: table:crm_assignment_rule_member;slot:help + summary: "Users eligible for a group assignment rule." content: | - Choose the value that describes the record. Options: Contact, Demo Request, Newsletter, Notify Me, General. - - key: possibleValueSource:CrmGoalPeriod;slot:help - summary: "Available goal period values." + Use **{{label:crm_assignment_rule_member}}** to review users eligible for a group assignment rule. + + **How rows get created:** Add eligible users from the assignment rule record. Review which members are active before using the rule. + - key: table:crm_assignment_rule_member;section:identity + summary: "The identifying details for this record." + - key: table:crm_assignment_rule_member;section:data + summary: "The main values and settings for this record." + - key: table:crm_assignment_rule_member;section:dates + summary: "When this record was created or changed." + - key: table:crm_assignment_rule_member;field:id + summary: "System-assigned record identifier." + - key: table:crm_assignment_rule_member;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_assignment_rule_member;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_assignment_rule_member;field:createDate + summary: "When this record was created." + - key: table:crm_assignment_rule_member;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_assignment_rule_member;field:userId + summary: "The user associated with this record." + - key: table:crm_assignment_rule_member;field:assignmentRuleId + summary: "The assignment rule this member belongs to." + - key: table:crm_assignment_rule_member;field:lastAssignedDate + summary: "When this member last received an assignment." + - key: table:crm_lead_score_rule;slot:help + summary: "Conditions that add or subtract lead-score points." content: | - Choose the value that describes the record. Options: Monthly, Quarterly, Annual. - - key: possibleValueSource:CrmLegalBasis;slot:help - summary: "Available legal basis values." + Use **Lead Score Rules** to define the conditions that add or subtract points. Choose the record type, the value to examine, a comparison and the score adjustment. Review enabled rules together so their effects match your priorities. **Recalculate Score** applies the rules to selected contacts; background calculation refreshes contact scores when your administrator configures it. + + **How rows get created:** Add a rule with **New** and choose a field, comparison and score adjustment. Use **Recalculate Score** on contacts to apply rules immediately. Background calculation requires your administrator to configure scheduling or invoke it. + - key: table:crm_lead_score_rule;section:identity + summary: "The identifying details for this record." + - key: table:crm_lead_score_rule;section:data + summary: "The main values and settings for this record." + - key: table:crm_lead_score_rule;section:dates + summary: "When this record was created or changed." + - key: table:crm_lead_score_rule;field:name + summary: "The display name shown in lists and record links." + - key: table:crm_lead_score_rule;field:id + summary: "System-assigned record identifier." + - key: table:crm_lead_score_rule;field:operator + summary: "The comparison used to test the selected value." + - key: table:crm_lead_score_rule;field:description + summary: "Additional context for this record." + - key: table:crm_lead_score_rule;field:entityType + summary: "The kind of CRM record to which this item applies." + - key: table:crm_lead_score_rule;field:isActive + summary: "Whether this item is available for new work." + - key: table:crm_lead_score_rule;field:sortOrder + summary: "The position used to order this item among its peers." + - key: table:crm_lead_score_rule;field:createDate + summary: "When this record was created." + - key: table:crm_lead_score_rule;field:modifyDate + summary: "When this record was last changed." + - key: table:crm_lead_score_rule;field:fieldValue + summary: "The value compared with the selected record detail." + - key: table:crm_lead_score_rule;field:scoreAdjustment + summary: "The points added or subtracted when the scoring condition matches." + - key: table:crm_lead_score_rule;field:fieldPath + summary: "The record detail examined by the scoring rule." + - key: process:crm_calculate_lead_scores;slot:help + summary: "Refresh contact lead scores from active rules and save the successful-run checkpoint." content: | - Choose the value that describes the record. Options: Consent, Legitimate Interest, Contract, Legal Obligation. - - key: possibleValueSource:CrmListMemberStatus;slot:help - summary: "Available list member status values." - content: | - Choose the value that describes the record. Options: Subscribed, Unsubscribed, Bounced, Cleaned, Pending confirmation. - - key: possibleValueSource:CrmParticipantRole;slot:help - summary: "Available participant role values." - content: | - Choose the value that describes the record. Options: Organizer, Attendee, Optional. - - key: possibleValueSource:CrmScorableEntity;slot:help - summary: "Available scorable entity values." - content: | - Choose the value that describes the record. Options: Contact. - - key: possibleValueSource:CrmScoreOperator;slot:help - summary: "Available score operator values." - content: | - Choose the value that describes the record. Options: Equals, Not Equals, Contains, Greater Than, Less Than, Is Set, Is Not Set, Days Ago Greater Than, Days Ago Less Than. - - key: possibleValueSource:CrmSequenceStepType;slot:help - summary: "Available sequence step type values." - content: | - Choose the value that describes the record. Options: Email, Call, Task, Wait. - - key: possibleValueSource:CrmSyncStatus;slot:help - summary: "Available sync status values." - content: | - Choose the value that describes the record. Options: Synced, Pending, Error. - - key: possibleValueSource:CrmWinLossType;slot:help - summary: "Available win loss type values." - content: | - Choose the value that describes the record. Options: Win, Loss. + ### {{label:crm_calculate_lead_scores}} + + Use **{{label:crm_calculate_lead_scores}}** to refresh contact scores from active rules, including rules based on related company values. A successful run saves a maintenance checkpoint and checks deals needing attention. Your administrator can schedule this work or invoke it directly. Use **Recalculate Score** on Contacts to refresh selected contacts immediately. - key: process:crm_bulk_assign_owner;slot:help - summary: "Assign Owner for selected contact records." + summary: "Choose the user who will own the selected records." content: | - Choose the user who will own the selected records. The review step shows the intended work before it runs. + ### {{label:crm_bulk_assign_owner}} + + Choose the user who will own the selected records. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_auto_assign;slot:help - summary: "Auto-Assign for selected contact records." + summary: "Apply the configured assignment rules to the selected contacts." content: | - Apply the configured assignment rules to the selected contacts. The review step shows the intended work before it runs. + ### {{label:crm_auto_assign}} + + Apply the configured assignment rules to the selected contacts. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_subscribe_to_list;slot:help - summary: "Add to List for selected contact records." + summary: "Choose a list and review consent." content: | - Choose a list and review consent. Double opt-in lists require confirmation before membership becomes subscribed. The review step shows the intended work before it runs. + ### {{label:crm_subscribe_to_list}} + + Choose a list and review consent. This action subscribes the selected contacts directly; it does not send a double opt-in confirmation. List membership does not grant marketing consent. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_unsubscribe_from_list;slot:help - summary: "Remove from List for selected contact records." + summary: "Withdraw list membership for the selected contacts." content: | - Withdraw list membership for the selected contacts. This records the unsubscribe. The review step shows the intended work before it runs. + ### {{label:crm_unsubscribe_from_list}} + + Withdraw list membership for the selected contacts. This records the unsubscribe. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_enroll_in_sequence;slot:help - summary: "Enroll in Sequence for selected contact records." + summary: "Enroll the selected contacts in a sequence after checking eligibility and timing." content: | - Enroll the selected contacts in a sequence after checking eligibility and timing. The review step shows the intended work before it runs. + ### {{label:crm_enroll_in_sequence}} + + Enroll the selected contacts in a sequence after checking eligibility and timing. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_unenroll_from_sequence;slot:help - summary: "Unenroll from Sequence for selected contact records." + summary: "Stop sequence progression for the selected contacts." content: | - Stop sequence progression for the selected contacts. The review step shows the intended work before it runs. + ### {{label:crm_unenroll_from_sequence}} + + Stop sequence progression for the selected contacts. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_log_activity;slot:help - summary: "Log Activity for selected contact records." + summary: "Record an interaction for the selected records." content: | - Record an interaction for the selected records. Select an activity type and matching outcome. The review step shows the intended work before it runs. + ### {{label:crm_log_activity}} + + Record an interaction for the selected records. Select an activity type and matching outcome. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_recalculate_score;slot:help - summary: "Recalculate Score for selected contact records." + summary: "Recalculate scores from the configured lead-score rules." content: | - Recalculate scores from the configured lead-score rules. The review step shows the intended work before it runs. + ### {{label:crm_recalculate_score}} + + Recalculate scores from the configured lead-score rules. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_merge_contacts;slot:help - summary: "Merge Contacts for selected contact records." + summary: "Select exactly two records and choose the survivor." content: | - Select exactly two records and choose the survivor. Related records move to the survivor; review carefully before confirming. The review step shows the intended work before it runs. + ### {{label:crm_merge_contacts}} + + Select exactly two records and choose the survivor. Related records move to the survivor; review carefully before confirming. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_detect_duplicates;slot:help - summary: "Find Duplicates for selected contact records." + summary: "Find potential duplicates for review." content: | - Find potential duplicates for review. This action does not decide which record should survive a merge. The review step shows the intended work before it runs. + ### {{label:crm_detect_duplicates}} + + Find potential duplicates for review. This action does not decide which record should survive a merge. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_convert_lead;slot:help - summary: "Create Deal for selected contact records." + summary: "Create a sales opportunity from the selected contact, with a pipeline and stage." content: | - Create a sales opportunity from the selected contact, with a pipeline and stage. The review step shows the intended work before it runs. + ### {{label:crm_convert_lead}} + + Create a sales opportunity from the selected contact, with a pipeline and stage. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_gdpr_anonymize_contact;slot:help - summary: "Erase Personal Data for selected contact records." + summary: "Permanently anonymize the selected contacts and related personal data, redact audit details and stop sequences." content: | - Permanently anonymize the selected contacts and related personal data, redact audit details and stop sequences. This requires CRM admin access. Review the selection before confirming. The review step shows the intended work before it runs. + ### {{label:crm_gdpr_anonymize_contact}} + + Permanently anonymize the selected contacts and related personal data, redact audit details and stop sequences. This requires CRM admin access. Review the selection before confirming. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_send_email;slot:help - summary: "Send Email for selected contact records." + summary: "Send a message through the configured transport." content: | - Send a message through the configured transport. Review the recipient, subject and content; marketing consent is enforced. The review step shows the intended work before it runs. + ### {{label:crm_send_email}} + + Send a message through the configured transport. Review the recipient, subject and content; marketing consent is enforced. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_assign_company_owner;slot:help - summary: "Assign Owner for selected company records." + summary: "Choose the user who will own the selected records." content: | - Choose the user who will own the selected records. The review step shows the intended work before it runs. + ### {{label:crm_assign_company_owner}} + + Choose the user who will own the selected records. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_merge_companies;slot:help - summary: "Merge Companies for selected company records." + summary: "Select exactly two records and choose the survivor." content: | - Select exactly two records and choose the survivor. Related records move to the survivor; review carefully before confirming. The review step shows the intended work before it runs. + ### {{label:crm_merge_companies}} + + Select exactly two records and choose the survivor. Related records move to the survivor; review carefully before confirming. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_find_duplicate_companies;slot:help - summary: "Find Duplicates for selected company records." + summary: "Find potential duplicates for review." content: | - Find potential duplicates for review. This action does not decide which record should survive a merge. The review step shows the intended work before it runs. + ### {{label:crm_find_duplicate_companies}} + + Find potential duplicates for review. This action does not decide which record should survive a merge. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_log_company_activity;slot:help - summary: "Log Activity for selected company records." + summary: "Record an interaction for the selected records." content: | - Record an interaction for the selected records. Select an activity type and matching outcome. The review step shows the intended work before it runs. + ### {{label:crm_log_company_activity}} + + Record an interaction for the selected records. Select an activity type and matching outcome. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_move_deal_stage;slot:help - summary: "Move Stage for selected deal records." + summary: "Choose a stage in the current pipeline." content: | - Choose a stage in the current pipeline. Required fields and stage membership are validated. The review step shows the intended work before it runs. + ### {{label:crm_move_deal_stage}} + + Choose a stage in the current pipeline. Required fields and stage membership are validated. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_mark_deal_won;slot:help - summary: "Mark Won for selected deal records." + summary: "Move the selected deals to a won stage and record the close date." content: | - Move the selected deals to a won stage and record the close date. The review step shows the intended work before it runs. + ### {{label:crm_mark_deal_won}} + + Move the selected deals to a won stage and record the close date. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_mark_deal_lost;slot:help - summary: "Mark Lost for selected deal records." + summary: "Move the selected deals to a lost stage and record why they were lost." content: | - Move the selected deals to a lost stage and record why they were lost. The review step shows the intended work before it runs. + ### {{label:crm_mark_deal_lost}} + + Move the selected deals to a lost stage and record why they were lost. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_reopen_deal;slot:help - summary: "Reopen for selected deal records." + summary: "Return closed deals to an open stage and clear the close date." content: | - Return closed deals to an open stage and clear the close date. The review step shows the intended work before it runs. + ### {{label:crm_reopen_deal}} + + Return closed deals to an open stage and clear the close date. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_clone_deal;slot:help - summary: "Clone for selected deal records." + summary: "Create a new opportunity from an existing deal." content: | - Create a new opportunity from an existing deal. Review the copied values before using the new record. The review step shows the intended work before it runs. + ### {{label:crm_clone_deal}} + + Create a new opportunity from an existing deal. Review the copied values before using the new record. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_transfer_ownership;slot:help - summary: "Assign Owner for selected deal records." + summary: "Choose the user who will own the selected records." content: | - Choose the user who will own the selected records. The review step shows the intended work before it runs. + ### {{label:crm_transfer_ownership}} + + Choose the user who will own the selected records. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_manage_contact_on_deal;slot:help - summary: "Add Contact for selected deal records." + summary: "Link an existing contact to the selected deal and identify their role." content: | - Link an existing contact to the selected deal and identify their role. The review step shows the intended work before it runs. + ### {{label:crm_manage_contact_on_deal}} + + Link an existing contact to the selected deal and identify their role. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_log_deal_activity;slot:help - summary: "Log Activity for selected deal records." + summary: "Record an interaction for the selected records." content: | - Record an interaction for the selected records. Select an activity type and matching outcome. The review step shows the intended work before it runs. + ### {{label:crm_log_deal_activity}} + + Record an interaction for the selected records. Select an activity type and matching outcome. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_convert_form_to_contact;slot:help - summary: "Convert to Contact for selected form submission records." + summary: "Link a web lead to a contact or create a new contact." content: | - Link a web lead to a contact or create a new contact. Review the submitted email and consent evidence. The review step shows the intended work before it runs. + ### {{label:crm_convert_form_to_contact}} + + Link a web lead to a contact or create a new contact. Review the submitted email and consent evidence. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_activate_sequence;slot:help - summary: "Activate for selected email sequence records." + summary: "Make a reviewed sequence available to run." content: | - Make a reviewed sequence available to run. Confirm the steps and email transport are ready. The review step shows the intended work before it runs. + ### {{label:crm_activate_sequence}} + + Make a reviewed sequence available to run. Confirm the steps and email transport are ready. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. - key: process:crm_pause_sequence;slot:help - summary: "Pause for selected email sequence records." + summary: "Pause sequence execution while retaining enrollments and progress." content: | - Pause sequence execution while retaining enrollments and progress. The review step shows the intended work before it runs. + ### {{label:crm_pause_sequence}} + + Pause sequence execution while retaining enrollments and progress. The review step shows the intended work before it runs. Check your selected records and the requested action before continuing. Review the result afterward to confirm which records were processed and whether any require attention. + - key: process:crm_expire_consents;slot:help + summary: "Expire unconfirmed list memberships and count consent records past their expiry date." + content: | + ### {{label:crm_expire_consents}} + + Review **List Members** when a subscription remains unconfirmed. This background action withdraws pending memberships after the confirmation waiting period and invalidates their confirmation tokens. It also counts consent records whose expiry dates have passed; it does not rewrite those consent decisions. Marketing eligibility checks expiry dates independently. Your administrator configures when this action runs. - key: process:crm_process_sequence_steps;slot:help summary: "Advance due active sequence enrollments." content: | - Advance due active sequence enrollments. Email steps require consent and a ready transport. - - key: process:crm_calculate_lead_scores;slot:help - summary: "Refresh contact and company lead scores from enabled rules and save the successful-run checkpoint." - content: | - Refresh contact and company lead scores from enabled rules and save the successful-run checkpoint. + ### {{label:crm_process_sequence_steps}} + + This background action advances active enrollments that are due. It respects the sequence's weekday and sending-window settings in the contact's time zone. Email steps require an eligible recipient and working email delivery. Review enrollment status, the next step date and the last failure message when an expected step has not run. Your administrator configures scheduling or invokes this action directly. - key: process:crm_sync_email_delivery;slot:help summary: "Refresh CRM delivery states from the configured email provider." content: | - Refresh CRM delivery states from the configured email provider. - - key: process:crm_expire_consents;slot:help - summary: "Record expired consent so marketing eligibility reflects the current state." - content: | - Record expired consent so marketing eligibility reflects the current state. + ### {{label:crm_sync_email_delivery}} + + This background action refreshes CRM email delivery information from the configured email provider. Review **Email Messages** to see the recorded delivery state and associated dates. Sending and delivery are separate events, so a sent message may still be awaiting a delivery update. Check provider results when the recorded state needs investigation. Your administrator configures scheduling or invokes this action directly. - key: process:crm_job_state.bulkInsert;slot:help summary: "Import new records from a file." content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. - key: process:crm_job_state.bulkEdit;slot:help summary: "Apply a change to selected records." content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. - key: process:crm_job_state.bulkEditWithFile;slot:help summary: "Update existing records using a file." content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. - key: process:crm_job_state.bulkDelete;slot:help summary: "Delete the selected records." content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_external_mapping.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_external_mapping.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_external_mapping.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_external_mapping.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_assignment_rule.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_assignment_rule.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_assignment_rule.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_assignment_rule.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_assignment_rule_member.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_assignment_rule_member.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_assignment_rule_member.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_assignment_rule_member.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_lead_score_rule.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_lead_score_rule.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_lead_score_rule.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_lead_score_rule.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_sales_goal.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_sales_goal.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_sales_goal.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_sales_goal.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_email_message.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_email_message.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_email_message.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_email_message.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_email_sequence.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_email_sequence.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_email_sequence.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_email_sequence.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_email_template.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_email_template.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_email_template.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_email_template.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_sequence_enrollment.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_sequence_enrollment.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_sequence_enrollment.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_sequence_enrollment.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_sequence_step.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_sequence_step.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_sequence_step.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_sequence_step.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_contact_role.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_contact_role.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_contact_role.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_contact_role.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_deal.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_deal.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_deal.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_deal.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_deal_contact.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_deal_contact.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_deal_contact.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_deal_contact.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_deal_product.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_deal_product.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_deal_product.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_deal_product.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_deal_stage_history.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_deal_stage_history.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_deal_stage_history.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_deal_stage_history.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_pipeline.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_pipeline.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_pipeline.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_pipeline.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_pipeline_stage.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_pipeline_stage.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_pipeline_stage.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_pipeline_stage.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_product.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_product.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_product.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_product.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_win_loss_reason.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_win_loss_reason.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_win_loss_reason.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_win_loss_reason.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_company.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_company.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_company.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_company.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_consent_record.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_consent_record.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_consent_record.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_consent_record.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_contact.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_contact.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_contact.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_contact.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_currency.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_currency.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_currency.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_currency.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_email_list.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_email_list.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_email_list.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_email_list.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_email_list_member.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_email_list_member.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_email_list_member.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_email_list_member.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_form_submission.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_form_submission.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_form_submission.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_form_submission.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_industry.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_industry.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_industry.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_industry.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_lead_source.bulkInsert;slot:help - summary: "Import new records from a file." - content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_lead_source.bulkEdit;slot:help - summary: "Apply a change to selected records." - content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_lead_source.bulkEditWithFile;slot:help - summary: "Update existing records using a file." - content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_lead_source.bulkDelete;slot:help - summary: "Delete the selected records." - content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. - key: process:crm_lifecycle_stage.bulkInsert;slot:help summary: "Import new records from a file." content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. - key: process:crm_lifecycle_stage.bulkEdit;slot:help summary: "Apply a change to selected records." content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. - key: process:crm_lifecycle_stage.bulkEditWithFile;slot:help summary: "Update existing records using a file." content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. - key: process:crm_lifecycle_stage.bulkDelete;slot:help summary: "Delete the selected records." content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_activity.bulkInsert;slot:help + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_lead_source.bulkInsert;slot:help summary: "Import new records from a file." content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_activity.bulkEdit;slot:help + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_lead_source.bulkEdit;slot:help summary: "Apply a change to selected records." content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_activity.bulkEditWithFile;slot:help + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_lead_source.bulkEditWithFile;slot:help summary: "Update existing records using a file." content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_activity.bulkDelete;slot:help + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_lead_source.bulkDelete;slot:help summary: "Delete the selected records." content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_activity_outcome.bulkInsert;slot:help + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_company.bulkInsert;slot:help summary: "Import new records from a file." content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_activity_outcome.bulkEdit;slot:help + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_company.bulkEdit;slot:help summary: "Apply a change to selected records." content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_activity_outcome.bulkEditWithFile;slot:help + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_company.bulkEditWithFile;slot:help summary: "Update existing records using a file." content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_activity_outcome.bulkDelete;slot:help + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_company.bulkDelete;slot:help summary: "Delete the selected records." content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. - - key: process:crm_activity_participant.bulkInsert;slot:help + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_consent_record.bulkInsert;slot:help summary: "Import new records from a file." content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. - - key: process:crm_activity_participant.bulkEdit;slot:help + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_consent_record.bulkEdit;slot:help summary: "Apply a change to selected records." content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. - - key: process:crm_activity_participant.bulkEditWithFile;slot:help + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_consent_record.bulkEditWithFile;slot:help summary: "Update existing records using a file." content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. - - key: process:crm_activity_participant.bulkDelete;slot:help + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_consent_record.bulkDelete;slot:help summary: "Delete the selected records." content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_email_list_member.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_email_list_member.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_email_list_member.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_email_list_member.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_form_submission.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_form_submission.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_form_submission.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_form_submission.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_contact.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_contact.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_contact.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_contact.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_currency.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_currency.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_currency.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_currency.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_email_list.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_email_list.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_email_list.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_email_list.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_industry.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_industry.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_industry.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_industry.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_product.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_product.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_product.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_product.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_deal_stage_history.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_deal_stage_history.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_deal_stage_history.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_deal_stage_history.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_deal_contact.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_deal_contact.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_deal_contact.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_deal_contact.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_deal_product.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_deal_product.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_deal_product.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_deal_product.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_contact_role.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_contact_role.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_contact_role.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_contact_role.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_win_loss_reason.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_win_loss_reason.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_win_loss_reason.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_win_loss_reason.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_pipeline.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_pipeline.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_pipeline.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_pipeline.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_pipeline_stage.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_pipeline_stage.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_pipeline_stage.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_pipeline_stage.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_deal.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_deal.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_deal.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_deal.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. - key: process:crm_activity_type.bulkInsert;slot:help summary: "Import new records from a file." content: | - Upload a file, select or create a mapping, and review validation results before inserting records. Use the CRM starter profiles for contacts, companies and deals when available. Imports use the same permissions and tenant locks as record screens. + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. - key: process:crm_activity_type.bulkEdit;slot:help summary: "Apply a change to selected records." content: | - Select the records to change, set the intended field values and review the result before confirming. Relationship validation, consent immutability and tenant locks still apply. + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. - key: process:crm_activity_type.bulkEditWithFile;slot:help summary: "Update existing records using a file." content: | - Upload the changes and choose fields that identify existing records. Review matches and validation errors before confirming. Only records accessible to your session can be changed. + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. - key: process:crm_activity_type.bulkDelete;slot:help summary: "Delete the selected records." content: | - Review the selected records before confirming deletion. Deletion is not a substitute for Erase Personal Data on contacts, which also redacts related personal copies and audit details. Consent records cannot be deleted. + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_activity_participant.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_activity_participant.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_activity_participant.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_activity_participant.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_activity.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_activity.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_activity.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_activity.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_activity_outcome.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_activity_outcome.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_activity_outcome.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_activity_outcome.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_sequence_step.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_sequence_step.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_sequence_step.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_sequence_step.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_email_sequence.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_email_sequence.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_email_sequence.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_email_sequence.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_email_message.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_email_message.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_email_message.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_email_message.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_sequence_enrollment.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_sequence_enrollment.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_sequence_enrollment.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_sequence_enrollment.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_email_template.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_email_template.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_email_template.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_email_template.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_external_mapping.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_external_mapping.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_external_mapping.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_external_mapping.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_assignment_rule.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_assignment_rule.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_assignment_rule.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_assignment_rule.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_sales_goal.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_sales_goal.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_sales_goal.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_sales_goal.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_assignment_rule_member.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_assignment_rule_member.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_assignment_rule_member.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_assignment_rule_member.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: process:crm_lead_score_rule.bulkInsert;slot:help + summary: "Import new records from a file." + content: | + Use this action to add records from a file. Review the file contents and match its columns to the values you want to import. Check the proposed records before continuing, then review the results so you can identify any rows that need correction. + - key: process:crm_lead_score_rule.bulkEdit;slot:help + summary: "Apply a change to selected records." + content: | + Use this action to apply the same changes to selected records. Check your selection before choosing the values to update. Review the proposed changes before continuing, then inspect the results to see which records were updated and which need further attention. + - key: process:crm_lead_score_rule.bulkEditWithFile;slot:help + summary: "Update existing records using a file." + content: | + Use this action to update existing records from a file. Check that the file identifies the intended records and contains the changes you want to apply. Review the proposed updates before continuing, then inspect the results for records that need correction. + - key: process:crm_lead_score_rule.bulkDelete;slot:help + summary: "Delete the selected records." + content: | + Use this action to delete selected records. Review your selection carefully and confirm that you no longer need those records before continuing. Related records or validation rules may prevent deletion. Check the results to see which records were deleted and which remain. + - key: widget:crm_today;slot:label + summary: "Your current pipeline, recent contacts, web leads and overdue activity totals." + - key: widget:crm_pipeline_summary;slot:label + summary: "Deal counts and weighted values grouped by stage in the selected pipeline." + - key: widget:crm_deal_forecast;slot:label + summary: "Expected sales revenue grouped by closing period." + - key: widget:crm_rotting_deals;slot:label + summary: "Open deals that have exceeded their stage attention threshold." + - key: widget:crm_recent_web_leads;slot:label + summary: "Recent web submissions and their contact conversion status." + - key: widget:crm_goals;slot:label + summary: "Current sales targets compared with revenue from won deals." + - key: widget:crm_sales_leaderboard;slot:label + summary: "Sales results by owner for the current quarter." + - key: widget:crm_open_pipeline;slot:label + summary: "The total value of open sales opportunities." + - key: widget:crm_won_month;slot:label + summary: "The value of deals won this month." + - key: widget:crm_new_contacts;slot:label + summary: "The number of contacts created in the past 30 days." + - key: widget:crm_new_web_leads;slot:label + summary: "The number of web leads received in the past seven days." + - key: widget:crm_overdue_activities;slot:label + summary: "Your incomplete activities whose due dates have passed." + - key: widget:crm_company_join_crm_activity;slot:label + summary: "Activities linked to the current companies record." + - key: widget:crm_company_join_crm_contact;slot:label + summary: "Contacts linked to the current companies record." + - key: widget:crm_company_join_crm_deal;slot:label + summary: "Deals linked to the current companies record." + - key: widget:crm_contact_join_crm_deal;slot:label + summary: "Deals linked to the current contacts record." + - key: widget:crm_contact_join_crm_email_list_member;slot:label + summary: "List Members linked to the current contacts record." + - key: widget:crm_contact_join_crm_sequence_enrollment;slot:label + summary: "Sequence Enrollments linked to the current contacts record." + - key: widget:crm_contact_join_crm_email_message;slot:label + summary: "Email Messages linked to the current contacts record." + - key: widget:crm_contact_join_crm_form_submission;slot:label + summary: "Web Leads linked to the current contacts record." + - key: widget:crm_contact_join_crm_activity;slot:label + summary: "Activities linked to the current contacts record." + - key: widget:crm_contact_join_crm_consent_record;slot:label + summary: "Consent Records linked to the current contacts record." + - key: widget:crm_email_list_join_crm_email_list_member;slot:label + summary: "List Members linked to the current lists record." + - key: widget:crm_pipeline_join_crm_pipeline_stage;slot:label + summary: "Pipeline Stages linked to the current pipelines record." + - key: widget:crm_deal_join_crm_deal_contact;slot:label + summary: "Deal Contacts linked to the current deals record." + - key: widget:crm_deal_join_crm_deal_product;slot:label + summary: "Deal Products linked to the current deals record." + - key: widget:crm_deal_join_crm_deal_stage_history;slot:label + summary: "Deal Stage History linked to the current deals record." + - key: widget:crm_deal_join_crm_activity;slot:label + summary: "Activities linked to the current deals record." + - key: widget:crm_activity_join_crm_activity_participant;slot:label + summary: "Activity Participants linked to the current activities record." + - key: widget:crm_activity_join_crm_email_message;slot:label + summary: "Email Messages linked to the current activities record." + - key: widget:crm_email_sequence_join_crm_sequence_step;slot:label + summary: "Sequence Steps linked to the current email sequences record." + - key: widget:crm_email_sequence_join_crm_sequence_enrollment;slot:label + summary: "Sequence Enrollments linked to the current email sequences record." + - key: widget:crm_assignment_rule_join_crm_assignment_rule_member;slot:label + summary: "Assignment Rule Members linked to the current assignment rules record." + - key: widget:crm_contact_timeline;slot:label + summary: "The contact's interactions and email history in chronological order." + - key: possibleValueSource:CrmWinLossType;slot:help + summary: "Available won or lost outcome values." + content: | + Choose from {{values:CrmWinLossType}}. + - key: possibleValueSource:CrmSyncStatus;slot:help + summary: "Available synchronization status values." + content: | + Choose from {{values:CrmSyncStatus}}. + - key: possibleValueSource:CrmConsentStatus;slot:help + summary: "Available consent status values." + content: | + Choose from {{values:CrmConsentStatus}}. + - key: possibleValueSource:CrmLegalBasis;slot:help + summary: "Available legal basis values." + content: | + Choose from {{values:CrmLegalBasis}}. + - key: possibleValueSource:CrmFormConversionStatus;slot:help + summary: "Available form conversion status values." + content: | + Choose from {{values:CrmFormConversionStatus}}. + - key: possibleValueSource:CrmEnrollmentStatus;slot:help + summary: "Available enrollment status values." + content: | + Choose from {{values:CrmEnrollmentStatus}}. + - key: possibleValueSource:CrmEmailStatus;slot:help + summary: "Available email status values." + content: | + Choose from {{values:CrmEmailStatus}}. + - key: possibleValueSource:CrmDealPriority;slot:help + summary: "Available deal priority values." + content: | + Choose from {{values:CrmDealPriority}}. + - key: possibleValueSource:CrmParticipantRole;slot:help + summary: "Available participant role values." + content: | + Choose from {{values:CrmParticipantRole}}. + - key: possibleValueSource:CrmConsentType;slot:help + summary: "Available consent type values." + content: | + Choose from {{values:CrmConsentType}}. + - key: possibleValueSource:CrmScoreOperator;slot:help + summary: "Available scoring comparison values." + content: | + Choose from {{values:CrmScoreOperator}}. + - key: possibleValueSource:CrmBounceType;slot:help + summary: "Available bounce type values." + content: | + Choose from {{values:CrmBounceType}}. + - key: possibleValueSource:CrmActivityPriority;slot:help + summary: "Available activity priority values." + content: | + Choose from {{values:CrmActivityPriority}}. + - key: possibleValueSource:CrmScorableEntity;slot:help + summary: "Available record types eligible for scoring values." + content: | + Choose from {{values:CrmScorableEntity}}. + - key: possibleValueSource:CrmAssignableEntity;slot:help + summary: "Available record types eligible for assignment values." + content: | + Choose from {{values:CrmAssignableEntity}}. + - key: possibleValueSource:CrmListMemberStatus;slot:help + summary: "Available list member status values." + content: | + Choose from {{values:CrmListMemberStatus}}. + - key: possibleValueSource:CrmEntityType;slot:help + summary: "Available record type values." + content: | + Choose from {{values:CrmEntityType}}. + - key: possibleValueSource:CrmDirection;slot:help + summary: "Available direction values." + content: | + Choose from {{values:CrmDirection}}. + - key: possibleValueSource:CrmGoalPeriod;slot:help + summary: "Available goal period values." + content: | + Choose from {{values:CrmGoalPeriod}}. + - key: possibleValueSource:CrmCompanyType;slot:help + summary: "Available company type values." + content: | + Choose from {{values:CrmCompanyType}}. + - key: possibleValueSource:CrmAssignStrategy;slot:help + summary: "Available owner selection strategy values." + content: | + Choose from {{values:CrmAssignStrategy}}. + - key: possibleValueSource:CrmSequenceStepType;slot:help + summary: "Available sequence step type values." + content: | + Choose from {{values:CrmSequenceStepType}}. + - key: possibleValueSource:CrmFormType;slot:help + summary: "Available form type values." + content: | + Choose from {{values:CrmFormType}}. + - key: possibleValueSource:crm_lifecycle_stage;slot:help + summary: "Available lifecycle stages you can select for a related record." + - key: possibleValueSource:crm_lead_source;slot:help + summary: "Available lead sources you can select for a related record." + - key: possibleValueSource:crm_company;slot:help + summary: "Available companies you can select for a related record." + - key: possibleValueSource:crm_form_submission;slot:help + summary: "Available web leads you can select for a related record." + - key: possibleValueSource:crm_contact;slot:help + summary: "Available contacts you can select for a related record." + - key: possibleValueSource:crm_currency;slot:help + summary: "Available currencies you can select for a related record." + - key: possibleValueSource:crm_email_list;slot:help + summary: "Available lists you can select for a related record." + - key: possibleValueSource:crm_industry;slot:help + summary: "Available industries you can select for a related record." + - key: possibleValueSource:crm_product;slot:help + summary: "Available products you can select for a related record." + - key: possibleValueSource:crm_contact_role;slot:help + summary: "Available contact roles you can select for a related record." + - key: possibleValueSource:crm_win_loss_reason;slot:help + summary: "Available win/loss reasons you can select for a related record." + - key: possibleValueSource:crm_pipeline;slot:help + summary: "Available pipelines you can select for a related record." + - key: possibleValueSource:crm_pipeline_stage;slot:help + summary: "Available pipeline stages you can select for a related record." + - key: possibleValueSource:crm_deal;slot:help + summary: "Available deals you can select for a related record." + - key: possibleValueSource:crm_activity_type;slot:help + summary: "Available activity types you can select for a related record." + - key: possibleValueSource:crm_activity;slot:help + summary: "Available activities you can select for a related record." + - key: possibleValueSource:crm_activity_outcome;slot:help + summary: "Available activity outcomes you can select for a related record." + - key: possibleValueSource:crm_email_sequence;slot:help + summary: "Available email sequences you can select for a related record." + - key: possibleValueSource:crm_email_template;slot:help + summary: "Available email templates you can select for a related record." + - key: possibleValueSource:crm_assignment_rule;slot:help + summary: "Available assignment rules you can select for a related record." + - key: widget:crm_setup;slot:label + summary: "Check pipeline, lifecycle stage, base currency and email delivery setup." diff --git a/src/test/java/com/kingsrook/qbits/crm/CrmPublicationHelpTest.java b/src/test/java/com/kingsrook/qbits/crm/CrmPublicationHelpTest.java index 2551573..9695626 100644 --- a/src/test/java/com/kingsrook/qbits/crm/CrmPublicationHelpTest.java +++ b/src/test/java/com/kingsrook/qbits/crm/CrmPublicationHelpTest.java @@ -23,7 +23,6 @@ package com.kingsrook.qbits.crm; import java.util.ArrayList; import java.util.List; -import com.kingsrook.qbits.crm.help.CrmHelpBundleStandIn; import com.kingsrook.qqq.api.actions.GetTableApiFieldsAction; import com.kingsrook.qqq.api.model.APIVersion; import com.kingsrook.qqq.api.model.actions.GetTableApiFieldsInput; @@ -33,8 +32,8 @@ import com.kingsrook.qqq.api.model.metadata.tables.ApiTableMetaDataContainer; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.instances.QInstanceValidator; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; -import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleValueSourceType; -import com.kingsrook.qqq.backend.core.model.metadata.processes.QFrontendStepMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.help.bundles.HelpBundles; +import com.kingsrook.qqq.backend.core.testing.HelpBundleAssertions; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -101,52 +100,29 @@ class CrmPublicationHelpTest extends BaseTest /******************************************************************************* - ** Help covers app every table main field process and enum. + ** Native registration is safe without help tables and covers all CRM metadata. *******************************************************************************/ @Test - void helpCoversAppEveryTableMainFieldProcessAndEnum() throws Exception + void helpCoversOwnedMetadataWithoutHelpTable() { - var entries = CrmHelpBundleStandIn.entries(); var instance = QContext.getQInstance(); - assertThat(entries).containsKey("app:crm;slot:help"); - for(var table : instance.getTables().values()) + assertThat(instance.getTable("helpContent")).isNull(); + assertThat(HelpBundles.of(instance).getBundles()).singleElement().satisfies(bundle -> { - assertThat(entries).containsKey("table:" + table.getName() + ";slot:help"); - assertThat(table.getHelpContent().get("help")).isNotEmpty(); - if(CrmAppMetaData.MAIN_TABLES.contains(table.getName())) - { - for(var field : table.getFields().values()) - { - assertThat(entries).containsKey("table:" + table.getName() + ";field:" + field.getName()); - assertThat(field.getHelpContents()).as(table.getName() + "." + field.getName()).isNotEmpty(); - } - } - } - for(var process : instance.getProcesses().values()) - { - if(process.getName().startsWith("crm_")) - { - assertThat(entries).containsKey("process:" + process.getName() + ";slot:help"); - // Core creates dotted bulk-process names after QBit production; they retain core screen help. - if(!process.getName().contains(".")) - { - process.getStepList().stream().filter(QFrontendStepMetaData.class::isInstance).map(QFrontendStepMetaData.class::cast) - .forEach(step -> assertThat(step.getHelpContents()).isNotEmpty()); - } - } - } - for(var pvs : instance.getPossibleValueSources().values()) - { - if(pvs.getType() == QPossibleValueSourceType.ENUM && pvs.getName().startsWith("Crm")) - { - assertThat(entries).containsKey("possibleValueSource:" + pvs.getName() + ";slot:help"); - } - } - entries.values().forEach(entry -> - { - assertThat(entry.get("summary").asText()).hasSizeLessThanOrEqualTo(120).isNotBlank(); - assertThat(entry.get("content").asText()).isNotBlank(); + assertThat(bundle.getId()).isEqualTo("qbit-crm"); + assertThat(bundle.getVersion()).isEqualTo(CrmQBitProducer.VERSION); + assertThat(bundle.getLayer().name()).isEqualTo("QBIT"); }); + HelpBundles.syncOnStartup(instance); + HelpBundleAssertions.forInstance(instance) + .bundles("help/qbit-crm.yaml") + .owning(target -> target.name().equals("crm") || target.name().startsWith("crm_") || target.name().startsWith("Crm")) + .assertComplete(); + // Core's gate validates these entries but does not require widget or possible-value coverage. + var entries = HelpBundles.of(instance).resolveWinningEntries(); + instance.getWidgets().keySet().stream().filter(name -> name.startsWith("crm_")).forEach(name -> + assertThat(entries).containsKey(new HelpBundles.EntryKey("widget:" + name + ";slot:label", "ALL_SCREENS"))); + instance.getPossibleValueSources().keySet().stream().filter(name -> name.startsWith("crm_") || name.startsWith("Crm")).forEach(name -> + assertThat(entries).containsKey(new HelpBundles.EntryKey("possibleValueSource:" + name + ";slot:help", "ALL_SCREENS"))); } } - diff --git a/src/test/java/com/kingsrook/qbits/crm/CrmTablesGuardrailTest.java b/src/test/java/com/kingsrook/qbits/crm/CrmTablesGuardrailTest.java index 94bb1e8..c200535 100644 --- a/src/test/java/com/kingsrook/qbits/crm/CrmTablesGuardrailTest.java +++ b/src/test/java/com/kingsrook/qbits/crm/CrmTablesGuardrailTest.java @@ -31,8 +31,7 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; -import com.kingsrook.qbits.crm.help.CrmHelpBundleStandIn; -import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpContent; +import com.kingsrook.qqq.backend.core.model.metadata.help.bundles.HelpBundles; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -160,18 +159,17 @@ class CrmTablesGuardrailTest extends BaseTest @Test void everyTableHasEmptyStateHelp() throws Exception { - assertThat(CrmHelpBundleStandIn.entries()).allSatisfy((key, entry) -> assertThat(entry.path("summary").asText().length()).as(key).isLessThanOrEqualTo(120)); + HelpBundles.of(qInstance()).getBundles().getFirst().getEntries() + .forEach(entry -> assertThat(entry.getSummary()).as(entry.getKey()).hasSizeLessThanOrEqualTo(120)); for(String table : crmTables()) { - List help = qInstance().getTable(table).getHelpContent() == null ? null : qInstance().getTable(table).getHelpContent().get("help"); - assertThat(help).as(table + " table help").isNotEmpty(); - assertThat(help.get(0).getContent()).as(table + " help says how rows get created").contains("**How rows get created:**"); + assertThat(tableHelp(table)).as(table + " help says how rows get created").contains("**How rows get created:**"); } for(String table : NOT_WRITTEN_YET) { - assertThat(qInstance().getTable(table).getHelpContent().get("help").get(0).getContent()).as(table + " says it is not used yet").contains("not used yet"); + assertThat(tableHelp(table)).as(table + " says it is not used yet").contains("not used yet"); } - assertThat(qInstance().getApp("crm").getHelpContent()).containsKey("help"); + assertThat(HelpBundles.of(qInstance()).resolveWinningEntries()).containsKey(new HelpBundles.EntryKey("app:crm;slot:help", "ALL_SCREENS")); } @@ -184,14 +182,26 @@ class CrmTablesGuardrailTest extends BaseTest { for(String table : CrmDefaultsChangelogTest.SEEDED_TABLES) { - assertThat(qInstance().getTable(table).getHelpContent().get("help").get(0).getContent()).as(table).contains("seeds"); + assertThat(tableHelp(table)).as(table).contains("seeds"); } } /******************************************************************************* - ** + ** Read the winning table entry from the registered native bundle. + *******************************************************************************/ + private String tableHelp(String table) + { + var entry = HelpBundles.of(qInstance()).resolveWinningEntries().get(new HelpBundles.EntryKey("table:" + table + ";slot:help", "ALL_SCREENS")); + assertThat(entry).as(table + " table help").isNotNull(); + return (entry.entry().getContent()); + } + + + + /******************************************************************************* + ** Test instance after CRM production. *******************************************************************************/ private com.kingsrook.qqq.backend.core.model.metadata.QInstance qInstance() { -- 2.54.0