@hed-hog/contact 0.0.279 → 0.0.285

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 (70) hide show
  1. package/README.md +2 -0
  2. package/dist/person/dto/create-followup.dto.d.ts +5 -0
  3. package/dist/person/dto/create-followup.dto.d.ts.map +1 -0
  4. package/dist/person/dto/create-followup.dto.js +31 -0
  5. package/dist/person/dto/create-followup.dto.js.map +1 -0
  6. package/dist/person/dto/create-interaction.dto.d.ts +12 -0
  7. package/dist/person/dto/create-interaction.dto.d.ts.map +1 -0
  8. package/dist/person/dto/create-interaction.dto.js +39 -0
  9. package/dist/person/dto/create-interaction.dto.js.map +1 -0
  10. package/dist/person/dto/create.dto.d.ts +24 -0
  11. package/dist/person/dto/create.dto.d.ts.map +1 -1
  12. package/dist/person/dto/create.dto.js +56 -1
  13. package/dist/person/dto/create.dto.js.map +1 -1
  14. package/dist/person/dto/duplicates-query.dto.d.ts +8 -0
  15. package/dist/person/dto/duplicates-query.dto.d.ts.map +1 -0
  16. package/dist/person/dto/duplicates-query.dto.js +45 -0
  17. package/dist/person/dto/duplicates-query.dto.js.map +1 -0
  18. package/dist/person/dto/merge.dto.d.ts +6 -0
  19. package/dist/person/dto/merge.dto.d.ts.map +1 -0
  20. package/dist/person/dto/merge.dto.js +35 -0
  21. package/dist/person/dto/merge.dto.js.map +1 -0
  22. package/dist/person/dto/update-lifecycle-stage.dto.d.ts +13 -0
  23. package/dist/person/dto/update-lifecycle-stage.dto.d.ts.map +1 -0
  24. package/dist/person/dto/update-lifecycle-stage.dto.js +34 -0
  25. package/dist/person/dto/update-lifecycle-stage.dto.js.map +1 -0
  26. package/dist/person/dto/update.dto.d.ts +8 -1
  27. package/dist/person/dto/update.dto.d.ts.map +1 -1
  28. package/dist/person/dto/update.dto.js +36 -0
  29. package/dist/person/dto/update.dto.js.map +1 -1
  30. package/dist/person/person.controller.d.ts +57 -1
  31. package/dist/person/person.controller.d.ts.map +1 -1
  32. package/dist/person/person.controller.js +85 -3
  33. package/dist/person/person.controller.js.map +1 -1
  34. package/dist/person/person.service.d.ts +79 -0
  35. package/dist/person/person.service.d.ts.map +1 -1
  36. package/dist/person/person.service.js +730 -9
  37. package/dist/person/person.service.js.map +1 -1
  38. package/hedhog/data/route.yaml +18 -0
  39. package/hedhog/frontend/app/_components/crm-coming-soon.tsx.ejs +110 -110
  40. package/hedhog/frontend/app/_components/crm-nav.tsx.ejs +73 -73
  41. package/hedhog/frontend/app/_lib/crm-mocks.ts.ejs +498 -256
  42. package/hedhog/frontend/app/_lib/crm-sections.tsx.ejs +81 -81
  43. package/hedhog/frontend/app/accounts/_components/account-form-sheet.tsx.ejs +477 -0
  44. package/hedhog/frontend/app/accounts/_components/account-types.ts.ejs +62 -0
  45. package/hedhog/frontend/app/accounts/page.tsx.ejs +886 -15
  46. package/hedhog/frontend/app/activities/page.tsx.ejs +15 -15
  47. package/hedhog/frontend/app/contact-type/page.tsx.ejs +105 -91
  48. package/hedhog/frontend/app/dashboard/page.tsx.ejs +506 -573
  49. package/hedhog/frontend/app/document-type/page.tsx.ejs +105 -91
  50. package/hedhog/frontend/app/follow-ups/page.tsx.ejs +15 -15
  51. package/hedhog/frontend/app/page.tsx.ejs +5 -5
  52. package/hedhog/frontend/app/person/_components/person-form-sheet.tsx.ejs +1440 -1103
  53. package/hedhog/frontend/app/person/_components/person-interaction-dialog.tsx.ejs +4 -3
  54. package/hedhog/frontend/app/person/_components/person-types.ts.ejs +14 -0
  55. package/hedhog/frontend/app/person/page.tsx.ejs +108 -190
  56. package/hedhog/frontend/app/pipeline/_components/lead-detail-sheet.tsx.ejs +599 -0
  57. package/hedhog/frontend/app/pipeline/page.tsx.ejs +1074 -299
  58. package/hedhog/frontend/app/reports/page.tsx.ejs +15 -15
  59. package/hedhog/frontend/messages/en.json +107 -0
  60. package/hedhog/frontend/messages/pt.json +106 -0
  61. package/package.json +6 -6
  62. package/src/person/dto/create-followup.dto.ts +15 -0
  63. package/src/person/dto/create-interaction.dto.ts +23 -0
  64. package/src/person/dto/create.dto.ts +50 -0
  65. package/src/person/dto/duplicates-query.dto.ts +34 -0
  66. package/src/person/dto/merge.dto.ts +15 -0
  67. package/src/person/dto/update-lifecycle-stage.dto.ts +19 -0
  68. package/src/person/dto/update.dto.ts +31 -1
  69. package/src/person/person.controller.ts +63 -2
  70. package/src/person/person.service.ts +1096 -7
