@elevasis/core 0.14.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/index.d.ts +60 -0
  2. package/dist/index.js +198 -1
  3. package/dist/organization-model/index.d.ts +60 -0
  4. package/dist/organization-model/index.js +198 -1
  5. package/dist/test-utils/index.d.ts +399 -363
  6. package/dist/test-utils/index.js +198 -1
  7. package/package.json +3 -3
  8. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +444 -309
  9. package/src/business/acquisition/activity-events.ts +12 -3
  10. package/src/business/acquisition/api-schemas.test.ts +315 -4
  11. package/src/business/acquisition/api-schemas.ts +140 -17
  12. package/src/business/acquisition/build-templates.ts +44 -0
  13. package/src/business/acquisition/crm-next-action.test.ts +262 -0
  14. package/src/business/acquisition/crm-next-action.ts +220 -0
  15. package/src/business/acquisition/crm-priority.test.ts +216 -0
  16. package/src/business/acquisition/crm-priority.ts +349 -0
  17. package/src/business/acquisition/crm-state-actions.test.ts +12 -21
  18. package/src/business/acquisition/deal-ownership.test.ts +351 -0
  19. package/src/business/acquisition/deal-ownership.ts +120 -0
  20. package/src/business/acquisition/derive-actions.test.ts +101 -37
  21. package/src/business/acquisition/derive-actions.ts +49 -24
  22. package/src/business/acquisition/index.ts +163 -149
  23. package/src/business/acquisition/types.ts +48 -4
  24. package/src/execution/engine/index.ts +4 -3
  25. package/src/execution/engine/tools/lead-service-types.ts +68 -51
  26. package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -5
  27. package/src/execution/engine/tools/platform/acquisition/types.ts +3 -1
  28. package/src/execution/engine/tools/registry.ts +4 -3
  29. package/src/execution/engine/tools/tool-maps.ts +821 -816
  30. package/src/organization-model/domains/prospecting.ts +204 -1
  31. package/src/organization-model/domains/sales.test.ts +218 -0
  32. package/src/organization-model/domains/sales.ts +558 -366
  33. package/src/organization-model/types.ts +2 -2
  34. package/src/platform/constants/versions.ts +1 -1
  35. package/src/reference/_generated/contracts.md +444 -309
  36. package/src/supabase/database.types.ts +2978 -2958
@@ -6,13 +6,35 @@ export const ProspectingLifecycleStageSchema = DisplayMetadataSchema.extend({
6
6
  order: z.number().int().min(0)
7
7
  })
8
8
 
9
+ export const ProspectingBuildTemplateStepSchema = DisplayMetadataSchema.extend({
10
+ id: ModelIdSchema,
11
+ primaryEntity: z.enum(['company', 'contact']),
12
+ outputs: z.array(z.enum(['company', 'contact', 'export'])).min(1),
13
+ stageKey: ModelIdSchema,
14
+ dependsOn: z.array(ModelIdSchema).optional(),
15
+ dependencyMode: z.literal('per-record-eligibility'),
16
+ capabilityKey: ModelIdSchema,
17
+ defaultBatchSize: z.number().int().positive(),
18
+ maxBatchSize: z.number().int().positive()
19
+ }).refine((step) => step.defaultBatchSize <= step.maxBatchSize, {
20
+ message: 'defaultBatchSize must be less than or equal to maxBatchSize',
21
+ path: ['defaultBatchSize']
22
+ })
23
+
24
+ export const ProspectingBuildTemplateSchema = DisplayMetadataSchema.extend({
25
+ id: ModelIdSchema,
26
+ steps: z.array(ProspectingBuildTemplateStepSchema).min(1)
27
+ })
28
+
9
29
  export const OrganizationModelProspectingSchema = z.object({
10
30
  listEntityId: ModelIdSchema,
11
31
  companyEntityId: ModelIdSchema,
12
32
  contactEntityId: ModelIdSchema,
13
33
  description: DescriptionSchema.optional(),
14
34
  companyStages: z.array(ProspectingLifecycleStageSchema).min(1),
15
- contactStages: z.array(ProspectingLifecycleStageSchema).min(1)
35
+ contactStages: z.array(ProspectingLifecycleStageSchema).min(1),
36
+ defaultBuildTemplateId: ModelIdSchema,
37
+ buildTemplates: z.array(ProspectingBuildTemplateSchema).min(1)
16
38
  })
