@nextsparkjs/theme-default 0.1.0-beta.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 (333) hide show
  1. package/about/business.md +49 -0
  2. package/about/features.json +302 -0
  3. package/about/team.md +79 -0
  4. package/api/ai/chat/stream/route.ts +212 -0
  5. package/api/ai/orchestrator/route.ts +226 -0
  6. package/api/ai/single-agent/route.ts +291 -0
  7. package/api/ai/usage/route.ts +122 -0
  8. package/blocks/benefits/component.tsx +100 -0
  9. package/blocks/benefits/config.ts +11 -0
  10. package/blocks/benefits/examples.ts +85 -0
  11. package/blocks/benefits/fields.ts +156 -0
  12. package/blocks/benefits/schema.ts +33 -0
  13. package/blocks/cta-section/component.tsx +100 -0
  14. package/blocks/cta-section/config.ts +11 -0
  15. package/blocks/cta-section/examples.ts +41 -0
  16. package/blocks/cta-section/fields.ts +89 -0
  17. package/blocks/cta-section/index.ts +6 -0
  18. package/blocks/cta-section/schema.ts +32 -0
  19. package/blocks/cta-section/thumbnail.png +1 -0
  20. package/blocks/faq-accordion/component.tsx +156 -0
  21. package/blocks/faq-accordion/config.ts +11 -0
  22. package/blocks/faq-accordion/examples.ts +77 -0
  23. package/blocks/faq-accordion/fields.ts +119 -0
  24. package/blocks/faq-accordion/index.ts +6 -0
  25. package/blocks/faq-accordion/schema.ts +45 -0
  26. package/blocks/features-grid/component.tsx +112 -0
  27. package/blocks/features-grid/config.ts +11 -0
  28. package/blocks/features-grid/examples.ts +63 -0
  29. package/blocks/features-grid/fields.ts +97 -0
  30. package/blocks/features-grid/index.ts +6 -0
  31. package/blocks/features-grid/schema.ts +40 -0
  32. package/blocks/features-grid/thumbnail.png +1 -0
  33. package/blocks/hero/component.tsx +100 -0
  34. package/blocks/hero/config.ts +11 -0
  35. package/blocks/hero/examples.ts +35 -0
  36. package/blocks/hero/fields.ts +60 -0
  37. package/blocks/hero/index.ts +6 -0
  38. package/blocks/hero/schema.ts +32 -0
  39. package/blocks/hero/thumbnail.png +1 -0
  40. package/blocks/hero/thumbnail.png.txt +6 -0
  41. package/blocks/hero-with-form/component.tsx +232 -0
  42. package/blocks/hero-with-form/config.ts +11 -0
  43. package/blocks/hero-with-form/examples.ts +16 -0
  44. package/blocks/hero-with-form/fields.ts +207 -0
  45. package/blocks/hero-with-form/index.ts +6 -0
  46. package/blocks/hero-with-form/schema.ts +54 -0
  47. package/blocks/jumbotron/component.tsx +136 -0
  48. package/blocks/jumbotron/config.ts +11 -0
  49. package/blocks/jumbotron/examples.ts +36 -0
  50. package/blocks/jumbotron/fields.ts +202 -0
  51. package/blocks/jumbotron/index.ts +6 -0
  52. package/blocks/jumbotron/schema.ts +55 -0
  53. package/blocks/logo-cloud/component.tsx +154 -0
  54. package/blocks/logo-cloud/config.ts +11 -0
  55. package/blocks/logo-cloud/examples.ts +34 -0
  56. package/blocks/logo-cloud/fields.ts +133 -0
  57. package/blocks/logo-cloud/index.ts +6 -0
  58. package/blocks/logo-cloud/schema.ts +46 -0
  59. package/blocks/post-content/component.tsx +197 -0
  60. package/blocks/post-content/config.ts +11 -0
  61. package/blocks/post-content/examples.ts +33 -0
  62. package/blocks/post-content/fields.ts +165 -0
  63. package/blocks/post-content/index.ts +4 -0
  64. package/blocks/post-content/schema.ts +46 -0
  65. package/blocks/pricing-table/component.tsx +154 -0
  66. package/blocks/pricing-table/config.ts +11 -0
  67. package/blocks/pricing-table/examples.ts +96 -0
  68. package/blocks/pricing-table/fields.ts +161 -0
  69. package/blocks/pricing-table/index.ts +4 -0
  70. package/blocks/pricing-table/schema.ts +50 -0
  71. package/blocks/split-content/component.tsx +135 -0
  72. package/blocks/split-content/config.ts +11 -0
  73. package/blocks/split-content/examples.ts +38 -0
  74. package/blocks/split-content/fields.ts +198 -0
  75. package/blocks/split-content/index.ts +6 -0
  76. package/blocks/split-content/schema.ts +67 -0
  77. package/blocks/stats-counter/component.tsx +124 -0
  78. package/blocks/stats-counter/config.ts +11 -0
  79. package/blocks/stats-counter/examples.ts +61 -0
  80. package/blocks/stats-counter/fields.ts +134 -0
  81. package/blocks/stats-counter/index.ts +6 -0
  82. package/blocks/stats-counter/schema.ts +47 -0
  83. package/blocks/testimonials/component.tsx +114 -0
  84. package/blocks/testimonials/config.ts +11 -0
  85. package/blocks/testimonials/examples.ts +65 -0
  86. package/blocks/testimonials/fields.ts +105 -0
  87. package/blocks/testimonials/index.ts +6 -0
  88. package/blocks/testimonials/schema.ts +41 -0
  89. package/blocks/testimonials/thumbnail.png +1 -0
  90. package/blocks/text-content/component.tsx +97 -0
  91. package/blocks/text-content/config.ts +11 -0
  92. package/blocks/text-content/examples.ts +30 -0
  93. package/blocks/text-content/fields.ts +88 -0
  94. package/blocks/text-content/index.ts +6 -0
  95. package/blocks/text-content/schema.ts +30 -0
  96. package/blocks/text-content/thumbnail.png +1 -0
  97. package/blocks/timeline/component.tsx +267 -0
  98. package/blocks/timeline/config.ts +11 -0
  99. package/blocks/timeline/examples.ts +68 -0
  100. package/blocks/timeline/fields.ts +147 -0
  101. package/blocks/timeline/index.ts +6 -0
  102. package/blocks/timeline/schema.ts +49 -0
  103. package/blocks/video-hero/component.tsx +270 -0
  104. package/blocks/video-hero/config.ts +11 -0
  105. package/blocks/video-hero/examples.ts +24 -0
  106. package/blocks/video-hero/fields.ts +98 -0
  107. package/blocks/video-hero/index.ts +6 -0
  108. package/blocks/video-hero/schema.ts +39 -0
  109. package/components/ai-chat/ChatPanel.tsx +575 -0
  110. package/components/ai-chat/ConversationItem.tsx +266 -0
  111. package/components/ai-chat/ConversationSidebar.tsx +99 -0
  112. package/components/ai-chat/MarkdownRenderer.tsx +15 -0
  113. package/components/ai-chat/Message.tsx +42 -0
  114. package/components/ai-chat/MessageInput.tsx +49 -0
  115. package/components/ai-chat/MessageList.tsx +46 -0
  116. package/components/ai-chat/TypingIndicator.tsx +11 -0
  117. package/config/app.config.ts +367 -0
  118. package/config/billing.config.ts +349 -0
  119. package/config/dashboard.config.ts +506 -0
  120. package/config/dev.config.ts +104 -0
  121. package/config/features.config.ts +203 -0
  122. package/config/flows.config.ts +129 -0
  123. package/config/permissions.config.ts +245 -0
  124. package/config/theme.config.ts +74 -0
  125. package/docs/01-overview/01-introduction.md +335 -0
  126. package/docs/01-overview/02-customization.md +671 -0
  127. package/docs/02-features/01-components.md +155 -0
  128. package/docs/02-features/02-styling.md +139 -0
  129. package/docs/02-features/03-tasks-entity.md +407 -0
  130. package/docs/03-ai/01-overview.md +211 -0
  131. package/docs/03-ai/02-customization.md +436 -0
  132. package/entities/customers/customers.config.ts +75 -0
  133. package/entities/customers/customers.fields.ts +165 -0
  134. package/entities/customers/customers.service.ts +516 -0
  135. package/entities/customers/customers.types.ts +83 -0
  136. package/entities/customers/messages/en.json +66 -0
  137. package/entities/customers/messages/es.json +66 -0
  138. package/entities/customers/migrations/001_customers_table.sql +102 -0
  139. package/entities/customers/migrations/002_customers_metas.sql +92 -0
  140. package/entities/pages/messages/en.json +41 -0
  141. package/entities/pages/messages/es.json +41 -0
  142. package/entities/pages/migrations/001_pages_table.sql +112 -0
  143. package/entities/pages/migrations/002_pages_metas.sql +56 -0
  144. package/entities/pages/migrations/003_add_status.sql +50 -0
  145. package/entities/pages/pages-management.service.ts +610 -0
  146. package/entities/pages/pages.config.ts +94 -0
  147. package/entities/pages/pages.fields.ts +101 -0
  148. package/entities/pages/pages.service.ts +290 -0
  149. package/entities/pages/pages.types.ts +124 -0
  150. package/entities/posts/components/post-header.tsx +97 -0
  151. package/entities/posts/messages/en.json +55 -0
  152. package/entities/posts/messages/es.json +55 -0
  153. package/entities/posts/migrations/001_posts_table.sql +115 -0
  154. package/entities/posts/migrations/003_add_status.sql +44 -0
  155. package/entities/posts/migrations/004_entity_taxonomy_relations.sql +129 -0
  156. package/entities/posts/migrations/006_posts_metas.sql +56 -0
  157. package/entities/posts/posts.config.ts +101 -0
  158. package/entities/posts/posts.fields.ts +116 -0
  159. package/entities/posts/posts.service.ts +376 -0
  160. package/entities/posts/posts.types.ts +74 -0
  161. package/entities/tasks/messages/en.json +204 -0
  162. package/entities/tasks/messages/es.json +204 -0
  163. package/entities/tasks/migrations/001_tasks_table.sql +105 -0
  164. package/entities/tasks/migrations/002_task_metas.sql +85 -0
  165. package/entities/tasks/migrations/sample_data.json +77 -0
  166. package/entities/tasks/tasks.config.ts +79 -0
  167. package/entities/tasks/tasks.fields.ts +196 -0
  168. package/entities/tasks/tasks.service.ts +541 -0
  169. package/entities/tasks/tasks.types.ts +56 -0
  170. package/lib/hooks/useAiChat.ts +114 -0
  171. package/lib/hooks/useConversations.ts +376 -0
  172. package/lib/hooks/useOrchestratorChat.ts +122 -0
  173. package/lib/hooks/usePersistentChat.ts +315 -0
  174. package/lib/hooks/useStreamingChat.ts +127 -0
  175. package/lib/hooks/useTokenUsage.ts +63 -0
  176. package/lib/langchain/agents/customer-assistant.md +69 -0
  177. package/lib/langchain/agents/index.ts +61 -0
  178. package/lib/langchain/agents/orchestrator.md +59 -0
  179. package/lib/langchain/agents/page-assistant.md +85 -0
  180. package/lib/langchain/agents/single-agent.md +46 -0
  181. package/lib/langchain/agents/task-assistant.md +55 -0
  182. package/lib/langchain/config.ts +45 -0
  183. package/lib/langchain/handlers/customer-handler.ts +338 -0
  184. package/lib/langchain/handlers/page-handler.ts +232 -0
  185. package/lib/langchain/handlers/task-handler.ts +323 -0
  186. package/lib/langchain/langchain.config.ts +223 -0
  187. package/lib/langchain/observability.config.ts +30 -0
  188. package/lib/langchain/orchestrator.ts +562 -0
  189. package/lib/langchain/tools/customers.ts +176 -0
  190. package/lib/langchain/tools/index.ts +10 -0
  191. package/lib/langchain/tools/orchestrator.ts +92 -0
  192. package/lib/langchain/tools/pages.ts +289 -0
  193. package/lib/langchain/tools/tasks.ts +167 -0
  194. package/lib/scheduled-actions/billing.ts +149 -0
  195. package/lib/scheduled-actions/index.ts +170 -0
  196. package/lib/scheduled-actions/webhook.ts +231 -0
  197. package/lib/selectors.ts +197 -0
  198. package/messages/de/admin.json +219 -0
  199. package/messages/de/aiUsage.json +36 -0
  200. package/messages/de/buttons.json +19 -0
  201. package/messages/de/categories.json +35 -0
  202. package/messages/de/common.json +16 -0
  203. package/messages/de/dev.json +101 -0
  204. package/messages/de/docs.json +27 -0
  205. package/messages/de/entities.json +7 -0
  206. package/messages/de/features.json +119 -0
  207. package/messages/de/footer.json +22 -0
  208. package/messages/de/home.json +57 -0
  209. package/messages/de/index.ts +39 -0
  210. package/messages/de/mobileNav.json +13 -0
  211. package/messages/de/navigation.json +8 -0
  212. package/messages/de/observability.json +74 -0
  213. package/messages/de/posts.json +54 -0
  214. package/messages/de/pricing.json +102 -0
  215. package/messages/de/support.json +9 -0
  216. package/messages/de/teams.json +8 -0
  217. package/messages/en/admin.json +219 -0
  218. package/messages/en/aiUsage.json +36 -0
  219. package/messages/en/buttons.json +19 -0
  220. package/messages/en/categories.json +35 -0
  221. package/messages/en/common.json +16 -0
  222. package/messages/en/dev.json +106 -0
  223. package/messages/en/docs.json +27 -0
  224. package/messages/en/entities.json +7 -0
  225. package/messages/en/features.json +119 -0
  226. package/messages/en/footer.json +22 -0
  227. package/messages/en/home.json +57 -0
  228. package/messages/en/index.ts +39 -0
  229. package/messages/en/mobileNav.json +13 -0
  230. package/messages/en/navigation.json +8 -0
  231. package/messages/en/observability.json +74 -0
  232. package/messages/en/posts.json +54 -0
  233. package/messages/en/pricing.json +102 -0
  234. package/messages/en/support.json +9 -0
  235. package/messages/en/teams.json +8 -0
  236. package/messages/es/admin.json +219 -0
  237. package/messages/es/aiUsage.json +36 -0
  238. package/messages/es/buttons.json +19 -0
  239. package/messages/es/categories.json +35 -0
  240. package/messages/es/common.json +16 -0
  241. package/messages/es/dev.json +101 -0
  242. package/messages/es/docs.json +27 -0
  243. package/messages/es/entities.json +7 -0
  244. package/messages/es/features.json +119 -0
  245. package/messages/es/footer.json +22 -0
  246. package/messages/es/home.json +57 -0
  247. package/messages/es/index.ts +39 -0
  248. package/messages/es/mobileNav.json +13 -0
  249. package/messages/es/navigation.json +8 -0
  250. package/messages/es/observability.json +74 -0
  251. package/messages/es/posts.json +54 -0
  252. package/messages/es/pricing.json +102 -0
  253. package/messages/es/support.json +9 -0
  254. package/messages/es/teams.json +8 -0
  255. package/messages/fr/admin.json +219 -0
  256. package/messages/fr/aiUsage.json +36 -0
  257. package/messages/fr/buttons.json +19 -0
  258. package/messages/fr/categories.json +35 -0
  259. package/messages/fr/common.json +16 -0
  260. package/messages/fr/dev.json +101 -0
  261. package/messages/fr/docs.json +27 -0
  262. package/messages/fr/entities.json +7 -0
  263. package/messages/fr/features.json +119 -0
  264. package/messages/fr/footer.json +22 -0
  265. package/messages/fr/home.json +57 -0
  266. package/messages/fr/index.ts +39 -0
  267. package/messages/fr/mobileNav.json +13 -0
  268. package/messages/fr/navigation.json +8 -0
  269. package/messages/fr/observability.json +74 -0
  270. package/messages/fr/posts.json +54 -0
  271. package/messages/fr/pricing.json +102 -0
  272. package/messages/fr/support.json +9 -0
  273. package/messages/fr/teams.json +8 -0
  274. package/messages/it/admin.json +219 -0
  275. package/messages/it/aiUsage.json +36 -0
  276. package/messages/it/buttons.json +19 -0
  277. package/messages/it/categories.json +35 -0
  278. package/messages/it/common.json +16 -0
  279. package/messages/it/dev.json +101 -0
  280. package/messages/it/docs.json +27 -0
  281. package/messages/it/entities.json +7 -0
  282. package/messages/it/features.json +119 -0
  283. package/messages/it/footer.json +22 -0
  284. package/messages/it/home.json +57 -0
  285. package/messages/it/index.ts +39 -0
  286. package/messages/it/mobileNav.json +13 -0
  287. package/messages/it/navigation.json +8 -0
  288. package/messages/it/observability.json +74 -0
  289. package/messages/it/posts.json +54 -0
  290. package/messages/it/pricing.json +102 -0
  291. package/messages/it/support.json +9 -0
  292. package/messages/it/teams.json +8 -0
  293. package/messages/pt/admin.json +219 -0
  294. package/messages/pt/aiUsage.json +36 -0
  295. package/messages/pt/buttons.json +19 -0
  296. package/messages/pt/categories.json +35 -0
  297. package/messages/pt/common.json +16 -0
  298. package/messages/pt/dev.json +101 -0
  299. package/messages/pt/docs.json +27 -0
  300. package/messages/pt/entities.json +7 -0
  301. package/messages/pt/features.json +119 -0
  302. package/messages/pt/footer.json +22 -0
  303. package/messages/pt/home.json +57 -0
  304. package/messages/pt/index.ts +39 -0
  305. package/messages/pt/mobileNav.json +13 -0
  306. package/messages/pt/navigation.json +8 -0
  307. package/messages/pt/observability.json +74 -0
  308. package/messages/pt/posts.json +54 -0
  309. package/messages/pt/pricing.json +102 -0
  310. package/messages/pt/support.json +9 -0
  311. package/messages/pt/teams.json +8 -0
  312. package/migrations/089_add_editor_team_role.sql +39 -0
  313. package/migrations/090_demo_users_teams.sql +540 -0
  314. package/migrations/091_greek_teams_billing.sql +523 -0
  315. package/migrations/092_billing_sample_data.sql +774 -0
  316. package/migrations/093_pages_sample_data.sql +1158 -0
  317. package/migrations/094_posts_sample_data.sql +278 -0
  318. package/migrations/095_tasks_sample_data.sql +440 -0
  319. package/migrations/096_customers_sample_data.sql +358 -0
  320. package/migrations/097_scheduled_actions_sample_data.sql +111 -0
  321. package/package.json +22 -0
  322. package/public/docs/desktop-layout-example.png +0 -0
  323. package/styles/components.css +11 -0
  324. package/styles/globals.css +179 -0
  325. package/templates/(public)/blog/[slug]/page.tsx +65 -0
  326. package/templates/(public)/layout.tsx +25 -0
  327. package/templates/(public)/page.tsx +200 -0
  328. package/templates/(public)/support/page.tsx +321 -0
  329. package/templates/dashboard/(main)/agent-multi/page.tsx +63 -0
  330. package/templates/dashboard/(main)/agent-single/page.tsx +142 -0
  331. package/templates/dashboard/(main)/settings/ai-usage/page.tsx +157 -0
  332. package/templates/superadmin/ai-observability/[traceId]/page.tsx +27 -0
  333. package/templates/superadmin/ai-observability/page.tsx +17 -0