@@ -1,256 +1,498 @@
1
- import type {
2
- Person,
3
- PersonLifecycleStage,
4
- PersonSource,
5
- UserOption,
6
- } from '../person/_components/person-types';
7
-
8
- export type CrmLead = Pick<
9
- Person,
10
- | 'id'
11
- | 'name'
12
- | 'type'
13
- | 'status'
14
- | 'trade_name'
15
- | 'owner_user_id'
16
- | 'owner_user'
17
- | 'source'
18
- | 'lifecycle_stage'
19
- | 'next_action_at'
20
- | 'created_at'
21
- > & {
22
- score: number;
23
- dealValue: number;
24
- lastInteractionAt: string;
25
- companyLabel?: string | null;
26
- tags: string[];
27
- };
28
-
29
- export const crmOwners: UserOption[] = [
30
- { id: 1, name: 'Ana Paula' },
31
- { id: 2, name: 'Bruno Costa' },
32
- { id: 3, name: 'Camila Rocha' },
33
- { id: 4, name: 'Diego Martins' },
34
- ];
35
-
36
- export const crmStageOrder: PersonLifecycleStage[] = [
37
- 'new',
38
- 'contacted',
39
- 'qualified',
40
- 'proposal',
41
- 'negotiation',
42
- 'customer',
43
- 'lost',
44
- ];
45
-
46
- export const crmMockLeads: CrmLead[] = [
47
- {
48
- id: 101,
49
- name: 'Maria Fernanda',
50
- type: 'individual',
51
- status: 'active',
52
- owner_user_id: 1,
53
- owner_user: crmOwners[0],
54
- source: 'website',
55
- lifecycle_stage: 'new',
56
- next_action_at: '2026-03-18T10:00:00.000Z',
57
- created_at: '2026-03-12T09:30:00.000Z',
58
- lastInteractionAt: '2026-03-14T16:20:00.000Z',
59
- score: 72,
60
- dealValue: 12000,
61
- tags: ['inbound', 'alto fit'],
62
- },
63
- {
64
- id: 102,
65
- name: 'Clínica Aurora',
66
- trade_name: 'Aurora Saúde',
67
- type: 'company',
68
- status: 'active',
69
- owner_user_id: 2,
70
- owner_user: crmOwners[1],
71
- source: 'referral',
72
- lifecycle_stage: 'qualified',
73
- next_action_at: '2026-03-17T14:30:00.000Z',
74
- created_at: '2026-03-04T11:00:00.000Z',
75
- lastInteractionAt: '2026-03-15T09:00:00.000Z',
76
- score: 88,
77
- dealValue: 46000,
78
- companyLabel: 'Rede privada',
79
- tags: ['saúde', 'enterprise'],
80
- },
81
- {
82
- id: 103,
83
- name: 'Lucas Tavares',
84
- type: 'individual',
85
- status: 'active',
86
- owner_user_id: 1,
87
- owner_user: crmOwners[0],
88
- source: 'social',
89
- lifecycle_stage: 'contacted',
90
- next_action_at: '2026-03-16T13:00:00.000Z',
91
- created_at: '2026-03-10T08:15:00.000Z',
92
- lastInteractionAt: '2026-03-15T08:45:00.000Z',
93
- score: 54,
94
- dealValue: 8500,
95
- tags: ['social', 'nutrição'],
96
- },
97
- {
98
- id: 104,
99
- name: 'Grupo Prisma',
100
- type: 'company',
101
- status: 'active',
102
- owner_user_id: 3,
103
- owner_user: crmOwners[2],
104
- source: 'outbound',
105
- lifecycle_stage: 'proposal',
106
- next_action_at: '2026-03-19T15:00:00.000Z',
107
- created_at: '2026-02-27T10:00:00.000Z',
108
- lastInteractionAt: '2026-03-14T18:10:00.000Z',
109
- score: 91,
110
- dealValue: 92000,
111
- companyLabel: 'B2B SaaS',
112
- tags: ['outbound', 'proposal'],
113
- },
114
- {
115
- id: 105,
116
- name: 'Paulo Henrique',
117
- type: 'individual',
118
- status: 'active',
119
- owner_user_id: 4,
120
- owner_user: crmOwners[3],
121
- source: 'inbound',
122
- lifecycle_stage: 'negotiation',
123
- next_action_at: '2026-03-18T11:30:00.000Z',
124
- created_at: '2026-03-01T14:00:00.000Z',
125
- lastInteractionAt: '2026-03-15T11:10:00.000Z',
126
- score: 79,
127
- dealValue: 22000,
128
- tags: ['urgente', 'negociação'],
129
- },
130
- {
131
- id: 106,
132
- name: 'Hospital Vida Nova',
133
- type: 'company',
134
- status: 'active',
135
- owner_user_id: 2,
136
- owner_user: crmOwners[1],
137
- source: 'website',
138
- lifecycle_stage: 'customer',
139
- next_action_at: '2026-03-25T09:00:00.000Z',
140
- created_at: '2026-02-10T09:00:00.000Z',
141
- lastInteractionAt: '2026-03-13T17:40:00.000Z',
142
- score: 97,
143
- dealValue: 135000,
144
- companyLabel: 'Conta estratégica',
145
- tags: ['cliente', 'upsell'],
146
- },
147
- {
148
- id: 107,
149
- name: 'Fernanda Sales',
150
- type: 'individual',
151
- status: 'inactive',
152
- owner_user_id: 3,
153
- owner_user: crmOwners[2],
154
- source: 'other',
155
- lifecycle_stage: 'lost',
156
- next_action_at: null,
157
- created_at: '2026-02-18T16:20:00.000Z',
158
- lastInteractionAt: '2026-03-02T10:20:00.000Z',
159
- score: 35,
160
- dealValue: 0,
161
- tags: ['sem budget'],
162
- },
163
- {
164
- id: 108,
165
- name: 'Studio Vertex',
166
- trade_name: 'Vertex Creative',
167
- type: 'company',
168
- status: 'active',
169
- owner_user_id: null,
170
- owner_user: null,
171
- source: 'social',
172
- lifecycle_stage: 'new',
173
- next_action_at: '2026-03-17T09:30:00.000Z',
174
- created_at: '2026-03-14T13:40:00.000Z',
175
- lastInteractionAt: '2026-03-14T13:40:00.000Z',
176
- score: 60,
177
- dealValue: 18000,
178
- companyLabel: 'Agência',
179
- tags: ['sem owner'],
180
- },
181
- {
182
- id: 109,
183
- name: 'Ricardo Gomes',
184
- type: 'individual',
185
- status: 'active',
186
- owner_user_id: 4,
187
- owner_user: crmOwners[3],
188
- source: 'referral',
189
- lifecycle_stage: 'qualified',
190
- next_action_at: '2026-03-16T17:00:00.000Z',
191
- created_at: '2026-03-06T11:15:00.000Z',
192
- lastInteractionAt: '2026-03-15T15:30:00.000Z',
193
- score: 82,
194
- dealValue: 15000,
195
- tags: ['indicação'],
196
- },
197
- {
198
- id: 110,
199
- name: 'Construtora Mosaico',
200
- type: 'company',
201
- status: 'active',
202
- owner_user_id: 1,
203
- owner_user: crmOwners[0],
204
- source: 'outbound',
205
- lifecycle_stage: 'proposal',
206
- next_action_at: '2026-03-20T10:00:00.000Z',
207
- created_at: '2026-03-03T08:00:00.000Z',
208
- lastInteractionAt: '2026-03-15T14:00:00.000Z',
209
- score: 76,
210
- dealValue: 68000,
211
- companyLabel: 'Construção civil',
212
- tags: ['B2B', 'follow-up'],
213
- },
214
- {
215
- id: 111,
216
- name: 'Beatriz Nunes',
217
- type: 'individual',
218
- status: 'active',
219
- owner_user_id: 2,
220
- owner_user: crmOwners[1],
221
- source: 'inbound',
222
- lifecycle_stage: 'contacted',
223
- next_action_at: '2026-03-16T09:00:00.000Z',
224
- created_at: '2026-03-11T12:00:00.000Z',
225
- lastInteractionAt: '2026-03-15T12:20:00.000Z',
226
- score: 58,
227
- dealValue: 9800,
228
- tags: ['rápido retorno'],
229
- },
230
- {
231
- id: 112,
232
- name: 'Grupo Orion',
233
- type: 'company',
234
- status: 'active',
235
- owner_user_id: 3,
236
- owner_user: crmOwners[2],
237
- source: 'website',
238
- lifecycle_stage: 'negotiation',
239
- next_action_at: '2026-03-18T16:00:00.000Z',
240
- created_at: '2026-03-02T09:45:00.000Z',
241
- lastInteractionAt: '2026-03-15T10:40:00.000Z',
242
- score: 86,
243
- dealValue: 78000,
244
- companyLabel: 'Operação nacional',
245
- tags: ['enterprise', 'negociação'],
246
- },
247
- ];
248
-
249
- export const crmSourceOrder: PersonSource[] = [
250
- 'website',
251
- 'referral',
252
- 'social',
253
- 'inbound',
254
- 'outbound',
255
- 'other',
256
- ];
1
+ import type {
2
+ Account,
3
+ AccountLifecycleStage,
4
+ } from '../accounts/_components/account-types';
5
+ import type {
6
+ Person,
7
+ PersonLifecycleStage,
8
+ PersonSource,
9
+ UserOption,
10
+ } from '../person/_components/person-types';
11
+
12
+ export type CrmLead = Pick<
13
+ Person,
14
+ | 'id'
15
+ | 'name'
16
+ | 'type'
17
+ | 'status'
18
+ | 'trade_name'
19
+ | 'owner_user_id'
20
+ | 'owner_user'
21
+ | 'source'
22
+ | 'lifecycle_stage'
23
+ | 'next_action_at'
24
+ | 'created_at'
25
+ > & {
26
+ score: number;
27
+ dealValue: number;
28
+ lastInteractionAt: string;
29
+ companyLabel?: string | null;
30
+ tags: string[];
31
+ };
32
+
33
+ export const crmOwners: UserOption[] = [
34
+ { id: 1, name: 'Ana Paula' },
35
+ { id: 2, name: 'Bruno Costa' },
36
+ { id: 3, name: 'Camila Rocha' },
37
+ { id: 4, name: 'Diego Martins' },
38
+ ];
39
+
40
+ export const crmStageOrder: PersonLifecycleStage[] = [
41
+ 'new',
42
+ 'contacted',
43
+ 'qualified',
44
+ 'proposal',
45
+ 'negotiation',
46
+ 'customer',
47
+ 'lost',
48
+ ];
49
+
50
+ export const crmMockLeads: CrmLead[] = [
51
+ {
52
+ id: 101,
53
+ name: 'Maria Fernanda',
54
+ type: 'individual',
55
+ status: 'active',
56
+ owner_user_id: 1,
57
+ owner_user: crmOwners[0],
58
+ source: 'website',
59
+ lifecycle_stage: 'new',
60
+ next_action_at: '2026-03-18T10:00:00.000Z',
61
+ created_at: '2026-03-12T09:30:00.000Z',
62
+ lastInteractionAt: '2026-03-14T16:20:00.000Z',
63
+ score: 72,
64
+ dealValue: 12000,
65
+ tags: ['inbound', 'alto fit'],
66
+ },
67
+ {
68
+ id: 102,
69
+ name: 'Clínica Aurora',
70
+ trade_name: 'Aurora Saúde',
71
+ type: 'company',
72
+ status: 'active',
73
+ owner_user_id: 2,
74
+ owner_user: crmOwners[1],
75
+ source: 'referral',
76
+ lifecycle_stage: 'qualified',
77
+ next_action_at: '2026-03-17T14:30:00.000Z',
78
+ created_at: '2026-03-04T11:00:00.000Z',
79
+ lastInteractionAt: '2026-03-15T09:00:00.000Z',
80
+ score: 88,
81
+ dealValue: 46000,
82
+ companyLabel: 'Rede privada',
83
+ tags: ['saúde', 'enterprise'],
84
+ },
85
+ {
86
+ id: 103,
87
+ name: 'Lucas Tavares',
88
+ type: 'individual',
89
+ status: 'active',
90
+ owner_user_id: 1,
91
+ owner_user: crmOwners[0],
92
+ source: 'social',
93
+ lifecycle_stage: 'contacted',
94
+ next_action_at: '2026-03-16T13:00:00.000Z',
95
+ created_at: '2026-03-10T08:15:00.000Z',
96
+ lastInteractionAt: '2026-03-15T08:45:00.000Z',
97
+ score: 54,
98
+ dealValue: 8500,
99
+ tags: ['social', 'nutrição'],
100
+ },
101
+ {
102
+ id: 104,
103
+ name: 'Grupo Prisma',
104
+ type: 'company',
105
+ status: 'active',
106
+ owner_user_id: 3,
107
+ owner_user: crmOwners[2],
108
+ source: 'outbound',
109
+ lifecycle_stage: 'proposal',
110
+ next_action_at: '2026-03-19T15:00:00.000Z',
111
+ created_at: '2026-02-27T10:00:00.000Z',
112
+ lastInteractionAt: '2026-03-14T18:10:00.000Z',
113
+ score: 91,
114
+ dealValue: 92000,
115
+ companyLabel: 'B2B SaaS',
116
+ tags: ['outbound', 'proposal'],
117
+ },
118
+ {
119
+ id: 105,
120
+ name: 'Paulo Henrique',
121
+ type: 'individual',
122
+ status: 'active',
123
+ owner_user_id: 4,
124
+ owner_user: crmOwners[3],
125
+ source: 'inbound',
126
+ lifecycle_stage: 'negotiation',
127
+ next_action_at: '2026-03-18T11:30:00.000Z',
128
+ created_at: '2026-03-01T14:00:00.000Z',
129
+ lastInteractionAt: '2026-03-15T11:10:00.000Z',
130
+ score: 79,
131
+ dealValue: 22000,
132
+ tags: ['urgente', 'negociação'],
133
+ },
134
+ {
135
+ id: 106,
136
+ name: 'Hospital Vida Nova',
137
+ type: 'company',
138
+ status: 'active',
139
+ owner_user_id: 2,
140
+ owner_user: crmOwners[1],
141
+ source: 'website',
142
+ lifecycle_stage: 'customer',
143
+ next_action_at: '2026-03-25T09:00:00.000Z',
144
+ created_at: '2026-02-10T09:00:00.000Z',
145
+ lastInteractionAt: '2026-03-13T17:40:00.000Z',
146
+ score: 97,
147
+ dealValue: 135000,
148
+ companyLabel: 'Conta estratégica',
149
+ tags: ['cliente', 'upsell'],
150
+ },
151
+ {
152
+ id: 107,
153
+ name: 'Fernanda Sales',
154
+ type: 'individual',
155
+ status: 'inactive',
156
+ owner_user_id: 3,
157
+ owner_user: crmOwners[2],
158
+ source: 'other',
159
+ lifecycle_stage: 'lost',
160
+ next_action_at: null,
161
+ created_at: '2026-02-18T16:20:00.000Z',
162
+ lastInteractionAt: '2026-03-02T10:20:00.000Z',
163
+ score: 35,
164
+ dealValue: 0,
165
+ tags: ['sem budget'],
166
+ },
167
+ {
168
+ id: 108,
169
+ name: 'Studio Vertex',
170
+ trade_name: 'Vertex Creative',
171
+ type: 'company',
172
+ status: 'active',
173
+ owner_user_id: null,
174
+ owner_user: null,
175
+ source: 'social',
176
+ lifecycle_stage: 'new',
177
+ next_action_at: '2026-03-17T09:30:00.000Z',
178
+ created_at: '2026-03-14T13:40:00.000Z',
179
+ lastInteractionAt: '2026-03-14T13:40:00.000Z',
180
+ score: 60,
181
+ dealValue: 18000,
182
+ companyLabel: 'Agência',
183
+ tags: ['sem owner'],
184
+ },
185
+ {
186
+ id: 109,
187
+ name: 'Ricardo Gomes',
188
+ type: 'individual',
189
+ status: 'active',
190
+ owner_user_id: 4,
191
+ owner_user: crmOwners[3],
192
+ source: 'referral',
193
+ lifecycle_stage: 'qualified',
194
+ next_action_at: '2026-03-16T17:00:00.000Z',
195
+ created_at: '2026-03-06T11:15:00.000Z',
196
+ lastInteractionAt: '2026-03-15T15:30:00.000Z',
197
+ score: 82,
198
+ dealValue: 15000,
199
+ tags: ['indicação'],
200
+ },
201
+ {
202
+ id: 110,
203
+ name: 'Construtora Mosaico',
204
+ type: 'company',
205
+ status: 'active',
206
+ owner_user_id: 1,
207
+ owner_user: crmOwners[0],
208
+ source: 'outbound',
209
+ lifecycle_stage: 'proposal',
210
+ next_action_at: '2026-03-20T10:00:00.000Z',
211
+ created_at: '2026-03-03T08:00:00.000Z',
212
+ lastInteractionAt: '2026-03-15T14:00:00.000Z',
213
+ score: 76,
214
+ dealValue: 68000,
215
+ companyLabel: 'Construção civil',
216
+ tags: ['B2B', 'follow-up'],
217
+ },
218
+ {
219
+ id: 111,
220
+ name: 'Beatriz Nunes',
221
+ type: 'individual',
222
+ status: 'active',
223
+ owner_user_id: 2,
224
+ owner_user: crmOwners[1],
225
+ source: 'inbound',
226
+ lifecycle_stage: 'contacted',
227
+ next_action_at: '2026-03-16T09:00:00.000Z',
228
+ created_at: '2026-03-11T12:00:00.000Z',
229
+ lastInteractionAt: '2026-03-15T12:20:00.000Z',
230
+ score: 58,
231
+ dealValue: 9800,
232
+ tags: ['rápido retorno'],
233
+ },
234
+ {
235
+ id: 112,
236
+ name: 'Grupo Orion',
237
+ type: 'company',
238
+ status: 'active',
239
+ owner_user_id: 3,
240
+ owner_user: crmOwners[2],
241
+ source: 'website',
242
+ lifecycle_stage: 'negotiation',
243
+ next_action_at: '2026-03-18T16:00:00.000Z',
244
+ created_at: '2026-03-02T09:45:00.000Z',
245
+ lastInteractionAt: '2026-03-15T10:40:00.000Z',
246
+ score: 86,
247
+ dealValue: 78000,
248
+ companyLabel: 'Operação nacional',
249
+ tags: ['enterprise', 'negociação'],
250
+ },
251
+ ];
252
+
253
+ export const crmSourceOrder: PersonSource[] = [
254
+ 'website',
255
+ 'referral',
256
+ 'social',
257
+ 'inbound',
258
+ 'outbound',
259
+ 'other',
260
+ ];
261
+
262
+ export const crmAccountLifecycleOrder: AccountLifecycleStage[] = [
263
+ 'prospect',
264
+ 'customer',
265
+ 'churned',
266
+ 'inactive',
267
+ ];
268
+
269
+ export const crmMockAccounts: Account[] = [
270
+ {
271
+ id: 201,
272
+ name: 'Clínica Aurora',
273
+ trade_name: 'Aurora Saúde',
274
+ status: 'active',
275
+ industry: 'Healthcare',
276
+ website: 'www.aurorareserve.com.br',
277
+ email: 'contato@aurorareserve.com.br',
278
+ phone: '(11) 3456-7890',
279
+ owner_user_id: 2,
280
+ owner_user: crmOwners[1],
281
+ annual_revenue: 450000,
282
+ employee_count: 28,
283
+ lifecycle_stage: 'customer',
284
+ city: 'São Paulo',
285
+ state: 'SP',
286
+ created_at: '2026-02-01T10:00:00.000Z',
287
+ last_interaction_at: '2026-03-15T14:30:00.000Z',
288
+ },
289
+ {
290
+ id: 202,
291
+ name: 'Hospital Vida Nova',
292
+ trade_name: 'Rede Vida',
293
+ status: 'active',
294
+ industry: 'Healthcare',
295
+ website: 'www.redavida.com.br',
296
+ email: 'vendas@redavida.com.br',
297
+ phone: '(11) 4000-0000',
298
+ owner_user_id: 1,
299
+ owner_user: crmOwners[0],
300
+ annual_revenue: 1200000,
301
+ employee_count: 156,
302
+ lifecycle_stage: 'customer',
303
+ city: 'São Paulo',
304
+ state: 'SP',
305
+ created_at: '2025-12-15T09:15:00.000Z',
306
+ last_interaction_at: '2026-03-14T11:00:00.000Z',
307
+ },
308
+ {
309
+ id: 203,
310
+ name: 'Grupo Prisma',
311
+ trade_name: 'Prisma Solutions',
312
+ status: 'active',
313
+ industry: 'Software',
314
+ website: 'www.prismasolutions.com.br',
315
+ email: 'info@prismasolutions.com.br',
316
+ phone: '(11) 2789-0000',
317
+ owner_user_id: 3,
318
+ owner_user: crmOwners[2],
319
+ annual_revenue: 780000,
320
+ employee_count: 42,
321
+ lifecycle_stage: 'customer',
322
+ city: 'São Paulo',
323
+ state: 'SP',
324
+ created_at: '2026-01-10T14:20:00.000Z',
325
+ last_interaction_at: '2026-03-13T16:45:00.000Z',
326
+ },
327
+ {
328
+ id: 204,
329
+ name: 'Tech Innovate',
330
+ trade_name: 'TechInnov',
331
+ status: 'active',
332
+ industry: 'Technology',
333
+ website: 'www.techinnovate.io',
334
+ email: 'business@techinnovate.io',
335
+ phone: '(11) 3123-4567',
336
+ owner_user_id: 4,
337
+ owner_user: crmOwners[3],
338
+ annual_revenue: 320000,
339
+ employee_count: 18,
340
+ lifecycle_stage: 'prospect',
341
+ city: 'Rio de Janeiro',
342
+ state: 'RJ',
343
+ created_at: '2026-03-08T11:30:00.000Z',
344
+ last_interaction_at: '2026-03-16T09:20:00.000Z',
345
+ },
346
+ {
347
+ id: 205,
348
+ name: 'Construtora Mosaico',
349
+ trade_name: 'Mosaico Construções',
350
+ status: 'active',
351
+ industry: 'Construction',
352
+ website: 'www.mosaicoconstrucoes.com.br',
353
+ email: 'comercial@mosaicoconstrucoes.com.br',
354
+ phone: '(21) 3789-0000',
355
+ owner_user_id: 1,
356
+ owner_user: crmOwners[0],
357
+ annual_revenue: 650000,
358
+ employee_count: 34,
359
+ lifecycle_stage: 'prospect',
360
+ city: 'Rio de Janeiro',
361
+ state: 'RJ',
362
+ created_at: '2026-02-20T08:45:00.000Z',
363
+ last_interaction_at: '2026-03-17T13:15:00.000Z',
364
+ },
365
+ {
366
+ id: 206,
367
+ name: 'Studio Vertex',
368
+ trade_name: 'Vertex Creative',
369
+ status: 'active',
370
+ industry: 'Advertising',
371
+ website: 'www.vertexcreative.com.br',
372
+ email: 'hello@vertexcreative.com.br',
373
+ phone: '(11) 98765-4321',
374
+ owner_user_id: null,
375
+ owner_user: null,
376
+ annual_revenue: 220000,
377
+ employee_count: 12,
378
+ lifecycle_stage: 'prospect',
379
+ city: 'São Paulo',
380
+ state: 'SP',
381
+ created_at: '2026-03-14T10:00:00.000Z',
382
+ last_interaction_at: '2026-03-14T10:00:00.000Z',
383
+ },
384
+ {
385
+ id: 207,
386
+ name: 'Logística Express',
387
+ trade_name: 'LogExpress',
388
+ status: 'inactive',
389
+ industry: 'Logistics',
390
+ website: 'www.logexpress.com.br',
391
+ email: 'contato@logexpress.com.br',
392
+ phone: '(31) 2890-0000',
393
+ owner_user_id: 2,
394
+ owner_user: crmOwners[1],
395
+ annual_revenue: 420000,
396
+ employee_count: 24,
397
+ lifecycle_stage: 'churned',
398
+ city: 'Belo Horizonte',
399
+ state: 'MG',
400
+ created_at: '2025-11-05T12:30:00.000Z',
401
+ last_interaction_at: '2026-01-28T10:20:00.000Z',
402
+ },
403
+ {
404
+ id: 208,
405
+ name: 'Distribuidora Nordeste',
406
+ trade_name: 'DN Distribuições',
407
+ status: 'active',
408
+ industry: 'Retail',
409
+ website: 'www.dndistribuicoes.com.br',
410
+ email: 'vendas@dndistribuicoes.com.br',
411
+ phone: '(85) 3456-7890',
412
+ owner_user_id: 3,
413
+ owner_user: crmOwners[2],
414
+ annual_revenue: 890000,
415
+ employee_count: 52,
416
+ lifecycle_stage: 'customer',
417
+ city: 'Fortaleza',
418
+ state: 'CE',
419
+ created_at: '2026-01-22T15:10:00.000Z',
420
+ last_interaction_at: '2026-03-15T10:30:00.000Z',
421
+ },
422
+ {
423
+ id: 209,
424
+ name: 'FinServ Brasil',
425
+ trade_name: 'FinServ',
426
+ status: 'active',
427
+ industry: 'Financial Services',
428
+ website: 'www.finserv.com.br',
429
+ email: 'partnerships@finserv.com.br',
430
+ phone: '(11) 5555-5555',
431
+ owner_user_id: 4,
432
+ owner_user: crmOwners[3],
433
+ annual_revenue: 2100000,
434
+ employee_count: 187,
435
+ lifecycle_stage: 'customer',
436
+ city: 'São Paulo',
437
+ state: 'SP',
438
+ created_at: '2025-10-08T09:00:00.000Z',
439
+ last_interaction_at: '2026-03-16T14:00:00.000Z',
440
+ },
441
+ {
442
+ id: 210,
443
+ name: 'Café Gourmet Premium',
444
+ trade_name: 'CGP Cafés',
445
+ status: 'active',
446
+ industry: 'Food & Beverage',
447
+ website: 'www.cgpcafes.com.br',
448
+ email: 'comercial@cgpcafes.com.br',
449
+ phone: '(47) 2123-4567',
450
+ owner_user_id: 1,
451
+ owner_user: crmOwners[0],
452
+ annual_revenue: 180000,
453
+ employee_count: 8,
454
+ lifecycle_stage: 'prospect',
455
+ city: 'Santa Catarina',
456
+ state: 'SC',
457
+ created_at: '2026-03-10T13:45:00.000Z',
458
+ last_interaction_at: '2026-03-18T08:30:00.000Z',
459
+ },
460
+ {
461
+ id: 211,
462
+ name: 'Consultoria D&I',
463
+ trade_name: 'D&I Consultores',
464
+ status: 'inactive',
465
+ industry: 'Consulting',
466
+ website: 'www.diconsultores.com.br',
467
+ email: 'info@diconsultores.com.br',
468
+ phone: '(61) 3234-5678',
469
+ owner_user_id: 2,
470
+ owner_user: crmOwners[1],
471
+ annual_revenue: 320000,
472
+ employee_count: 15,
473
+ lifecycle_stage: 'inactive',
474
+ city: 'Brasília',
475
+ state: 'DF',
476
+ created_at: '2025-12-01T11:00:00.000Z',
477
+ last_interaction_at: '2026-02-10T09:15:00.000Z',
478
+ },
479
+ {
480
+ id: 212,
481
+ name: 'EduTech Solutions',
482
+ trade_name: 'EduTech',
483
+ status: 'active',
484
+ industry: 'Education',
485
+ website: 'www.edutech.com.br',
486
+ email: 'sales@edutech.com.br',
487
+ phone: '(71) 4000-1111',
488
+ owner_user_id: 3,
489
+ owner_user: crmOwners[2],
490
+ annual_revenue: 560000,
491
+ employee_count: 31,
492
+ lifecycle_stage: 'prospect',
493
+ city: 'Salvador',
494
+ state: 'BA',
495
+ created_at: '2026-02-25T14:20:00.000Z',
496
+ last_interaction_at: '2026-03-14T15:45:00.000Z',
497
+ },
498
+ ];