17
39
 
18
40
  export const DEFAULT_ORGANIZATION_MODEL_PROSPECTING: z.infer<typeof OrganizationModelProspectingSchema> = {
@@ -29,5 +51,186 @@ export const DEFAULT_ORGANIZATION_MODEL_PROSPECTING: z.infer<typeof Organization
29
51
  { id: 'verified', label: 'Verified', order: 2 },
30
52
  { id: 'personalized', label: 'Personalized', order: 3 },
31
53
  { id: 'uploaded', label: 'Uploaded', order: 4 }
54
+ ],
55
+ defaultBuildTemplateId: 'local-services',
56
+ buildTemplates: [
57
+ {
58
+ id: 'local-services',
59
+ label: 'Local Services Prospecting',
60
+ description:
61
+ 'Curated local-services list build using company sourcing, website analysis, qualification, contact discovery, verification, personalization, and review.',
62
+ steps: [
63
+ {
64
+ id: 'source-companies',
65
+ label: 'Source companies',
66
+ primaryEntity: 'company',
67
+ outputs: ['company'],
68
+ stageKey: 'populated',
69
+ dependencyMode: 'per-record-eligibility',
70
+ capabilityKey: 'lead-gen.company.source',
71
+ defaultBatchSize: 100,
72
+ maxBatchSize: 250
73
+ },
74
+ {
75
+ id: 'analyze-websites',
76
+ label: 'Analyze websites',
77
+ primaryEntity: 'company',
78
+ outputs: ['company'],
79
+ stageKey: 'extracted',
80
+ dependsOn: ['source-companies'],
81
+ dependencyMode: 'per-record-eligibility',
82
+ capabilityKey: 'lead-gen.company.website-extract',
83
+ defaultBatchSize: 50,
84
+ maxBatchSize: 100
85
+ },
86
+ {
87
+ id: 'qualify-companies',
88
+ label: 'Qualify companies',
89
+ primaryEntity: 'company',
90
+ outputs: ['company'],
91
+ stageKey: 'qualified',
92
+ dependsOn: ['analyze-websites'],
93
+ dependencyMode: 'per-record-eligibility',
94
+ capabilityKey: 'lead-gen.company.qualify',
95
+ defaultBatchSize: 100,
96
+ maxBatchSize: 250
97
+ },
98
+ {
99
+ id: 'find-contacts',
100
+ label: 'Find contacts',
101
+ primaryEntity: 'contact',
102
+ outputs: ['contact'],
103
+ stageKey: 'discovered',
104
+ dependsOn: ['qualify-companies'],
105
+ dependencyMode: 'per-record-eligibility',
106
+ capabilityKey: 'lead-gen.contact.discover',
107
+ defaultBatchSize: 50,
108
+ maxBatchSize: 100
109
+ },
110
+ {
111
+ id: 'verify-emails',
112
+ label: 'Verify emails',
113
+ primaryEntity: 'contact',
114
+ outputs: ['contact'],
115
+ stageKey: 'verified',
116
+ dependsOn: ['find-contacts'],
117
+ dependencyMode: 'per-record-eligibility',
118
+ capabilityKey: 'lead-gen.contact.verify-email',
119
+ defaultBatchSize: 100,
120
+ maxBatchSize: 500
121
+ },
122
+ {
123
+ id: 'personalize',
124
+ label: 'Personalize',
125
+ primaryEntity: 'contact',
126
+ outputs: ['contact'],
127
+ stageKey: 'personalized',
128
+ dependsOn: ['verify-emails'],
129
+ dependencyMode: 'per-record-eligibility',
130
+ capabilityKey: 'lead-gen.contact.personalize',
131
+ defaultBatchSize: 25,
132
+ maxBatchSize: 100
133
+ },
134
+ {
135
+ id: 'review',
136
+ label: 'Review',
137
+ primaryEntity: 'contact',
138
+ outputs: ['export'],
139
+ stageKey: 'uploaded',
140
+ dependsOn: ['personalize'],
141
+ dependencyMode: 'per-record-eligibility',
142
+ capabilityKey: 'lead-gen.review.outreach-ready',
143
+ defaultBatchSize: 25,
144
+ maxBatchSize: 100
145
+ }
146
+ ]
147
+ },
148
+ {
149
+ id: 'dtc-subscription-apollo-clickup',
150
+ label: 'DTC Subscription Apollo Export',
151
+ description:
152
+ 'Prospecting pipeline for DTC subscription or subscription-ready brands where Apollo is the source and contact-enrichment layer, Elevasis handles company research and fit scoring, and approved leads export as an approved lead list.',
153
+ steps: [
154
+ {
155
+ id: 'import-apollo-search',
156
+ label: 'Import Apollo search',
157
+ description: 'Pull companies and seed contact data from a predefined Apollo search or list.',
158
+ primaryEntity: 'company',
159
+ outputs: ['company', 'contact'],
160
+ stageKey: 'populated',
161
+ dependencyMode: 'per-record-eligibility',
162
+ capabilityKey: 'lead-gen.company.apollo-import',
163
+ defaultBatchSize: 250,
164
+ maxBatchSize: 1000
165
+ },
166
+ {
167
+ id: 'analyze-websites',
168
+ label: 'Analyze websites',
169
+ description: 'Extract subscription, product, retention, and tech-stack signals from each brand website.',
170
+ primaryEntity: 'company',
171
+ outputs: ['company'],
172
+ stageKey: 'extracted',
173
+ dependsOn: ['import-apollo-search'],
174
+ dependencyMode: 'per-record-eligibility',
175
+ capabilityKey: 'lead-gen.company.website-extract',
176
+ defaultBatchSize: 50,
177
+ maxBatchSize: 100
178
+ },
179
+ {
180
+ id: 'score-dtc-fit',
181
+ label: 'Score DTC fit',
182
+ description:
183
+ 'Classify subscription potential, consumable-product fit, retention maturity, and disqualifiers.',
184
+ primaryEntity: 'company',
185
+ outputs: ['company'],
186
+ stageKey: 'qualified',
187
+ dependsOn: ['analyze-websites'],
188
+ dependencyMode: 'per-record-eligibility',
189
+ capabilityKey: 'lead-gen.company.dtc-subscription-qualify',
190
+ defaultBatchSize: 100,
191
+ maxBatchSize: 250
192
+ },
193
+ {
194
+ id: 'enrich-decision-makers',
195
+ label: 'Enrich decision-makers',
196
+ description:
197
+ 'Use Apollo to find qualified contacts such as founders, retention leads, lifecycle leads, and marketing owners.',
198
+ primaryEntity: 'contact',
199
+ outputs: ['contact'],
200
+ stageKey: 'discovered',
201
+ dependsOn: ['score-dtc-fit'],
202
+ dependencyMode: 'per-record-eligibility',
203
+ capabilityKey: 'lead-gen.contact.apollo-decision-maker-enrich',
204
+ defaultBatchSize: 100,
205
+ maxBatchSize: 250
206
+ },
207
+ {
208
+ id: 'verify-emails',
209
+ label: 'Verify emails',
210
+ description: 'Verify deliverability before the QC and handoff step.',
211
+ primaryEntity: 'contact',
212
+ outputs: ['contact'],
213
+ stageKey: 'verified',
214
+ dependsOn: ['enrich-decision-makers'],
215
+ dependencyMode: 'per-record-eligibility',
216
+ capabilityKey: 'lead-gen.contact.verify-email',
217
+ defaultBatchSize: 250,
218
+ maxBatchSize: 500
219
+ },
220
+ {
221
+ id: 'review-and-export',
222
+ label: 'Review and export',
223
+ description: 'Operator QC approves or rejects leads, then approved records are exported as a lead list.',
224
+ primaryEntity: 'company',
225
+ outputs: ['export'],
226
+ stageKey: 'uploaded',
227
+ dependsOn: ['verify-emails'],
228
+ dependencyMode: 'per-record-eligibility',
229
+ capabilityKey: 'lead-gen.export.list',
230
+ defaultBatchSize: 100,
231
+ maxBatchSize: 250
232
+ }
233
+ ]
234
+ }
32
235
  ]
