cdp-edge 1.0.0

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 (176) hide show
  1. package/README.md +324 -0
  2. package/bin/cdp-edge.js +71 -0
  3. package/contracts/agent-versions.json +679 -0
  4. package/contracts/api-versions.json +372 -0
  5. package/contracts/types.ts +81 -0
  6. package/dist/commands/analyze.js +52 -0
  7. package/dist/commands/infra.js +54 -0
  8. package/dist/commands/install.js +191 -0
  9. package/dist/commands/server.js +174 -0
  10. package/dist/commands/setup.js +355 -0
  11. package/dist/commands/validate.js +248 -0
  12. package/dist/index.js +12 -0
  13. package/dist/sdk/cdpTrack.js +2095 -0
  14. package/dist/sdk/cdpTrack.min.js +64 -0
  15. package/dist/sdk/install-snippet.html +10 -0
  16. package/docs/CI-CD-SETUP.md +217 -0
  17. package/docs/events-reference.md +359 -0
  18. package/docs/installation.md +155 -0
  19. package/docs/quick-start.md +185 -0
  20. package/docs/sdk-reference.md +371 -0
  21. package/docs/whatsapp-ctwa.md +210 -0
  22. package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
  23. package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
  24. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +683 -0
  25. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +513 -0
  26. package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
  27. package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
  28. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
  29. package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
  30. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
  31. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
  32. package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
  33. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +66 -0
  34. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +364 -0
  35. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
  36. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2097 -0
  37. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1459 -0
  38. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
  39. package/extracted-skill/tracking-events-generator/agents/database-agent.md +668 -0
  40. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
  41. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
  42. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +238 -0
  43. package/extracted-skill/tracking-events-generator/agents/email-agent.md +88 -0
  44. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +257 -0
  45. package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
  46. package/extracted-skill/tracking-events-generator/agents/google-agent.md +235 -0
  47. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +525 -0
  48. package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
  49. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +173 -0
  50. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
  51. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
  52. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +960 -0
  53. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +2154 -0
  54. package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
  55. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -0
  56. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +878 -0
  57. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +118 -0
  58. package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
  59. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +272 -0
  60. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1167 -0
  61. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1442 -0
  62. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +318 -0
  63. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
  64. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +258 -0
  65. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +321 -0
  66. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1861 -0
  67. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
  68. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +391 -0
  69. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +182 -0
  70. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +459 -0
  71. package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
  72. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +271 -0
  73. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +177 -0
  74. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +129 -0
  75. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +707 -0
  76. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +537 -0
  77. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
  78. package/extracted-skill/tracking-events-generator/cdpTrack.js +640 -0
  79. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +372 -0
  80. package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
  81. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
  82. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
  83. package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
  84. package/extracted-skill/tracking-events-generator/knowledge-base.md +3066 -0
  85. package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
  86. package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
  87. package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
  88. package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
  89. package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
  90. package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
  91. package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
  92. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
  93. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
  94. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
  95. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +132 -0
  96. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
  97. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
  98. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
  99. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
  100. package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
  101. package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
  102. package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
  103. package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
  104. package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
  105. package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
  106. package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
  107. package/package.json +89 -0
  108. package/scripts/build-sdk.js +106 -0
  109. package/server-edge-tracker/.client.env.example +14 -0
  110. package/server-edge-tracker/INSTALAR.md +527 -0
  111. package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
  112. package/server-edge-tracker/config/utm-mapping.json +64 -0
  113. package/server-edge-tracker/deploy-client.cjs +76 -0
  114. package/server-edge-tracker/index.ts +1164 -0
  115. package/server-edge-tracker/migrate-new-db.sql +137 -0
  116. package/server-edge-tracker/migrate-v2.sql +16 -0
  117. package/server-edge-tracker/migrate-v3.sql +6 -0
  118. package/server-edge-tracker/migrate-v4.sql +18 -0
  119. package/server-edge-tracker/migrate-v5.sql +17 -0
  120. package/server-edge-tracker/migrate-v6.sql +24 -0
  121. package/server-edge-tracker/migrate-v7.sql +64 -0
  122. package/server-edge-tracker/migrate.sql +111 -0
  123. package/server-edge-tracker/modules/db.ts +702 -0
  124. package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
  125. package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
  126. package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
  127. package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
  128. package/server-edge-tracker/modules/dispatch/whatsapp.ts +279 -0
  129. package/server-edge-tracker/modules/intelligence.ts +589 -0
  130. package/server-edge-tracker/modules/ml/bidding.ts +247 -0
  131. package/server-edge-tracker/modules/ml/fraud.ts +302 -0
  132. package/server-edge-tracker/modules/ml/logistic.ts +226 -0
  133. package/server-edge-tracker/modules/ml/ltv.ts +531 -0
  134. package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
  135. package/server-edge-tracker/modules/ml/quiz.ts +343 -0
  136. package/server-edge-tracker/modules/ml/roas.ts +255 -0
  137. package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
  138. package/server-edge-tracker/modules/nurture.ts +257 -0
  139. package/server-edge-tracker/modules/utils.ts +311 -0
  140. package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
  141. package/server-edge-tracker/schema-ab-ltv.sql +97 -0
  142. package/server-edge-tracker/schema-bidding.sql +86 -0
  143. package/server-edge-tracker/schema-fraud.sql +90 -0
  144. package/server-edge-tracker/schema-indexes.sql +67 -0
  145. package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
  146. package/server-edge-tracker/schema-quiz.sql +52 -0
  147. package/server-edge-tracker/schema-sales-engine.sql +113 -0
  148. package/server-edge-tracker/schema-segmentation.sql +219 -0
  149. package/server-edge-tracker/schema-utm.sql +82 -0
  150. package/server-edge-tracker/schema.sql +265 -0
  151. package/server-edge-tracker/types.ts +258 -0
  152. package/server-edge-tracker/wrangler.toml +136 -0
  153. package/templates/afiliado-sem-landing.md +312 -0
  154. package/templates/captura-de-lead.md +78 -0
  155. package/templates/captura-lead-evento-externo.md +99 -0
  156. package/templates/checkout-proprio.md +111 -0
  157. package/templates/install/.claude/commands/cdp.md +1 -0
  158. package/templates/install/CLAUDE.md +65 -0
  159. package/templates/lancamento-imobiliario.md +344 -0
  160. package/templates/linkedin/tag-template.js +46 -0
  161. package/templates/multi-step-checkout.md +672 -0
  162. package/templates/pagina-obrigado.md +55 -0
  163. package/templates/pinterest/conversions-api-template.js +144 -0
  164. package/templates/pinterest/event-mappings.json +48 -0
  165. package/templates/pinterest/tag-template.js +28 -0
  166. package/templates/quiz-funnel.md +132 -0
  167. package/templates/reddit/conversions-api-template.js +205 -0
  168. package/templates/reddit/event-mappings.json +56 -0
  169. package/templates/reddit/pixel-template.js +19 -0
  170. package/templates/scenarios/behavior-engine.js +425 -0
  171. package/templates/scenarios/real-estate-logic.md +50 -0
  172. package/templates/scenarios/sales-page-logic.md +50 -0
  173. package/templates/spotify/pixel-template.js +46 -0
  174. package/templates/trafego-direto.md +582 -0
  175. package/templates/vsl-page.md +292 -0
  176. package/templates/webinar-registration.md +63 -0