@@ -0,0 +1,774 @@
1
+ -- Migration: 092_billing_sample_data.sql
2
+ -- Description: Sample billing data for theme - plans, subscriptions, usage, and billing events
3
+ -- Date: 2025-12-25
4
+ -- Updated: 2025-12-26 - Added plans INSERT (moved from core)
5
+ -- Theme: default
6
+ -- Phase: Theme sample data - runs AFTER 091_greek_teams_billing.sql
7
+ --
8
+ -- This file contains billing sample data for:
9
+ -- - Sample plans (Free, Pro, Enterprise)
10
+ -- - TMT.dev company teams (Everpoint, Ironvale, Riverstone)
11
+ -- - TMT.dev personal teams (Carlos, etc.)
12
+ -- - Greek alphabet teams (Alpha through Omicron)
13
+ -- - TMT core team (superadmin + developer)
14
+ --
15
+ -- NOTE: Helper functions are in core migration 017_billing_functions.sql
16
+ -- NOTE: The trigger `create_default_subscription` auto-creates free subscriptions
17
+ -- when teams are created. We delete those to replace with our sample data.
18
+
19
+ -- ============================================
20
+ -- SAMPLE PLANS
21
+ -- ============================================
22
+
23
+ -- Plan: Free
24
+ INSERT INTO public."plans" (
25
+ id,
26
+ slug,
27
+ name,
28
+ description,
29
+ type,
30
+ visibility,
31
+ "priceMonthly",
32
+ "priceYearly",
33
+ "trialDays",
34
+ features,
35
+ limits,
36
+ "sortOrder"
37
+ ) VALUES (
38
+ 'plan_free',
39
+ 'free',
40
+ 'Free',
41
+ 'Free plan to get started',
42
+ 'free',
43
+ 'public',
44
+ 0,
45
+ 0,
46
+ 0,
47
+ '["basic_analytics"]'::jsonb,
48
+ '{"team_members": 3, "tasks": 50, "customers": 25, "storage_gb": 1, "api_calls": 1000, "file_uploads": 100, "webhooks_count": 0}'::jsonb,
49
+ 1
50
+ ) ON CONFLICT (slug) DO NOTHING;
51
+
52
+ -- Plan: Pro
53
+ INSERT INTO public."plans" (
54
+ id,
55
+ slug,
56
+ name,
57
+ description,
58
+ type,
59
+ visibility,
60
+ "priceMonthly",
61
+ "priceYearly",
62
+ "trialDays",
63
+ features,
64
+ limits,
65
+ "sortOrder"
66
+ ) VALUES (
67
+ 'plan_pro',
68
+ 'pro',
69
+ 'Pro',
70
+ 'Professional plan for teams',
71
+ 'paid',
72
+ 'public',
73
+ 2900,
74
+ 29000,
75
+ 14,
76
+ '["basic_analytics", "advanced_analytics", "realtime_analytics", "api_access", "webhooks", "custom_branding", "guest_access", "priority_support", "task_automation"]'::jsonb,
77
+ '{"team_members": 15, "tasks": 1000, "customers": 500, "storage_gb": 50, "api_calls": 100000, "file_uploads": 2000, "webhooks_count": 10}'::jsonb,
78
+ 2
79
+ ) ON CONFLICT (slug) DO NOTHING;
80
+
81
+ -- Plan: Enterprise
82
+ INSERT INTO public."plans" (
83
+ id,
84
+ slug,
85
+ name,
86
+ description,
87
+ type,
88
+ visibility,
89
+ "priceMonthly",
90
+ "priceYearly",
91
+ "trialDays",
92
+ features,
93
+ limits,
94
+ "sortOrder"
95
+ ) VALUES (
96
+ 'plan_enterprise',
97
+ 'enterprise',
98
+ 'Enterprise',
99
+ 'Custom enterprise plan with unlimited features',
100
+ 'enterprise',
101
+ 'hidden',
102
+ 49900, -- $499.00/mo
103
+ 499000, -- $4,990.00/yr (2 months free)
104
+ 30,
105
+ '["*"]'::jsonb,
106
+ '{"team_members": -1, "projects": -1, "storage_gb": -1, "api_calls": -1}'::jsonb,
107
+ 3
108
+ ) ON CONFLICT (slug) DO NOTHING;
109
+
110
+ -- ============================================
111
+ -- CLEANUP: Remove auto-created subscriptions
112
+ -- ============================================
113
+ -- These were created by the trigger when teams were inserted.
114
+ -- We want to replace them with more detailed sample subscriptions.
115
+
116
+ DELETE FROM public."subscriptions" WHERE "teamId" IN (
117
+ 'team-everpoint-001',
118
+ 'team-ironvale-002',
119
+ 'team-riverstone-003',
120
+ 'team-personal-carlos-001',
121
+ 'team-nextspark-001',
122
+ 'team-alpha-001',
123
+ 'team-beta-002',
124
+ 'team-gamma-003',
125
+ 'team-delta-004',
126
+ 'team-epsilon-005',
127
+ 'team-zeta-006',
128
+ 'team-eta-007',
129
+ 'team-theta-008',
130
+ 'team-iota-009',
131
+ 'team-kappa-010',
132
+ 'team-lambda-011',
133
+ 'team-mu-012',
134
+ 'team-nu-013',
135
+ 'team-xi-014',
136
+ 'team-omicron-015'
137
+ );
138
+
139
+ -- ============================================
140
+ -- SAMPLE SUBSCRIPTIONS - TMT.DEV TEAMS
141
+ -- ============================================
142
+
143
+ -- Company Teams - Paid Plans
144
+ INSERT INTO public."subscriptions" (
145
+ id,
146
+ "teamId",
147
+ "planId",
148
+ status,
149
+ "currentPeriodStart",
150
+ "currentPeriodEnd",
151
+ "billingInterval",
152
+ "paymentProvider",
153
+ "externalSubscriptionId",
154
+ "externalCustomerId",
155
+ "createdAt"
156
+ ) VALUES
157
+ -- Everpoint Labs → Pro Plan (active, $29/mo)
158
+ (
159
+ 'sub-everpoint-001',
160
+ 'team-everpoint-001',
161
+ 'plan_pro',
162
+ 'active',
163
+ NOW() - INTERVAL '15 days',
164
+ NOW() + INTERVAL '15 days',
165
+ 'monthly',
166
+ 'stripe',
167
+ 'sub_everpoint_stripe_001',
168
+ 'cus_everpoint_001',
169
+ NOW() - INTERVAL '60 days'
170
+ ),
171
+ -- Ironvale Global → Enterprise Plan (active, $499/mo)
172
+ (
173
+ 'sub-ironvale-001',
174
+ 'team-ironvale-002',
175
+ 'plan_enterprise',
176
+ 'active',
177
+ NOW() - INTERVAL '10 days',
178
+ NOW() + INTERVAL '20 days',
179
+ 'monthly',
180
+ 'stripe',
181
+ 'sub_ironvale_stripe_001',
182
+ 'cus_ironvale_001',
183
+ NOW() - INTERVAL '45 days'
184
+ ),
185
+ -- Riverstone Ventures → Pro Plan (trialing, 14-day trial)
186
+ (
187
+ 'sub-riverstone-001',
188
+ 'team-riverstone-003',
189
+ 'plan_pro',
190
+ 'trialing',
191
+ NOW(),
192
+ NOW() + INTERVAL '30 days',
193
+ 'monthly',
194
+ NULL,
195
+ NULL,
196
+ NULL,
197
+ NOW()
198
+ )
199
+ ON CONFLICT (id) DO NOTHING;
200
+
201
+ -- Add trialEndsAt for trialing subscription
202
+ UPDATE public."subscriptions"
203
+ SET "trialEndsAt" = NOW() + INTERVAL '14 days'
204
+ WHERE id = 'sub-riverstone-001';
205
+
206
+ -- Personal Teams - Free Plans
207
+ INSERT INTO public."subscriptions" (
208
+ id,
209
+ "teamId",
210
+ "planId",
211
+ status,
212
+ "currentPeriodStart",
213
+ "currentPeriodEnd",
214
+ "billingInterval",
215
+ "createdAt"
216
+ ) VALUES
217
+ -- Carlos Personal Team → Free Plan
218
+ (
219
+ 'sub-personal-carlos-001',
220
+ 'team-personal-carlos-001',
221
+ 'plan_free',
222
+ 'active',
223
+ NOW(),
224
+ NOW() + INTERVAL '100 years',
225
+ 'monthly',
226
+ NOW() - INTERVAL '45 days'
227
+ ),
228
+ -- NextSpark Team → Pro Plan (for superadmin testing)
229
+ (
230
+ 'sub-nextspark-001',
231
+ 'team-nextspark-001',
232
+ 'plan_pro',
233
+ 'active',
234
+ NOW() - INTERVAL '60 days',
235
+ NOW() + INTERVAL '30 days',
236
+ 'monthly',
237
+ NOW() - INTERVAL '120 days'
238
+ )
239
+ ON CONFLICT (id) DO NOTHING;
240
+
241
+ -- Add externalCustomerId for NextSpark team (for portal testing)
242
+ UPDATE public."subscriptions"
243
+ SET
244
+ "paymentProvider" = 'stripe',
245
+ "externalSubscriptionId" = 'sub_nextspark_stripe_001',
246
+ "externalCustomerId" = 'cus_nextspark_001'
247
+ WHERE id = 'sub-nextspark-001';
248
+
249
+ -- ============================================
250
+ -- SAMPLE BILLING EVENTS (Payment History)
251
+ -- ============================================
252
+
253
+ INSERT INTO public."billing_events" (
254
+ id,
255
+ "subscriptionId",
256
+ type,
257
+ status,
258
+ amount,
259
+ currency,
260
+ "externalPaymentId",
261
+ "createdAt"
262
+ ) VALUES
263
+ -- Everpoint Labs payments (2 months history)
264
+ ('be-ever-001', 'sub-everpoint-001', 'payment', 'succeeded', 2900, 'usd', 'pi_ever_001', NOW() - INTERVAL '60 days'),
265
+ ('be-ever-002', 'sub-everpoint-001', 'payment', 'succeeded', 2900, 'usd', 'pi_ever_002', NOW() - INTERVAL '30 days'),
266
+
267
+ -- Ironvale Global (enterprise, $499/mo)
268
+ ('be-iron-001', 'sub-ironvale-001', 'payment', 'succeeded', 49900, 'usd', 'pi_iron_001', NOW() - INTERVAL '45 days'),
269
+ ('be-iron-002', 'sub-ironvale-001', 'payment', 'succeeded', 49900, 'usd', 'pi_iron_002', NOW() - INTERVAL '15 days'),
270
+
271
+ -- NextSpark Team payments (for testing portal)
272
+ ('be-nextspark-001', 'sub-nextspark-001', 'payment', 'succeeded', 2900, 'usd', 'pi_nextspark_001', NOW() - INTERVAL '120 days'),
273
+ ('be-nextspark-002', 'sub-nextspark-001', 'payment', 'succeeded', 2900, 'usd', 'pi_nextspark_002', NOW() - INTERVAL '90 days'),
274
+ ('be-nextspark-003', 'sub-nextspark-001', 'payment', 'succeeded', 2900, 'usd', 'pi_nextspark_003', NOW() - INTERVAL '60 days'),
275
+ ('be-nextspark-004', 'sub-nextspark-001', 'payment', 'succeeded', 2900, 'usd', 'pi_nextspark_004', NOW() - INTERVAL '30 days')
276
+ ON CONFLICT (id) DO NOTHING;
277
+
278
+ -- ============================================
279
+ -- SAMPLE USAGE (Aggregate Data)
280
+ -- ============================================
281
+
282
+ INSERT INTO public."usage" (
283
+ id,
284
+ "subscriptionId",
285
+ "limitSlug",
286
+ "periodKey",
287
+ "currentValue",
288
+ "lastIncrementAt",
289
+ "createdAt"
290
+ ) VALUES
291
+ -- Everpoint Labs usage
292
+ ('usage-ever-members', 'sub-everpoint-001', 'team_members', 'all_time', 4, NOW() - INTERVAL '45 days', NOW() - INTERVAL '60 days'),
293
+ ('usage-ever-projects', 'sub-everpoint-001', 'projects', 'all_time', 12, NOW() - INTERVAL '5 days', NOW() - INTERVAL '60 days'),
294
+ ('usage-ever-storage', 'sub-everpoint-001', 'storage_gb', 'all_time', 25, NOW() - INTERVAL '2 days', NOW() - INTERVAL '60 days'),
295
+ ('usage-ever-api', 'sub-everpoint-001', 'api_calls', '2024-12', 45000, NOW() - INTERVAL '1 hour', NOW() - INTERVAL '30 days'),
296
+
297
+ -- Ironvale Global usage (enterprise - unlimited, but still tracked)
298
+ ('usage-iron-members', 'sub-ironvale-001', 'team_members', 'all_time', 4, NOW() - INTERVAL '30 days', NOW() - INTERVAL '45 days'),
299
+ ('usage-iron-projects', 'sub-ironvale-001', 'projects', 'all_time', 25, NOW() - INTERVAL '10 days', NOW() - INTERVAL '45 days'),
300
+ ('usage-iron-storage', 'sub-ironvale-001', 'storage_gb', 'all_time', 150, NOW() - INTERVAL '2 days', NOW() - INTERVAL '45 days'),
301
+ ('usage-iron-api', 'sub-ironvale-001', 'api_calls', '2024-12', 250000, NOW() - INTERVAL '30 minutes', NOW() - INTERVAL '30 days'),
302
+
303
+ -- NextSpark Team usage
304
+ ('usage-nextspark-members', 'sub-nextspark-001', 'team_members', 'all_time', 2, NOW() - INTERVAL '120 days', NOW() - INTERVAL '120 days'),
305
+ ('usage-nextspark-projects', 'sub-nextspark-001', 'projects', 'all_time', 3, NOW() - INTERVAL '30 days', NOW() - INTERVAL '120 days'),
306
+ ('usage-nextspark-api', 'sub-nextspark-001', 'api_calls', '2024-12', 5000, NOW() - INTERVAL '1 day', NOW() - INTERVAL '30 days'),
307
+
308
+ -- Carlos personal team (free plan)
309
+ ('usage-carlos-projects', 'sub-personal-carlos-001', 'projects', 'all_time', 4, NOW() - INTERVAL '15 days', NOW() - INTERVAL '45 days')
310
+ ON CONFLICT (id) DO NOTHING;
311
+
312
+ -- ============================================
313
+ -- SAMPLE USAGE EVENTS (Audit Trail)
314
+ -- ============================================
315
+
316
+ INSERT INTO public."usage_events" (
317
+ id,
318
+ "subscriptionId",
319
+ "userId",
320
+ "teamId",
321
+ "limitSlug",
322
+ delta,
323
+ action,
324
+ "resourceType",
325
+ "resourceId",
326
+ "periodKey",
327
+ "createdAt"
328
+ ) VALUES
329
+ -- Everpoint recent activity
330
+ ('ue-ever-001', 'sub-everpoint-001', 'usr-carlos-001', 'team-everpoint-001', 'projects', 1, 'create_project', 'project', 'proj-ever-001', 'all_time', NOW() - INTERVAL '5 days'),
331
+ ('ue-ever-002', 'sub-everpoint-001', 'usr-james-002', 'team-everpoint-001', 'api_calls', 500, 'api_batch', 'api_request', NULL, '2024-12', NOW() - INTERVAL '1 hour'),
332
+
333
+ -- Ironvale recent activity
334
+ ('ue-iron-001', 'sub-ironvale-001', 'usr-ana-005', 'team-ironvale-002', 'projects', 1, 'create_project', 'project', 'proj-iron-001', 'all_time', NOW() - INTERVAL '10 days'),
335
+ ('ue-iron-002', 'sub-ironvale-001', 'usr-ana-005', 'team-ironvale-002', 'api_calls', 1000, 'api_batch', 'api_request', NULL, '2024-12', NOW() - INTERVAL '30 minutes'),
336
+
337
+ -- NextSpark Team activity
338
+ ('ue-nextspark-001', 'sub-nextspark-001', 'test-superadmin-001', 'team-nextspark-001', 'projects', 1, 'create_project', 'project', 'proj-nextspark-001', 'all_time', NOW() - INTERVAL '30 days'),
339
+ ('ue-nextspark-002', 'sub-nextspark-001', 'test-superadmin-001', 'team-nextspark-001', 'api_calls', 200, 'api_batch', 'api_request', NULL, '2024-12', NOW() - INTERVAL '1 day')
340
+ ON CONFLICT (id) DO NOTHING;
341
+
342
+
343
+ -- ============================================
344
+ -- NEW TEAMS SUBSCRIPTIONS (10 teams from 090_sample_data.sql)
345
+ -- ============================================
346
+ -- Teams 1-8: Active subscriptions with 6 months payment history
347
+ -- Team 9 (Iota): Voluntary cancellation
348
+ -- Team 10 (Kappa): Payment failure cancellation
349
+
350
+ INSERT INTO public."subscriptions" (
351
+ id,
352
+ "teamId",
353
+ "planId",
354
+ status,
355
+ "currentPeriodStart",
356
+ "currentPeriodEnd",
357
+ "billingInterval",
358
+ "paymentProvider",
359
+ "externalSubscriptionId",
360
+ "externalCustomerId",
361
+ "createdAt",
362
+ "canceledAt",
363
+ metadata
364
+ ) VALUES
365
+ -- Alpha Tech → Pro Plan (active, $29/mo)
366
+ (
367
+ 'sub-alpha-001',
368
+ 'team-alpha-001',
369
+ 'plan_pro',
370
+ 'active',
371
+ NOW() - INTERVAL '30 days',
372
+ NOW() + INTERVAL '30 days',
373
+ 'monthly',
374
+ 'stripe',
375
+ 'sub_alpha_stripe_001',
376
+ 'cus_alpha_001',
377
+ NOW() - INTERVAL '180 days',
378
+ NULL,
379
+ '{}'::jsonb
380
+ ),
381
+ -- Beta Solutions → Pro Plan (active, $29/mo)
382
+ (
383
+ 'sub-beta-001',
384
+ 'team-beta-002',
385
+ 'plan_pro',
386
+ 'active',
387
+ NOW() - INTERVAL '25 days',
388
+ NOW() + INTERVAL '5 days',
389
+ 'monthly',
390
+ 'stripe',
391
+ 'sub_beta_stripe_001',
392
+ 'cus_beta_001',
393
+ NOW() - INTERVAL '180 days',
394
+ NULL,
395
+ '{}'::jsonb
396
+ ),
397
+ -- Gamma Industries → Pro Plan (active, $29/mo)
398
+ (
399
+ 'sub-gamma-001',
400
+ 'team-gamma-003',
401
+ 'plan_pro',
402
+ 'active',
403
+ NOW() - INTERVAL '20 days',
404
+ NOW() + INTERVAL '10 days',
405
+ 'monthly',
406
+ 'stripe',
407
+ 'sub_gamma_stripe_001',
408
+ 'cus_gamma_001',
409
+ NOW() - INTERVAL '180 days',
410
+ NULL,
411
+ '{}'::jsonb
412
+ ),
413
+ -- Delta Dynamics → Pro Plan (active, $29/mo)
414
+ (
415
+ 'sub-delta-001',
416
+ 'team-delta-004',
417
+ 'plan_pro',
418
+ 'active',
419
+ NOW() - INTERVAL '15 days',
420
+ NOW() + INTERVAL '15 days',
421
+ 'monthly',
422
+ 'stripe',
423
+ 'sub_delta_stripe_001',
424
+ 'cus_delta_001',
425
+ NOW() - INTERVAL '180 days',
426
+ NULL,
427
+ '{}'::jsonb
428
+ ),
429
+ -- Epsilon Media → Pro Plan (active, $29/mo)
430
+ (
431
+ 'sub-epsilon-001',
432
+ 'team-epsilon-005',
433
+ 'plan_pro',
434
+ 'active',
435
+ NOW() - INTERVAL '10 days',
436
+ NOW() + INTERVAL '20 days',
437
+ 'monthly',
438
+ 'stripe',
439
+ 'sub_epsilon_stripe_001',
440
+ 'cus_epsilon_001',
441
+ NOW() - INTERVAL '180 days',
442
+ NULL,
443
+ '{}'::jsonb
444
+ ),
445
+ -- Zeta Finance → Pro Plan (active, $29/mo)
446
+ (
447
+ 'sub-zeta-001',
448
+ 'team-zeta-006',
449
+ 'plan_pro',
450
+ 'active',
451
+ NOW() - INTERVAL '5 days',
452
+ NOW() + INTERVAL '25 days',
453
+ 'monthly',
454
+ 'stripe',
455
+ 'sub_zeta_stripe_001',
456
+ 'cus_zeta_001',
457
+ NOW() - INTERVAL '180 days',
458
+ NULL,
459
+ '{}'::jsonb
460
+ ),
461
+ -- Eta Healthcare → Pro Plan (active, $29/mo)
462
+ (
463
+ 'sub-eta-001',
464
+ 'team-eta-007',
465
+ 'plan_pro',
466
+ 'active',
467
+ NOW() - INTERVAL '28 days',
468
+ NOW() + INTERVAL '2 days',
469
+ 'monthly',
470
+ 'stripe',
471
+ 'sub_eta_stripe_001',
472
+ 'cus_eta_001',
473
+ NOW() - INTERVAL '180 days',
474
+ NULL,
475
+ '{}'::jsonb
476
+ ),
477
+ -- Theta Enterprises → Enterprise Plan (active, $499/mo)
478
+ (
479
+ 'sub-theta-001',
480
+ 'team-theta-008',
481
+ 'plan_enterprise',
482
+ 'active',
483
+ NOW() - INTERVAL '22 days',
484
+ NOW() + INTERVAL '8 days',
485
+ 'monthly',
486
+ 'stripe',
487
+ 'sub_theta_stripe_001',
488
+ 'cus_theta_001',
489
+ NOW() - INTERVAL '180 days',
490
+ NULL,
491
+ '{}'::jsonb
492
+ ),
493
+ -- Iota Consulting → Pro Plan (CANCELED - voluntary)
494
+ (
495
+ 'sub-iota-001',
496
+ 'team-iota-009',
497
+ 'plan_pro',
498
+ 'canceled',
499
+ NOW() - INTERVAL '45 days',
500
+ NOW() - INTERVAL '15 days',
501
+ 'monthly',
502
+ 'stripe',
503
+ 'sub_iota_stripe_001',
504
+ 'cus_iota_001',
505
+ NOW() - INTERVAL '180 days',
506
+ NOW() - INTERVAL '15 days',
507
+ '{"cancelReason": "voluntary", "canceledBy": "user"}'::jsonb
508
+ ),
509
+ -- Kappa Labs → Pro Plan (CANCELED - payment failure)
510
+ (
511
+ 'sub-kappa-001',
512
+ 'team-kappa-010',
513
+ 'plan_pro',
514
+ 'canceled',
515
+ NOW() - INTERVAL '40 days',
516
+ NOW() - INTERVAL '10 days',
517
+ 'monthly',
518
+ 'stripe',
519
+ 'sub_kappa_stripe_001',
520
+ 'cus_kappa_001',
521
+ NOW() - INTERVAL '180 days',
522
+ NOW() - INTERVAL '10 days',
523
+ '{"cancelReason": "payment_failed", "failedAttempts": 4}'::jsonb
524
+ )
525
+ ON CONFLICT (id) DO NOTHING;
526
+
527
+ -- ============================================
528
+ -- NEW TEAMS BILLING EVENTS (6 months history each)
529
+ -- ============================================
530
+ -- All amounts in cents (2900 = $29, 49900 = $499)
531
+
532
+ INSERT INTO public."billing_events" (
533
+ id,
534
+ "subscriptionId",
535
+ type,
536
+ status,
537
+ amount,
538
+ currency,
539
+ "externalPaymentId",
540
+ "createdAt"
541
+ ) VALUES
542
+ -- ========================================
543
+ -- ALPHA TECH - 6 months payment history
544
+ -- ========================================
545
+ ('be-alpha-m1', 'sub-alpha-001', 'payment', 'succeeded', 2900, 'usd', 'pi_alpha_m1', NOW() - INTERVAL '180 days'),
546
+ ('be-alpha-m2', 'sub-alpha-001', 'payment', 'succeeded', 2900, 'usd', 'pi_alpha_m2', NOW() - INTERVAL '150 days'),
547
+ ('be-alpha-m3', 'sub-alpha-001', 'payment', 'succeeded', 2900, 'usd', 'pi_alpha_m3', NOW() - INTERVAL '120 days'),
548
+ ('be-alpha-m4', 'sub-alpha-001', 'payment', 'succeeded', 2900, 'usd', 'pi_alpha_m4', NOW() - INTERVAL '90 days'),
549
+ ('be-alpha-m5', 'sub-alpha-001', 'payment', 'succeeded', 2900, 'usd', 'pi_alpha_m5', NOW() - INTERVAL '60 days'),
550
+ ('be-alpha-m6', 'sub-alpha-001', 'payment', 'succeeded', 2900, 'usd', 'pi_alpha_m6', NOW() - INTERVAL '30 days'),
551
+
552
+ -- ========================================
553
+ -- BETA SOLUTIONS - 6 months payment history
554
+ -- ========================================
555
+ ('be-beta-m1', 'sub-beta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_beta_m1', NOW() - INTERVAL '180 days'),
556
+ ('be-beta-m2', 'sub-beta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_beta_m2', NOW() - INTERVAL '150 days'),
557
+ ('be-beta-m3', 'sub-beta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_beta_m3', NOW() - INTERVAL '120 days'),
558
+ ('be-beta-m4', 'sub-beta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_beta_m4', NOW() - INTERVAL '90 days'),
559
+ ('be-beta-m5', 'sub-beta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_beta_m5', NOW() - INTERVAL '60 days'),
560
+ ('be-beta-m6', 'sub-beta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_beta_m6', NOW() - INTERVAL '30 days'),
561
+
562
+ -- ========================================
563
+ -- GAMMA INDUSTRIES - 6 months payment history
564
+ -- ========================================
565
+ ('be-gamma-m1', 'sub-gamma-001', 'payment', 'succeeded', 2900, 'usd', 'pi_gamma_m1', NOW() - INTERVAL '180 days'),
566
+ ('be-gamma-m2', 'sub-gamma-001', 'payment', 'succeeded', 2900, 'usd', 'pi_gamma_m2', NOW() - INTERVAL '150 days'),
567
+ ('be-gamma-m3', 'sub-gamma-001', 'payment', 'succeeded', 2900, 'usd', 'pi_gamma_m3', NOW() - INTERVAL '120 days'),
568
+ ('be-gamma-m4', 'sub-gamma-001', 'payment', 'succeeded', 2900, 'usd', 'pi_gamma_m4', NOW() - INTERVAL '90 days'),
569
+ ('be-gamma-m5', 'sub-gamma-001', 'payment', 'succeeded', 2900, 'usd', 'pi_gamma_m5', NOW() - INTERVAL '60 days'),
570
+ ('be-gamma-m6', 'sub-gamma-001', 'payment', 'succeeded', 2900, 'usd', 'pi_gamma_m6', NOW() - INTERVAL '30 days'),
571
+
572
+ -- ========================================
573
+ -- DELTA DYNAMICS - 6 months payment history
574
+ -- ========================================
575
+ ('be-delta-m1', 'sub-delta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_delta_m1', NOW() - INTERVAL '180 days'),
576
+ ('be-delta-m2', 'sub-delta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_delta_m2', NOW() - INTERVAL '150 days'),
577
+ ('be-delta-m3', 'sub-delta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_delta_m3', NOW() - INTERVAL '120 days'),
578
+ ('be-delta-m4', 'sub-delta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_delta_m4', NOW() - INTERVAL '90 days'),
579
+ ('be-delta-m5', 'sub-delta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_delta_m5', NOW() - INTERVAL '60 days'),
580
+ ('be-delta-m6', 'sub-delta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_delta_m6', NOW() - INTERVAL '30 days'),
581
+
582
+ -- ========================================
583
+ -- EPSILON MEDIA - 6 months payment history
584
+ -- ========================================
585
+ ('be-epsilon-m1', 'sub-epsilon-001', 'payment', 'succeeded', 2900, 'usd', 'pi_epsilon_m1', NOW() - INTERVAL '180 days'),
586
+ ('be-epsilon-m2', 'sub-epsilon-001', 'payment', 'succeeded', 2900, 'usd', 'pi_epsilon_m2', NOW() - INTERVAL '150 days'),
587
+ ('be-epsilon-m3', 'sub-epsilon-001', 'payment', 'succeeded', 2900, 'usd', 'pi_epsilon_m3', NOW() - INTERVAL '120 days'),
588
+ ('be-epsilon-m4', 'sub-epsilon-001', 'payment', 'succeeded', 2900, 'usd', 'pi_epsilon_m4', NOW() - INTERVAL '90 days'),
589
+ ('be-epsilon-m5', 'sub-epsilon-001', 'payment', 'succeeded', 2900, 'usd', 'pi_epsilon_m5', NOW() - INTERVAL '60 days'),
590
+ ('be-epsilon-m6', 'sub-epsilon-001', 'payment', 'succeeded', 2900, 'usd', 'pi_epsilon_m6', NOW() - INTERVAL '30 days'),
591
+
592
+ -- ========================================
593
+ -- ZETA FINANCE - 6 months payment history
594
+ -- ========================================
595
+ ('be-zeta-m1', 'sub-zeta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_zeta_m1', NOW() - INTERVAL '180 days'),
596
+ ('be-zeta-m2', 'sub-zeta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_zeta_m2', NOW() - INTERVAL '150 days'),
597
+ ('be-zeta-m3', 'sub-zeta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_zeta_m3', NOW() - INTERVAL '120 days'),
598
+ ('be-zeta-m4', 'sub-zeta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_zeta_m4', NOW() - INTERVAL '90 days'),
599
+ ('be-zeta-m5', 'sub-zeta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_zeta_m5', NOW() - INTERVAL '60 days'),
600
+ ('be-zeta-m6', 'sub-zeta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_zeta_m6', NOW() - INTERVAL '30 days'),
601
+
602
+ -- ========================================
603
+ -- ETA HEALTHCARE - 6 months payment history
604
+ -- ========================================
605
+ ('be-eta-m1', 'sub-eta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_eta_m1', NOW() - INTERVAL '180 days'),
606
+ ('be-eta-m2', 'sub-eta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_eta_m2', NOW() - INTERVAL '150 days'),
607
+ ('be-eta-m3', 'sub-eta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_eta_m3', NOW() - INTERVAL '120 days'),
608
+ ('be-eta-m4', 'sub-eta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_eta_m4', NOW() - INTERVAL '90 days'),
609
+ ('be-eta-m5', 'sub-eta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_eta_m5', NOW() - INTERVAL '60 days'),
610
+ ('be-eta-m6', 'sub-eta-001', 'payment', 'succeeded', 2900, 'usd', 'pi_eta_m6', NOW() - INTERVAL '30 days'),
611
+
612
+ -- ========================================
613
+ -- THETA ENTERPRISES - 6 months Enterprise @ $499/mo
614
+ -- ========================================
615
+ ('be-theta-m1', 'sub-theta-001', 'payment', 'succeeded', 49900, 'usd', 'pi_theta_m1', NOW() - INTERVAL '180 days'),
616
+ ('be-theta-m2', 'sub-theta-001', 'payment', 'succeeded', 49900, 'usd', 'pi_theta_m2', NOW() - INTERVAL '150 days'),
617
+ ('be-theta-m3', 'sub-theta-001', 'payment', 'succeeded', 49900, 'usd', 'pi_theta_m3', NOW() - INTERVAL '120 days'),
618
+ ('be-theta-m4', 'sub-theta-001', 'payment', 'succeeded', 49900, 'usd', 'pi_theta_m4', NOW() - INTERVAL '90 days'),
619
+ ('be-theta-m5', 'sub-theta-001', 'payment', 'succeeded', 49900, 'usd', 'pi_theta_m5', NOW() - INTERVAL '60 days'),
620
+ ('be-theta-m6', 'sub-theta-001', 'payment', 'succeeded', 49900, 'usd', 'pi_theta_m6', NOW() - INTERVAL '30 days'),
621
+
622
+ -- ========================================
623
+ -- IOTA CONSULTING - 5 months paid, then VOLUNTARY CANCELLATION
624
+ -- ========================================
625
+ ('be-iota-m1', 'sub-iota-001', 'payment', 'succeeded', 2900, 'usd', 'pi_iota_m1', NOW() - INTERVAL '180 days'),
626
+ ('be-iota-m2', 'sub-iota-001', 'payment', 'succeeded', 2900, 'usd', 'pi_iota_m2', NOW() - INTERVAL '150 days'),
627
+ ('be-iota-m3', 'sub-iota-001', 'payment', 'succeeded', 2900, 'usd', 'pi_iota_m3', NOW() - INTERVAL '120 days'),
628
+ ('be-iota-m4', 'sub-iota-001', 'payment', 'succeeded', 2900, 'usd', 'pi_iota_m4', NOW() - INTERVAL '90 days'),
629
+ ('be-iota-m5', 'sub-iota-001', 'payment', 'succeeded', 2900, 'usd', 'pi_iota_m5', NOW() - INTERVAL '60 days'),
630
+ -- Last invoice before voluntary cancellation
631
+ ('be-iota-inv-last', 'sub-iota-001', 'invoice', 'succeeded', 2900, 'usd', 'in_iota_last', NOW() - INTERVAL '30 days'),
632
+
633
+ -- ========================================
634
+ -- KAPPA LABS - 4 months paid, 2 failed payments, then CANCELED
635
+ -- ========================================
636
+ ('be-kappa-m1', 'sub-kappa-001', 'payment', 'succeeded', 2900, 'usd', 'pi_kappa_m1', NOW() - INTERVAL '180 days'),
637
+ ('be-kappa-m2', 'sub-kappa-001', 'payment', 'succeeded', 2900, 'usd', 'pi_kappa_m2', NOW() - INTERVAL '150 days'),
638
+ ('be-kappa-m3', 'sub-kappa-001', 'payment', 'succeeded', 2900, 'usd', 'pi_kappa_m3', NOW() - INTERVAL '120 days'),
639
+ ('be-kappa-m4', 'sub-kappa-001', 'payment', 'succeeded', 2900, 'usd', 'pi_kappa_m4', NOW() - INTERVAL '90 days'),
640
+ -- First failed payment attempt
641
+ ('be-kappa-fail1', 'sub-kappa-001', 'payment', 'failed', 2900, 'usd', 'pi_kappa_fail1', NOW() - INTERVAL '60 days'),
642
+ -- Retry failed payment
643
+ ('be-kappa-fail2', 'sub-kappa-001', 'payment', 'failed', 2900, 'usd', 'pi_kappa_fail2', NOW() - INTERVAL '50 days'),
644
+ -- Second failed payment (next month)
645
+ ('be-kappa-fail3', 'sub-kappa-001', 'payment', 'failed', 2900, 'usd', 'pi_kappa_fail3', NOW() - INTERVAL '30 days'),
646
+ -- Final attempt failed, subscription canceled
647
+ ('be-kappa-fail4', 'sub-kappa-001', 'payment', 'failed', 2900, 'usd', 'pi_kappa_fail4', NOW() - INTERVAL '20 days')
648
+ ON CONFLICT (id) DO NOTHING;
649
+
650
+ -- ============================================
651
+ -- ANNUAL SUBSCRIPTION TEAMS (5 teams)
652
+ -- ============================================
653
+ -- Teams 11-13: Enterprise Yearly ($4,990/yr = 499000 cents)
654
+ -- Teams 14-15: Pro Yearly ($290/yr = 29000 cents)
655
+
656
+ INSERT INTO public."subscriptions" (
657
+ id,
658
+ "teamId",
659
+ "planId",
660
+ status,
661
+ "currentPeriodStart",
662
+ "currentPeriodEnd",
663
+ "billingInterval",
664
+ "paymentProvider",
665
+ "externalSubscriptionId",
666
+ "externalCustomerId",
667
+ "createdAt",
668
+ metadata
669
+ ) VALUES
670
+ -- Lambda Corp → Enterprise Plan (active, yearly $4,990/yr)
671
+ (
672
+ 'sub-lambda-001',
673
+ 'team-lambda-011',
674
+ 'plan_enterprise',
675
+ 'active',
676
+ NOW() - INTERVAL '60 days',
677
+ NOW() + INTERVAL '305 days',
678
+ 'yearly',
679
+ 'stripe',
680
+ 'sub_lambda_stripe_001',
681
+ 'cus_lambda_001',
682
+ NOW() - INTERVAL '365 days',
683
+ '{}'::jsonb
684
+ ),
685
+ -- Mu Industries → Enterprise Plan (active, yearly $4,990/yr)
686
+ (
687
+ 'sub-mu-001',
688
+ 'team-mu-012',
689
+ 'plan_enterprise',
690
+ 'active',
691
+ NOW() - INTERVAL '90 days',
692
+ NOW() + INTERVAL '275 days',
693
+ 'yearly',
694
+ 'stripe',
695
+ 'sub_mu_stripe_001',
696
+ 'cus_mu_001',
697
+ NOW() - INTERVAL '365 days',
698
+ '{}'::jsonb
699
+ ),
700
+ -- Nu Dynamics → Enterprise Plan (active, yearly $4,990/yr)
701
+ (
702
+ 'sub-nu-001',
703
+ 'team-nu-013',
704
+ 'plan_enterprise',
705
+ 'active',
706
+ NOW() - INTERVAL '120 days',
707
+ NOW() + INTERVAL '245 days',
708
+ 'yearly',
709
+ 'stripe',
710
+ 'sub_nu_stripe_001',
711
+ 'cus_nu_001',
712
+ NOW() - INTERVAL '365 days',
713
+ '{}'::jsonb
714
+ ),
715
+ -- Xi Solutions → Pro Plan (active, yearly $290/yr)
716
+ (
717
+ 'sub-xi-001',
718
+ 'team-xi-014',
719
+ 'plan_pro',
720
+ 'active',
721
+ NOW() - INTERVAL '45 days',
722
+ NOW() + INTERVAL '320 days',
723
+ 'yearly',
724
+ 'stripe',
725
+ 'sub_xi_stripe_001',
726
+ 'cus_xi_001',
727
+ NOW() - INTERVAL '365 days',
728
+ '{}'::jsonb
729
+ ),
730
+ -- Omicron Labs → Pro Plan (active, yearly $290/yr)
731
+ (
732
+ 'sub-omicron-001',
733
+ 'team-omicron-015',
734
+ 'plan_pro',
735
+ 'active',
736
+ NOW() - INTERVAL '30 days',
737
+ NOW() + INTERVAL '335 days',
738
+ 'yearly',
739
+ 'stripe',
740
+ 'sub_omicron_stripe_001',
741
+ 'cus_omicron_001',
742
+ NOW() - INTERVAL '365 days',
743
+ '{}'::jsonb
744
+ )
745
+ ON CONFLICT (id) DO NOTHING;
746
+
747
+ -- ============================================
748
+ -- ANNUAL BILLING EVENTS (1 year payment each)
749
+ -- ============================================
750
+ INSERT INTO public."billing_events" (
751
+ id,
752
+ "subscriptionId",
753
+ type,
754
+ status,
755
+ amount,
756
+ currency,
757
+ "externalPaymentId",
758
+ "createdAt"
759
+ ) VALUES
760
+ -- Lambda Corp - 1 yearly payment
761
+ ('be-lambda-y1', 'sub-lambda-001', 'payment', 'succeeded', 499000, 'usd', 'pi_lambda_y1', NOW() - INTERVAL '60 days'),
762
+
763
+ -- Mu Industries - 1 yearly payment
764
+ ('be-mu-y1', 'sub-mu-001', 'payment', 'succeeded', 499000, 'usd', 'pi_mu_y1', NOW() - INTERVAL '90 days'),
765
+
766
+ -- Nu Dynamics - 1 yearly payment
767
+ ('be-nu-y1', 'sub-nu-001', 'payment', 'succeeded', 499000, 'usd', 'pi_nu_y1', NOW() - INTERVAL '120 days'),
768
+
769
+ -- Xi Solutions - 1 yearly payment (Pro)
770
+ ('be-xi-y1', 'sub-xi-001', 'payment', 'succeeded', 29000, 'usd', 'pi_xi_y1', NOW() - INTERVAL '45 days'),
771
+
772
+ -- Omicron Labs - 1 yearly payment (Pro)
773
+ ('be-omicron-y1', 'sub-omicron-001', 'payment', 'succeeded', 29000, 'usd', 'pi_omicron_y1', NOW() - INTERVAL '30 days')
774
+ ON CONFLICT (id) DO NOTHING;