33
236
  }
@@ -0,0 +1,218 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import {
3
+ CRM_PIPELINE_DEFINITION,
4
+ CRM_DISCOVERY_REPLIED_STATE,
5
+ CRM_DISCOVERY_LINK_SENT_STATE,
6
+ CRM_DISCOVERY_NUDGING_STATE,
7
+ CRM_DISCOVERY_BOOKING_CANCELLED_STATE,
8
+ CRM_REPLY_SENT_STATE,
9
+ CRM_FOLLOWUP_1_SENT_STATE,
10
+ CRM_FOLLOWUP_2_SENT_STATE,
11
+ CRM_FOLLOWUP_3_SENT_STATE,
12
+ CRM_PRIORITY_BUCKETS,
13
+ DEFAULT_CRM_PRIORITY_RULE_CONFIG,
14
+ getValidStatesForStage,
15
+ findPipeline,
16
+ ACQ_LIST_MEMBERS_LEAD_GEN_PIPELINE,
17
+ ACQ_LIST_COMPANIES_LEAD_GEN_PIPELINE,
18
+ LEAD_GEN_PIPELINE_DEFINITIONS
19
+ } from './sales'
20
+
21
+ describe('CRM_PIPELINE_DEFINITION', () => {
22
+ it('has pipelineKey "crm"', () => {
23
+ expect(CRM_PIPELINE_DEFINITION.pipelineKey).toBe('crm')
24
+ })
25
+
26
+ it('has entityKey "crm.deal"', () => {
27
+ expect(CRM_PIPELINE_DEFINITION.entityKey).toBe('crm.deal')
28
+ })
29
+
30
+ it('has exactly 6 stages', () => {
31
+ expect(CRM_PIPELINE_DEFINITION.stages).toHaveLength(6)
32
+ })
33
+
34
+ it('stage keys are interested, proposal, closing, closed_won, closed_lost, nurturing in order', () => {
35
+ const keys = CRM_PIPELINE_DEFINITION.stages.map((s) => s.stageKey)
36
+ expect(keys).toEqual(['interested', 'proposal', 'closing', 'closed_won', 'closed_lost', 'nurturing'])
37
+ })
38
+
39
+ it('interested stage has exactly 8 states', () => {
40
+ const interested = CRM_PIPELINE_DEFINITION.stages.find((s) => s.stageKey === 'interested')
41
+ expect(interested?.states).toHaveLength(8)
42
+ })
43
+
44
+ it('interested stage contains all 8 expected state constants', () => {
45
+ const interested = CRM_PIPELINE_DEFINITION.stages.find((s) => s.stageKey === 'interested')!
46
+ const stateKeys = interested.states.map((s) => s.stateKey)
47
+ expect(stateKeys).toContain(CRM_DISCOVERY_REPLIED_STATE.stateKey)
48
+ expect(stateKeys).toContain(CRM_DISCOVERY_LINK_SENT_STATE.stateKey)
49
+ expect(stateKeys).toContain(CRM_DISCOVERY_NUDGING_STATE.stateKey)
50
+ expect(stateKeys).toContain(CRM_DISCOVERY_BOOKING_CANCELLED_STATE.stateKey)
51
+ expect(stateKeys).toContain(CRM_REPLY_SENT_STATE.stateKey)
52
+ expect(stateKeys).toContain(CRM_FOLLOWUP_1_SENT_STATE.stateKey)
53
+ expect(stateKeys).toContain(CRM_FOLLOWUP_2_SENT_STATE.stateKey)
54
+ expect(stateKeys).toContain(CRM_FOLLOWUP_3_SENT_STATE.stateKey)
55
+ })
56
+
57
+ it('interested stage states reference the exported constants by identity', () => {
58
+ const interested = CRM_PIPELINE_DEFINITION.stages.find((s) => s.stageKey === 'interested')!
59
+ expect(interested.states).toContain(CRM_DISCOVERY_REPLIED_STATE)
60
+ expect(interested.states).toContain(CRM_FOLLOWUP_3_SENT_STATE)
61
+ })
62
+
63
+ it.each(['proposal', 'closing', 'closed_won', 'closed_lost', 'nurturing'])(
64
+ '%s stage has an empty states array',
65
+ (stageKey) => {
66
+ const stage = CRM_PIPELINE_DEFINITION.stages.find((s) => s.stageKey === stageKey)
67
+ expect(stage).toBeDefined()
68
+ expect(stage?.states).toHaveLength(0)
69
+ }
70
+ )
71
+
72
+ it('closed_won stage has empty states array', () => {
73
+ const stage = CRM_PIPELINE_DEFINITION.stages.find((s) => s.stageKey === 'closed_won')
74
+ expect(stage?.states).toEqual([])
75
+ })
76
+
77
+ it('closed_lost stage has empty states array', () => {
78
+ const stage = CRM_PIPELINE_DEFINITION.stages.find((s) => s.stageKey === 'closed_lost')
79
+ expect(stage?.states).toEqual([])
80
+ })
81
+ })
82
+
83
+ describe('CRM state constant shapes', () => {
84
+ it('CRM_DISCOVERY_REPLIED_STATE has correct stateKey and label', () => {
85
+ expect(CRM_DISCOVERY_REPLIED_STATE).toEqual({ stateKey: 'discovery_replied', label: 'Discovery Replied' })
86
+ })
87
+
88
+ it('CRM_FOLLOWUP_1_SENT_STATE has correct stateKey and label', () => {
89
+ expect(CRM_FOLLOWUP_1_SENT_STATE).toEqual({ stateKey: 'followup_1_sent', label: 'Follow-up 1 Sent' })
90
+ })
91
+
92
+ it('CRM_FOLLOWUP_2_SENT_STATE has correct stateKey and label', () => {
93
+ expect(CRM_FOLLOWUP_2_SENT_STATE).toEqual({ stateKey: 'followup_2_sent', label: 'Follow-up 2 Sent' })
94
+ })
95
+
96
+ it('CRM_FOLLOWUP_3_SENT_STATE has correct stateKey and label', () => {
97
+ expect(CRM_FOLLOWUP_3_SENT_STATE).toEqual({ stateKey: 'followup_3_sent', label: 'Follow-up 3 Sent' })
98
+ })
99
+ })
100
+
101
+ describe('DEFAULT_CRM_PRIORITY_RULE_CONFIG', () => {
102
+ it('defines the canonical CRM priority buckets in sort order', () => {
103
+ expect(CRM_PRIORITY_BUCKETS.map((bucket) => bucket.bucketKey)).toEqual([
104
+ 'needs_response',
105
+ 'follow_up_due',
106
+ 'waiting',
107
+ 'stale',
108
+ 'closed_low'
109
+ ])
110
+ expect(CRM_PRIORITY_BUCKETS.map((bucket) => bucket.rank)).toEqual([10, 20, 30, 40, 50])
111
+ })
112
+
113
+ it('includes display metadata for each bucket', () => {
114
+ for (const bucket of CRM_PRIORITY_BUCKETS) {
115
+ expect(bucket.label).toEqual(expect.any(String))
116
+ expect(bucket.rank).toEqual(expect.any(Number))
117
+ expect(bucket.color).toEqual(expect.any(String))
118
+ }
119
+ })
120
+
121
+ it('maps CRM states and closed stages into priority rules', () => {
122
+ expect(DEFAULT_CRM_PRIORITY_RULE_CONFIG.closedStageKeys).toEqual(['closed_won', 'closed_lost'])
123
+ expect(DEFAULT_CRM_PRIORITY_RULE_CONFIG.followUpAfterDaysByStateKey.discovery_link_sent).toBe(3)
124
+ expect(DEFAULT_CRM_PRIORITY_RULE_CONFIG.staleAfterDays).toBeGreaterThan(0)
125
+ })
126
+ })
127
+
128
+ describe('getValidStatesForStage', () => {
129
+ it('returns all 8 states for the interested stage', () => {
130
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, 'interested')
131
+ expect(states).toHaveLength(8)
132
+ expect(states.map((s) => s.stateKey)).toContain('discovery_replied')
133
+ expect(states.map((s) => s.stateKey)).toContain('followup_3_sent')
134
+ })
135
+
136
+ it('returns empty array for the proposal stage (no states defined)', () => {
137
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, 'proposal')
138
+ expect(states).toEqual([])
139
+ })
140
+
141
+ it('returns empty array for the closing stage (no states defined)', () => {
142
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, 'closing')
143
+ expect(states).toEqual([])
144
+ })
145
+
146
+ it('returns empty array for closed_won stage', () => {
147
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, 'closed_won')
148
+ expect(states).toEqual([])
149
+ })
150
+
151
+ it('returns empty array for closed_lost stage', () => {
152
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, 'closed_lost')
153
+ expect(states).toEqual([])
154
+ })
155
+
156
+ it('returns empty array for nurturing stage (no states defined)', () => {
157
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, 'nurturing')
158
+ expect(states).toEqual([])
159
+ })
160
+
161
+ it('returns empty array for an unknown stage key', () => {
162
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, 'unknown_stage')
163
+ expect(states).toEqual([])
164
+ })
165
+
166
+ it('returns empty array for an empty string stage key', () => {
167
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, '')
168
+ expect(states).toEqual([])
169
+ })
170
+
171
+ it('is case-sensitive — "Interested" does not match "interested"', () => {
172
+ const states = getValidStatesForStage(CRM_PIPELINE_DEFINITION, 'Interested')
173
+ expect(states).toEqual([])
174
+ })
175
+
176
+ it('works with the lead-gen member pipeline for known stage', () => {
177
+ const states = getValidStatesForStage(ACQ_LIST_MEMBERS_LEAD_GEN_PIPELINE, 'outreach')
178
+ expect(states.length).toBeGreaterThan(0)
179
+ expect(states.map((s) => s.stateKey)).toContain('personalized')
180
+ })
181
+
182
+ it('works with the lead-gen member pipeline for unknown stage', () => {
183
+ const states = getValidStatesForStage(ACQ_LIST_MEMBERS_LEAD_GEN_PIPELINE, 'nonexistent')
184
+ expect(states).toEqual([])
185
+ })
186
+ })
187
+
188
+ describe('findPipeline', () => {
189
+ it('finds a pipeline by pipelineKey when present', () => {
190
+ const found = findPipeline(LEAD_GEN_PIPELINE_DEFINITIONS['acq.list-member'], 'lead-gen')
191
+ expect(found).toBe(ACQ_LIST_MEMBERS_LEAD_GEN_PIPELINE)
192
+ })
193
+
194
+ it('returns undefined for an unknown pipelineKey', () => {
195
+ const found = findPipeline(LEAD_GEN_PIPELINE_DEFINITIONS['acq.list-member'], 'crm')
196
+ expect(found).toBeUndefined()
197
+ })
198
+
199
+ it('returns undefined for an empty array', () => {
200
+ const found = findPipeline([], 'lead-gen')
201
+ expect(found).toBeUndefined()
202
+ })
203
+ })
204
+
205
+ describe('LEAD_GEN_PIPELINE_DEFINITIONS', () => {
206
+ it('has entries for acq.list-member and acq.list-company', () => {
207
+ expect(LEAD_GEN_PIPELINE_DEFINITIONS).toHaveProperty('acq.list-member')
208
+ expect(LEAD_GEN_PIPELINE_DEFINITIONS).toHaveProperty('acq.list-company')
209
+ })
210
+
211
+ it('acq.list-member entry contains the ACQ_LIST_MEMBERS_LEAD_GEN_PIPELINE', () => {
212
+ expect(LEAD_GEN_PIPELINE_DEFINITIONS['acq.list-member']).toContain(ACQ_LIST_MEMBERS_LEAD_GEN_PIPELINE)
213
+ })
214
+
215
+ it('acq.list-company entry contains the ACQ_LIST_COMPANIES_LEAD_GEN_PIPELINE', () => {
216
+ expect(LEAD_GEN_PIPELINE_DEFINITIONS['acq.list-company']).toContain(ACQ_LIST_COMPANIES_LEAD_GEN_PIPELINE)
217
+ })
218
+ })