@@ -0,0 +1,459 @@
1
+ # tracking-plan-agent (Blueprint Designer) — CDP Edge
2
+
3
+ Você é o agente responsável por gerar o **documento de tracking plan** do projeto.
4
+ Sua saída é um arquivo `.md` ou `.xlsx` que serve como documentação viva da implementação.
5
+
6
+ ---
7
+
8
+ ## 🎯 OBJETIVO PRINCIPAL
9
+
10
+ Gerar um tracking plan **validado e verificável** que elimine:
11
+ - Eventos fantasmas (mencionados mas não implementados)
12
+ - Inconsistências entre o plano e o código real
13
+ - Seletores inexistentes no código
14
+ - Parâmetros faltantes em eventos de conversão
15
+
16
+ ---
17
+
18
+ ## ACESSO AO CONTEXTO
19
+
20
+ **Quando você é chamado:**
21
+ - `ANALISE_PAGINAS`: JSON do Page Analyzer
22
+ - `OUTPUTS_AGENTES`: código gerado por todos os agentes
23
+ - `API_VERSIONS`: versões atuais de `contracts/api-versions.json`
24
+
25
+ ---
26
+
27
+ ## PASSO 1 — ANÁLISE DO TRACKING PLAN CRUZADA
28
+
29
+ ### 1.1 Verificar Cobertura de Eventos
30
+
31
+ ```typescript
32
+ // Comparar eventos do Page Analyzer com outputs dos agentes
33
+ function validateEventCoverage(pageAnalysis, agentOutputs) {
34
+ const pageEvents = new Set();
35
+ const agentEvents = new Set();
36
+
37
+ // Extrair eventos de cada agente
38
+ for (const [agent, output] of Object.entries(agentOutputs)) {
39
+ if (output.events) {
40
+ output.events.forEach(event => agentEvents.add(`${agent}:${event.name}`));
41
+ }
42
+ }
43
+
44
+ // Mapear eventos do Page Analyzer
45
+ pageAnalysis.paginas.forEach(pagina => {
46
+ // Eventos de formulários
47
+ pagina.formularios.forEach(form => {
48
+ pageEvents.add(`form:${form.id}:${form.evento_sugerido}`);
49
+ });
50
+
51
+ // Eventos de CTAs
52
+ pagina.ctas.forEach(cta => {
53
+ pageEvents.add(`cta:${cta.texto}:${cta.evento_sugerido}`);
54
+ });
55
+
56
+ // Eventos de scroll
57
+ pagina.eventos_scroll.forEach(scroll => {
58
+ pageEvents.add(`scroll:${scroll.secao}:${scroll.evento_sugerido}`);
59
+ });
60
+ });
61
+
62
+ // Encontrar eventos do Page Analyzer NÃO implementados por nenhum agente
63
+ const unimplementedEvents = [];
64
+ pageEvents.forEach(eventKey => {
65
+ if (!agentEvents.has(eventKey)) {
66
+ unimplementedEvents.push(eventKey);
67
+ }
68
+ });
69
+
70
+ // Encontrar eventos implementados pelos agentes mas SEM correspondência no Page Analyzer
71
+ const orphanEvents = [];
72
+ agentEvents.forEach(eventKey => {
73
+ if (!pageEvents.has(eventKey)) {
74
+ orphanEvents.push(eventKey);
75
+ }
76
+ });
77
+
78
+ return {
79
+ total_page_events: pageEvents.size,
80
+ total_implemented_events: agentEvents.size,
81
+ unimplemented_events: unimplementedEvents, // ← Eventos do plano sem código
82
+ orphan_events: orphanEvents, // ← Código sem evento no plano
83
+ coverage_percentage: Math.round(
84
+ ((pageEvents.size - unimplementedEvents.length) / Math.max(pageEvents.size, 1)) * 100
85
+ )
86
+ };
87
+ }
88
+ ```
89
+
90
+ ### 1.2 Verificar Consistência de Parâmetros
91
+
92
+ ```typescript
93
+ // Verificar se eventos de conversão têm todos os campos críticos
94
+ function validateConversionParameters(events, apiVersions) {
95
+ const criticalFields = ['value', 'currency', 'content_ids', 'transaction_id'];
96
+ const issues = [];
97
+
98
+ events.filter(e => ['Lead', 'Purchase', 'InitiateCheckout'].includes(e.name)).forEach(event => {
99
+ const platform = event.platform; // meta, google, tiktok, etc.
100
+
101
+ // Verificar se parâmetros críticos estão presentes
102
+ criticalFields.forEach(field => {
103
+ if (!event[field]) {
104
+ issues.push({
105
+ event: event.name,
106
+ platform,
107
+ severity: 'HIGH',
108
+ issue: `Missing required field: ${field}`,
109
+ recommendation: `Adicionar ${field} ao evento ${event.name}`
110
+ });
111
+ }
112
+ });
113
+ });
114
+
115
+ return issues;
116
+ }
117
+ ```
118
+
119
+ ### 1.3 Verificar Seletores Implementados
120
+
121
+ ```typescript
122
+ // Verificar se seletores no tracking plan existem no código
123
+ function validateSelectorsExist(trackingPlan, pageAnalysis) {
124
+ const missingSelectors = [];
125
+
126
+ // Verificar seletores de formulários
127
+ pageAnalysis.paginas.forEach(pagina => {
128
+ pagina.formularios.forEach(form => {
129
+ if (form.verificado === false) {
130
+ missingSelectors.push({
131
+ type: 'form',
132
+ id: form.id,
133
+ selector: form.seletores_captura.form,
134
+ event: form.evento_sugerido,
135
+ file: pagina.arquivo
136
+ });
137
+ }
138
+ });
139
+ });
140
+
141
+ // Verificar seletores de CTAs
142
+ pageAnalysis.paginas.forEach(pagina => {
143
+ pagina.ctas.forEach(cta => {
144
+ if (cta.verificado === false) {
145
+ missingSelectors.push({
146
+ type: 'cta',
147
+ selector: cta.seletor_sugerido,
148
+ event: cta.evento_sugerido,
149
+ file: pagina.arquivo
150
+ });
151
+ }
152
+ });
153
+ });
154
+
155
+ return missingSelectors;
156
+ }
157
+ ```
158
+
159
+ ### 1.4 Verificar Versões de API
160
+
161
+ ```typescript
162
+ // Ler api-versions.json e verificar consistência
163
+ async function validateApiVersions(trackingPlan) {
164
+ const apiVersions = await readJSON('contracts/api-versions.json');
165
+
166
+ for (const [platform, events] of Object.entries(trackingPlan.events)) {
167
+ const platformConfig = apiVersions[platform];
168
+
169
+ if (!platformConfig) {
170
+ events.forEach(event => {
171
+ event.api_version_issue = `${platform.toUpperCase()} API not configured in api-versions.json`;
172
+ });
173
+ continue;
174
+ }
175
+
176
+ const currentVersion = platformConfig.versions.pixel?.current ||
177
+ platformConfig.versions.capi?.current ||
178
+ platformConfig.versions.pixel?.current || 'unknown';
179
+ const recommendedVersion = platformConfig.versions.pixel?.recommended || currentVersion;
180
+ const minimumSupported = platformConfig.versions.pixel?.minimum_supported || 'unknown';
181
+
182
+ // Verificar se versão usada é adequada
183
+ if (currentVersion !== recommendedVersion) {
184
+ events.forEach(event => {
185
+ event.api_version_issue = `${platform.toUpperCase()} API using ${currentVersion}, recommended is ${recommendedVersion}`;
186
+ event.api_version_warning = currentVersion !== minimumSupported ? 'Below minimum' : null;
187
+ });
188
+ }
189
+
190
+ // Verificar se versão é depreciada
191
+ if (platformConfig.versions.pixel?.deprecated?.includes(currentVersion)) {
192
+ events.forEach(event => {
193
+ event.api_deprecated = true;
194
+ event.api_cutoff_date = platformConfig.versions.pixel?.deprecated_cutoff?.[currentVersion] || 'unknown';
195
+ });
196
+ }
197
+ }
198
+ }
199
+ ```
200
+
201
+ ### 1.5 Validação Cruzada Completa (runFullValidation)
202
+
203
+ ```typescript
204
+ /**
205
+ * Ponto de entrada principal — executa TODAS as validações em sequência
206
+ * e retorna um relatório consolidado com status PASS | WARN | BLOCK
207
+ *
208
+ * @param {Object} pageAnalysis - Output do Page Analyzer Agent
209
+ * @param {Object} agentOutputs - Código gerado por todos os agentes
210
+ * @param {Object} apiVersions - Conteúdo de contracts/api-versions.json
211
+ * @returns {Object} Relatório consolidado de validação
212
+ */
213
+ async function runFullValidation(pageAnalysis, agentOutputs, apiVersions) {
214
+ const report = {
215
+ status: 'PASS', // PASS | WARN | BLOCK
216
+ timestamp: new Date().toISOString(),
217
+ checks: {}
218
+ };
219
+
220
+ // CHECK 1: Cobertura de eventos
221
+ const coverage = validateEventCoverage(pageAnalysis, agentOutputs);
222
+ report.checks.event_coverage = coverage;
223
+ if (coverage.coverage_percentage < 100) {
224
+ report.status = coverage.coverage_percentage < 80 ? 'BLOCK' : 'WARN';
225
+ }
226
+
227
+ // CHECK 2: Parâmetros de conversão
228
+ const allEvents = Object.values(agentOutputs).flatMap(o => o.events || []);
229
+ const paramIssues = validateConversionParameters(allEvents, apiVersions);
230
+ report.checks.conversion_params = paramIssues;
231
+ if (paramIssues.filter(i => i.severity === 'HIGH').length > 0) {
232
+ report.status = 'BLOCK';
233
+ }
234
+
235
+ // CHECK 3: Seletores existentes no código
236
+ const missingSelectors = validateSelectorsExist({}, pageAnalysis);
237
+ report.checks.selectors = { missing: missingSelectors };
238
+ if (missingSelectors.length > 0) {
239
+ if (report.status === 'PASS') report.status = 'WARN';
240
+ }
241
+
242
+ // CHECK 4: Versões de API consistentes com api-versions.json
243
+ const trackingPlan = { events: {} };
244
+ Object.entries(agentOutputs).forEach(([agent, output]) => {
245
+ if (output.events) trackingPlan.events[agent] = output.events;
246
+ });
247
+ await validateApiVersions(trackingPlan);
248
+ const apiIssues = Object.values(trackingPlan.events)
249
+ .flatMap(events => events.filter(e => e.api_version_issue || e.api_deprecated));
250
+ report.checks.api_versions = apiIssues;
251
+ if (apiIssues.some(e => e.api_deprecated)) {
252
+ report.status = 'BLOCK'; // API depreciada = bloquear deploy
253
+ }
254
+
255
+ // CHECK 5: Regras de ouro — deduplicação event_id
256
+ const missingEventId = allEvents.filter(e => !e.event_id && !e.params?.event_id);
257
+ report.checks.deduplication = {
258
+ events_missing_event_id: missingEventId.map(e => `${e.platform}:${e.name}`)
259
+ };
260
+ if (missingEventId.length > 0) report.status = 'WARN';
261
+
262
+ // CHECK 6: SHA-256 em campos PII
263
+ const piiFields = ['em', 'ph', 'fn', 'ln'];
264
+ const unhashed = allEvents.filter(e =>
265
+ piiFields.some(field => e.user_data?.[field] && !e.user_data[field].match(/^[a-f0-9]{64}$/))
266
+ );
267
+ report.checks.pii_hashing = {
268
+ events_with_unhashed_pii: unhashed.map(e => `${e.platform}:${e.name}`)
269
+ };
270
+ if (unhashed.length > 0) {
271
+ report.status = 'BLOCK'; // PII sem hash = bloquear imediatamente
272
+ }
273
+
274
+ // Determinar mensagem de status
275
+ report.summary = {
276
+ PASS: '✅ Tracking Plan validado — pode fazer deploy',
277
+ WARN: '⚠️ Tracking Plan com alertas — revisar antes do deploy',
278
+ BLOCK: '❌ BLOQUEADO — corrigir itens críticos antes do deploy'
279
+ }[report.status];
280
+
281
+ return report;
282
+ }
283
+ ```
284
+
285
+ ---
286
+
287
+ ## PASSO 2 — GERAR O TRACKING PLAN COM VALIDAÇÃO
288
+
289
+ ### 2.1 Estrutura do Tracking Plan Validado
290
+
291
+ ```markdown
292
+ # Tracking Plan — {NOME_PROJETO}
293
+
294
+ **Data de implementação:** {DATA_IMPLEMENTACAO}
295
+ **Plataformas:** {LISTA_PLATAFORMAS}
296
+ **Infraestrutura:** {INFRAESTRUTURA}
297
+ **Responsável:** CDP Edge v{VERSAO}
298
+ **Status da Validação:** ✅ VALIDADO
299
+
300
+ ---
301
+
302
+ ## Tabela de Eventos (uma linha por evento × plataforma)
303
+
304
+ | Evento | Trigger | Página | Meta | GA4 | TikTok | Google Ads | Prioridade | Status |
305
+ |--------|--------|------|------|------|-----------|-----------|-----------|
306
+ | Lead | Submit #form-hero | /index.html | `fbq('track','Lead')` | `generate_lead` | `SubmitForm` | — | 🔴 Crítico | ✅ Implementado |
307
+ | InitiateCheckout | Click `a[href*='hotmart']` | /index.html | `InitiateCheckout` | — | `InitiateCheckout` | — | 🔴 Crítico | ⚠️ Verificar |
308
+ | Purchase | Webhook Hotmart | server-side | CAPI v22.0 | MP | Events API | Conversion | 🔴 Crítico | ✅ Implementado |
309
+ | ScrollDepth 50% | Scroll ≥ 50% | todas | CustomEvent | `scroll_depth` | — | — | 🟢 Recomendado | ✅ Implementado |
310
+
311
+ ---
312
+
313
+ ## Parâmetros Críticos por Evento de Conversão
314
+
315
+ ### Lead
316
+
317
+ - **Meta CAPI v22.0:**
318
+ - content_name: "Lead Formulário Principal"
319
+ - value: 0
320
+ - currency: "BRL"
321
+ - user_data: email (SHA256), phone (SHA256), fn, ln, ct, st, zp
322
+ - deduplicação: event_id = cdp_{timestamp}_{random}
323
+ - server-side: Meta CAPI v22.0
324
+ - ✅ Parâmetros completos
325
+
326
+ - **GA4 MP:**
327
+ - client_id: Recuperado do D1 (cookie _ga)
328
+ - events: [{ name: 'generate_lead', params: { value: 0, currency: 'BRL' }}]
329
+ - ✅ Parâmetros completos
330
+
331
+ - **TikTok Events API v1.3:**
332
+ - content_name: "Lead Formulário Principal"
333
+ - value: 0
334
+ - currency: "BRL"
335
+ - context.user: email (SHA256), phone_number (SHA256)
336
+ - deduplicação: event_id = cdp_{timestamp}_{random}
337
+ - server-side: TikTok Events API v1.3
338
+ - ✅ Parâmetros completos
339
+
340
+ ### Purchase
341
+
342
+ - **Meta CAPI v22.0:**
343
+ - content_name: "Produto Hotmart"
344
+ - value: {normalizado}
345
+ - currency: "BRL"
346
+ - content_ids: ["{id_produto}"]
347
+ - transaction_id: {id_transacao_hotmart}
348
+ - user_data: email (SHA256), phone (SHA256), fbp, fbc, geo
349
+ - deduplicação: event_id = cdp_{timestamp}_{random}
350
+ - server-side: Meta CAPI v22.0
351
+ - ✅ Parâmetros completos
352
+
353
+ - **GA4 MP:**
354
+ - client_id: Recuperado do D1
355
+ - events: [{ name: 'purchase', params: { value: {normalizado}, currency: 'BRL', transaction_id: {id_transacao} }}]
356
+ - ✅ Parâmetros completos
357
+
358
+ - **TikTok Events API v1.3:**
359
+ - content_name: "Produto Hotmart"
360
+ - value: {normalizado}
361
+ - currency: "BRL"
362
+ - item_count: 1
363
+ - transaction_id: {id_transacao_hotmart}
364
+ - user_data: mesclado de D1 (email, phone)
365
+ - deduplicação: event_id = cdp_{timestamp}_{random}
366
+ - server-side: TikTok Events API v1.3
367
+ - ✅ Parâmetros completos
368
+
369
+ ---
370
+
371
+ ## Cobertura de Dados (EMQ Checklist)
372
+
373
+ | Campo | Fonte | Status | Observações |
374
+ |-------|-------|--------|---------|
375
+ | email | Formulários | ✅ SHA256 em todas as plataformas | Usar D1 para match persistente |
376
+ | phone | Formulários | ✅ SHA256 em todas as plataformas | Usar D1 para match persistente |
377
+ | fbp | Cookie `_fbp` | ✅ Capturado e persistido no D1 | Cross-device attribution |
378
+ | fbc | Cookie `_fbc` / URL fbclid | ✅ Capturado e persistido no D1 | Atribuição de última interação |
379
+ | ga_client_id | Cookie `_ga` | ✅ Capturado e persistido no D1 | GA4 attribution |
380
+ | ttclid | Cookie `_ttp` | ✅ Capturado e persistido no D1 | TikTok attribution |
381
+ | country | Cloudflare CF | ✅ Automático via request.cf.country |
382
+ | city | ipinfo.io fallback | ⚠️ Fallback (usar quando CF não disponível) |
383
+ | utm_source | URL _cdp_attr cookie | ✅ Persistido no D1 | Atribuição correta |
384
+ | utm_medium | URL _cdp_attr cookie | ✅ Persistido no D1 | Atribuição correta |
385
+ | utm_campaign | URL _cdp_attr cookie | ✅ Persistido no D1 | Atribuição correta |
386
+
387
+ ---
388
+
389
+ ## Relatório de Validação
390
+
391
+ ### ✅ Aprovados
392
+ - Cobertura de eventos: {COBERTAGEM_PORCENTAGEM}%
393
+ - Parâmetros de conversão: 100% completos
394
+ - Seletores implementados: {SELETORES_VERIFICADOS}
395
+ - Versões de API: Consistentes com api-versions.json
396
+
397
+ ### ⚠️ Alertas
398
+ - [ ] Eventos faltantes: {LISTA_EVENTOS_FALTANTES}
399
+ - [ ] Inconsistências de parâmetros: {LISTA_INCONSISTENCIAS}
400
+
401
+ ### ❌ Bloqueadores
402
+ - [ ] Eventos críticos não implementados: {LISTA_BLOQUEADORES}
403
+ - [ ] API desatualizada detectada: {LISTA_APIS_DESATUALIZADAS}
404
+
405
+ ---
406
+
407
+ ## Configurações de Infraestrutura
408
+
409
+ ### Cloudflare Worker
410
+ - URL: https://{WORKER}.workers.dev
411
+ - Banco D1: {DATABASE_NAME}
412
+ - Feature Flags: meta_enabled, ga4_enabled, tiktok_enabled
413
+ - Cron Triggers: weekly-intelligence, monthly-privacy-audit
414
+
415
+ ### Secrets Configurados
416
+ - META_ACCESS_TOKEN: ✅ Set
417
+ - GA4_API_SECRET: ✅ Set
418
+ - TIKTOK_ACCESS_TOKEN: {status}
419
+
420
+ ---
421
+
422
+ ## Próximos Passos e Verificações
423
+
424
+ ### 1. Teste de Eventos
425
+ - [ ] Enviar formulário de teste: {VERIFICAR_FORMULARIO_TESTE}
426
+ - [ ] Verificar eventos no GA4 DebugView: {VERIFICAR_GA4_DEBUGVIEW}
427
+ - [ ] Verificar eventos no Meta Events Manager: {VERIFICAR_META_EVENTS_MANAGER}
428
+ - [ ] Testar webhook de compra: {SIMULAR_WEBHOOK_COMPRA}
429
+
430
+ ### 2. Verificação de Cross-Domain
431
+ - [ ] Verificar cookies persistidos em cliques externos: {VERIFICAR_CROSS_DOMAIN_COOKIES}
432
+ - [ ] Verificar atribuição de UTM via D1: {VERIFICAR_ATRIBUCAO_UTM}
433
+
434
+ ### 3. Monitoramento
435
+ - [ ] Verificar /monitor endpoint: {VERIFICAR_MONITORAMENTO_WORKER}
436
+ - [ ] Analisar logs de erro: {ANALISAR_LOGS_ERRO}
437
+
438
+ ---
439
+
440
+ ## NOTAS DE IMPLEMENTAÇÃO
441
+
442
+ **Desenvolvedor:** Verificar manualmente todos os seletores listados nesta tabela antes de dar deploy em produção.
443
+
444
+ **Data da Validação:** {DATA_VALIDACAO}
445
+
446
+ **Próxima Validação:** Recomendado revalidar 7 dias após deploy inicial para garantir que eventos continuem funcionando.
447
+
448
+ ---
449
+
450
+ > 📋 **Sua Função:** O tracking plan serve como documentação viva e verificável da implementação, eliminando eventos fantasmas e inconsistências que causariam falhas no rastreamento.
451
+ ```
452
+
453
+ ---
454
+
455
+ ## 🎯 FORMATO DE SAÍDA
456
+
457
+ Retornar o tracking plan completo em formato Markdown (`.md`).
458
+
459
+ O Master Orchestrator deve salvar em `tracking-plan.md` na pasta do projeto (ou apresentar ao usuário como bloco de código).