
> nextshm@0.1.0 dev
> next dev

▲ Next.js 16.3.0 (Turbopack)
- Local:         http://localhost:3000
- Network:       http://192.168.1.18:3000
- Environments: .env
✓ Ready in 995ms
✓ Running next.config.ts took 92ms
Creating turbopack project { dir: 'C:\\Users\\Marouane\\Desktop\\shm\\nextshm', testMode: true }

 GET /login 200 in 2.4s (next.js: 2.2s, application-code: 243ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET /login 200 in 71ms (next.js: 8ms, application-code: 62ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (72098 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (125540 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (199932 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns 200 OK (207304 ms) {
  response: {
    success: true,
    client_id: 10,
    counts: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      total_active_campaigns: 22
    },
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      status_filter: 'ACTIVE',
      count: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      status_filter: 'ENABLED',
      count: 14,
      campaigns: [Array]
    }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle 200 OK (216442 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca'
    },
    conversion_sources: {
      meta: 'Registration Completed',
      google: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign'
    },
    mapping: {
      meta_ads: 'Registration Completed',
      google_ads: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign',
      spend_currency: 'MAD',
      cost_per_onboarding_success: 'spend_mad / onboarding_success',
      appsflyer_cost_per_onboarding_success: 'spend_mad / appsflyer_onboarding_success_active_users'
    },
    campaign_completeness: {
      includes_positive_spend_zero_success: true,
      meta_campaigns_with_spend: 8,
      google_campaigns_with_spend: 14,
      returned_campaigns: 22
    },
    total: {
      meta_onboarding_success: 225,
      google_onboarding_success: 74,
      total_onboarding_success: 299,
      meta_spend: 180201.12,
      google_spend: 237006.6,
      total_spend: 417207.72,
      meta_cost_per_onboarding_success: 800.89,
      google_cost_per_onboarding_success: 3202.79,
      cost_per_onboarding_success: 1395.34,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object]
    ],
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      original_currency: 'EUR',
      metric: 'Registration Completed',
      onboarding_success: 225,
      spend_original: 16381.92,
      spend_mad: 180201.12,
      cost_per_onboarding_success: 800.89,
      currency: 'MAD',
      count_campaigns: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      original_currency: 'EUR',
      metric: 'onboarding_success',
      onboarding_success: 74,
      spend_original: 21546.06,
      spend_mad: 237006.6,
      cost_per_onboarding_success: 3202.79,
      currency: 'MAD',
      count_campaigns: 14,
      campaigns: [Array]
    },
    fx_used: {
      meta_original_currency: 'EUR',
      google_original_currency: 'EUR',
      EUR_TO_MAD: 11,
      USD_TO_MAD: 11
    }
  }
}
 GET / 200 in 3.6min (next.js: 95ms, application-code: 3.6min)
✓ Compiled in 82ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (24 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (27 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (29 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 601ms (next.js: 15ms, application-code: 586ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (494 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (761 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (971 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
 GET / 200 in 1233ms (next.js: 19ms, application-code: 1214ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
✓ Compiled in 66ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (24 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (28 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (29 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 664ms (next.js: 19ms, application-code: 644ms)
✓ Compiled in 140ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (930 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (933 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (1081 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle 200 OK (12578 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca'
    },
    conversion_sources: {
      meta: 'Registration Completed',
      google: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign'
    },
    mapping: {
      meta_ads: 'Registration Completed',
      google_ads: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign',
      spend_currency: 'MAD',
      cost_per_onboarding_success: 'spend_mad / onboarding_success',
      appsflyer_cost_per_onboarding_success: 'spend_mad / appsflyer_onboarding_success_active_users'
    },
    campaign_completeness: {
      includes_positive_spend_zero_success: true,
      meta_campaigns_with_spend: 8,
      google_campaigns_with_spend: 14,
      returned_campaigns: 22
    },
    total: {
      meta_onboarding_success: 225,
      google_onboarding_success: 74,
      total_onboarding_success: 299,
      meta_spend: 180202.55,
      google_spend: 237003.22,
      total_spend: 417205.77,
      meta_cost_per_onboarding_success: 800.9,
      google_cost_per_onboarding_success: 3202.75,
      cost_per_onboarding_success: 1395.34,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object]
    ],
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      original_currency: 'EUR',
      metric: 'Registration Completed',
      onboarding_success: 225,
      spend_original: 16382.05,
      spend_mad: 180202.55,
      cost_per_onboarding_success: 800.9,
      currency: 'MAD',
      count_campaigns: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      original_currency: 'EUR',
      metric: 'onboarding_success',
      onboarding_success: 74,
      spend_original: 21545.76,
      spend_mad: 237003.22,
      cost_per_onboarding_success: 3202.75,
      currency: 'MAD',
      count_campaigns: 14,
      campaigns: [Array]
    },
    fx_used: {
      meta_original_currency: 'EUR',
      google_original_currency: 'EUR',
      EUR_TO_MAD: 11,
      USD_TO_MAD: 11
    }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns 200 OK (18666 ms) {
  response: {
    success: true,
    client_id: 10,
    counts: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      total_active_campaigns: 22
    },
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      status_filter: 'ACTIVE',
      count: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      status_filter: 'ENABLED',
      count: 14,
      campaigns: [Array]
    }
  }
}
 GET / 200 in 19.0s (next.js: 9ms, application-code: 19.0s)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (34 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (44 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (54 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1067ms (next.js: 35ms, application-code: 1033ms)
✓ Compiled in 79ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (45 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (49 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (54 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 995ms (next.js: 26ms, application-code: 968ms)
✓ Compiled in 185ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
✓ Compiled in 91ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (27 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (33 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (37 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 862ms (next.js: 19ms, application-code: 842ms)
✓ Compiled in 237ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (878 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (886 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (1067 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle 200 OK (11739 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca'
    },
    conversion_sources: {
      meta: 'Registration Completed',
      google: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign'
    },
    mapping: {
      meta_ads: 'Registration Completed',
      google_ads: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign',
      spend_currency: 'MAD',
      cost_per_onboarding_success: 'spend_mad / onboarding_success',
      appsflyer_cost_per_onboarding_success: 'spend_mad / appsflyer_onboarding_success_active_users'
    },
    campaign_completeness: {
      includes_positive_spend_zero_success: true,
      meta_campaigns_with_spend: 8,
      google_campaigns_with_spend: 14,
      returned_campaigns: 22
    },
    total: {
      meta_onboarding_success: 225,
      google_onboarding_success: 74,
      total_onboarding_success: 299,
      meta_spend: 180203.98,
      google_spend: 237000.53,
      total_spend: 417204.51,
      meta_cost_per_onboarding_success: 800.91,
      google_cost_per_onboarding_success: 3202.71,
      cost_per_onboarding_success: 1395.33,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object]
    ],
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      original_currency: 'EUR',
      metric: 'Registration Completed',
      onboarding_success: 225,
      spend_original: 16382.18,
      spend_mad: 180203.98,
      cost_per_onboarding_success: 800.91,
      currency: 'MAD',
      count_campaigns: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      original_currency: 'EUR',
      metric: 'onboarding_success',
      onboarding_success: 74,
      spend_original: 21545.5,
      spend_mad: 237000.53,
      cost_per_onboarding_success: 3202.71,
      currency: 'MAD',
      count_campaigns: 14,
      campaigns: [Array]
    },
    fx_used: {
      meta_original_currency: 'EUR',
      google_original_currency: 'EUR',
      EUR_TO_MAD: 11,
      USD_TO_MAD: 11
    }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns 200 OK (18684 ms) {
  response: {
    success: true,
    client_id: 10,
    counts: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      total_active_campaigns: 22
    },
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      status_filter: 'ACTIVE',
      count: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      status_filter: 'ENABLED',
      count: 14,
      campaigns: [Array]
    }
  }
}
 GET / 200 in 19.0s (next.js: 9ms, application-code: 19.0s)
✓ Compiled in 87ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (29 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (29 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (26 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 774ms (next.js: 35ms, application-code: 739ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
✓ Compiled in 89ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (37 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (44 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (48 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1022ms (next.js: 24ms, application-code: 998ms)
✓ Compiled in 128ms
✓ Compiled in 114ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (41 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (48 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (53 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 934ms (next.js: 24ms, application-code: 910ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (29 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (31 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (33 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 726ms (next.js: 20ms, application-code: 706ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (57 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (60 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (60 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200 OK (43034 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
 GET / 200 in 44s (next.js: 27ms, application-code: 44s)
✓ Compiled in 253ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (31 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (34 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (38 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (56 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1351ms (next.js: 15ms, application-code: 1336ms)
✓ Compiled in 311ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
✓ Compiled in 59ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (20 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (24 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (32 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (135 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1077ms (next.js: 16ms, application-code: 1061ms)
✓ Compiled in 70ms
✓ Compiled in 58ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (15 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (19 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (22 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (34 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 721ms (next.js: 9ms, application-code: 712ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (27 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (31 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (33 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (47 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 782ms (next.js: 6ms, application-code: 776ms)
✓ Compiled in 94ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (25 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (30 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (33 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (52 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1068ms (next.js: 16ms, application-code: 1052ms)
✓ Compiled in 70ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (36 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (39 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (56 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (110 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 824ms (next.js: 16ms, application-code: 808ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (43 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (48 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (62 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (225 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1462ms (next.js: 22ms, application-code: 1440ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (42 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (49 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (87 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (234 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200 OK (4955 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
 GET / 200 in 5.6s (next.js: 26ms, application-code: 5.5s)
✓ Compiled in 90ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (32 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.75,
      total_spend: 417207.21,
      meta_impressions: 84059374,
      google_impressions: 14796204,
      total_paid_impressions: 98855578,
      meta_clicks: 657116,
      google_clicks: 455274,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 4,
      appsflyer_cached_reports_count: 0,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 34,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 86.56
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (40 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 180200.46,
      google_spend: 237006.65,
      total_spend: 417207.11,
      meta_impressions: 84059374,
      google_impressions: 14796187,
      total_paid_impressions: 98855561,
      meta_clicks: 657116,
      google_clicks: 455273,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 32,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 53.218
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (45 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_spend: 2092571.69,
      google_spend: 2564281.78,
      total_spend: 4656853.47,
      meta_impressions: 1096073163,
      google_impressions: 184276887,
      total_paid_impressions: 1280350050,
      meta_clicks: 7106783,
      google_clicks: 8411972,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v5',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 1,
      appsflyer_cached_reports_count: 5,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 73.915
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (57 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (149 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 961ms (next.js: 14ms, application-code: 948ms)
✓ Compiled in 254ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 5.4s (next.js: 9ms, application-code: 5.4s)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (21269 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (43857 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (96596 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200 OK (141482 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200 OK (145921 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns 200 OK (155065 ms) {
  response: {
    success: true,
    client_id: 10,
    counts: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      total_active_campaigns: 22
    },
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      status_filter: 'ACTIVE',
      count: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      status_filter: 'ENABLED',
      count: 14,
      campaigns: [Array]
    }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle 200 OK (166293 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca'
    },
    conversion_sources: {
      meta: 'Registration Completed',
      google: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign'
    },
    mapping: {
      meta_ads: 'Registration Completed',
      google_ads: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign',
      spend_currency: 'MAD',
      cost_per_onboarding_success: 'spend_mad / onboarding_success',
      appsflyer_cost_per_onboarding_success: 'spend_mad / appsflyer_onboarding_success_active_users'
    },
    campaign_completeness: {
      includes_positive_spend_zero_success: true,
      meta_campaigns_with_spend: 8,
      google_campaigns_with_spend: 14,
      returned_campaigns: 22
    },
    total: {
      meta_onboarding_success: 225,
      google_onboarding_success: 74,
      total_onboarding_success: 299,
      meta_spend: 180210.58,
      google_spend: 236967.02,
      total_spend: 417177.6,
      meta_cost_per_onboarding_success: 800.94,
      google_cost_per_onboarding_success: 3202.26,
      cost_per_onboarding_success: 1395.24,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object]
    ],
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      original_currency: 'EUR',
      metric: 'Registration Completed',
      onboarding_success: 225,
      spend_original: 16382.78,
      spend_mad: 180210.58,
      cost_per_onboarding_success: 800.94,
      currency: 'MAD',
      count_campaigns: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      original_currency: 'EUR',
      metric: 'onboarding_success',
      onboarding_success: 74,
      spend_original: 21542.47,
      spend_mad: 236967.02,
      cost_per_onboarding_success: 3202.26,
      currency: 'MAD',
      count_campaigns: 14,
      campaigns: [Array]
    },
    fx_used: {
      meta_original_currency: 'EUR',
      google_original_currency: 'EUR',
      EUR_TO_MAD: 11,
      USD_TO_MAD: 11
    }
  }
}
✓ Compiled in 91ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (34 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (41 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (43 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (58 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (129 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1399ms (next.js: 41ms, application-code: 1359ms)
✓ Compiled in 91ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (61 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (74 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (99 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (196 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (199 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1388ms (next.js: 15ms, application-code: 1373ms)
✓ Compiled in 354ms
✓ Compiled in 142ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
✓ Compiled in 240ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (60 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (67 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (73 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (72 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (101 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1469ms (next.js: 20ms, application-code: 1449ms)
✓ Compiled in 139ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
✓ Compiled in 80ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (42 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (48 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (57 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (76 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (127 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1192ms (next.js: 16ms, application-code: 1176ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
✓ Compiled in 98ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (26 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (30 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (36 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (49 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (165 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 989ms (next.js: 14ms, application-code: 975ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
✓ Compiled in 197ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (29 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (33 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (38 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (49 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (113 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 915ms (next.js: 15ms, application-code: 900ms)
✓ Compiled in 208ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
✓ Compiled in 73ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (37 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (45 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (44 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (51 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (65 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1250ms (next.js: 13ms, application-code: 1237ms)
✓ Compiled in 133ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
✓ Compiled in 143ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (33 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (36 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (43 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (48 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (71 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1042ms (next.js: 18ms, application-code: 1024ms)
✓ Compiled in 139ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (24 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (28 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (33 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (50 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (113 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 884ms (next.js: 9ms, application-code: 875ms)
✓ Compiled in 174ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (63 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (82 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (107 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (300 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (317 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (43 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (49 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (65 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (150 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (164 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 2.9s (next.js: 176ms, application-code: 2.8s)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200 OK (15710 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: false,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
 GET / 200 in 16.2s (next.js: 28ms, application-code: 16.2s)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
✓ Compiled in 258ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (49 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (54 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (58 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (80 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (230 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: false,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (243 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1594ms (next.js: 12ms, application-code: 1582ms)
✓ Compiled in 606ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
✓ Compiled in 81ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (63 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (71 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (78 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (210 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (203 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (208 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: false,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1603ms (next.js: 12ms, application-code: 1591ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
✓ Compiled in 86ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (26 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (32 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (45 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (138 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (144 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (148 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: false,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 945ms (next.js: 12ms, application-code: 933ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
✓ Compiled in 71ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (30 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (31 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (35 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (43 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (160 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (166 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: false,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 967ms (next.js: 13ms, application-code: 954ms)
✓ Compiled in 154ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
✓ Compiled in 85ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (34 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (38 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (48 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (50 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (65 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (222 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: false,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1802ms (next.js: 22ms, application-code: 1780ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
✓ Compiled in 75ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (24 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (32 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (36 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (43 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (55 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (172 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: false,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1120ms (next.js: 14ms, application-code: 1107ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
✓ Compiled in 80ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (38 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (44 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (46 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (58 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: false,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (70 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (220 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: false,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1112ms (next.js: 16ms, application-code: 1096ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (813 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (1020 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (1234 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
 GET / 200 in 24.6s (next.js: 7ms, application-code: 24.6s)
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200 OK (57455 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200 OK (62315 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200 OK (62675 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getActiveCampaigns 200 OK (69904 ms) {
  response: {
    success: true,
    client_id: 10,
    counts: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      total_active_campaigns: 22
    },
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      status_filter: 'ACTIVE',
      count: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      status_filter: 'ENABLED',
      count: 14,
      campaigns: [Array]
    }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle 200 OK (80050 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca'
    },
    conversion_sources: {
      meta: 'Registration Completed',
      google: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign'
    },
    mapping: {
      meta_ads: 'Registration Completed',
      google_ads: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign',
      spend_currency: 'MAD',
      cost_per_onboarding_success: 'spend_mad / onboarding_success',
      appsflyer_cost_per_onboarding_success: 'spend_mad / appsflyer_onboarding_success_active_users'
    },
    campaign_completeness: {
      includes_positive_spend_zero_success: true,
      meta_campaigns_with_spend: 8,
      google_campaigns_with_spend: 14,
      returned_campaigns: 22
    },
    total: {
      meta_onboarding_success: 225,
      google_onboarding_success: 75,
      total_onboarding_success: 300,
      meta_spend: 180224.11,
      google_spend: 236869.15,
      total_spend: 417093.26,
      meta_cost_per_onboarding_success: 801,
      google_cost_per_onboarding_success: 3158.26,
      cost_per_onboarding_success: 1390.31,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object]
    ],
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      original_currency: 'EUR',
      metric: 'Registration Completed',
      onboarding_success: 225,
      spend_original: 16384.01,
      spend_mad: 180224.11,
      cost_per_onboarding_success: 801,
      currency: 'MAD',
      count_campaigns: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      original_currency: 'EUR',
      metric: 'onboarding_success',
      onboarding_success: 75,
      spend_original: 21533.56,
      spend_mad: 236869.15,
      cost_per_onboarding_success: 3158.26,
      currency: 'MAD',
      count_campaigns: 14,
      campaigns: [Array]
    },
    fx_used: {
      meta_original_currency: 'EUR',
      google_original_currency: 'EUR',
      EUR_TO_MAD: 11,
      USD_TO_MAD: 11
    }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
✓ Compiled in 101ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (35 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (42 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (45 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (61 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (124 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (124 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1293ms (next.js: 30ms, application-code: 1264ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (31 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (33 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (35 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (40 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (53 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 2242,
    days: [
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object],
      ... 2142 more items
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (172 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 2.0s (next.js: 62ms, application-code: 1958ms)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (1512 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (1838 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200 OK (8631 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (8941 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200 OK (14706 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 7,
    days: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200 OK (14894 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
 GET / 200 in 17.4s (next.js: 403ms, application-code: 17.0s)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (34 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (43 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (45 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (48 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 7,
    days: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (56 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (60 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
✓ Compiled in 112ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getOnboardingSuccessMetaGoogle 200 OK (7955 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca'
    },
    conversion_sources: {
      meta: 'Registration Completed',
      google: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign'
    },
    mapping: {
      meta_ads: 'Registration Completed',
      google_ads: 'onboarding_success',
      appsflyer: 'onboarding_success unique users attributed by campaign',
      spend_currency: 'MAD',
      cost_per_onboarding_success: 'spend_mad / onboarding_success',
      appsflyer_cost_per_onboarding_success: 'spend_mad / appsflyer_onboarding_success_active_users'
    },
    campaign_completeness: {
      includes_positive_spend_zero_success: true,
      meta_campaigns_with_spend: 8,
      google_campaigns_with_spend: 14,
      returned_campaigns: 22
    },
    total: {
      meta_onboarding_success: 225,
      google_onboarding_success: 76,
      total_onboarding_success: 301,
      meta_spend: 180248.2,
      google_spend: 236830.26,
      total_spend: 417078.46,
      meta_cost_per_onboarding_success: 801.1,
      google_cost_per_onboarding_success: 3116.19,
      cost_per_onboarding_success: 1385.64,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object]
    ],
    meta_ads: {
      account_id: 'act_1708683320497693',
      account_name: 'Saham Bank',
      original_currency: 'EUR',
      metric: 'Registration Completed',
      onboarding_success: 225,
      spend_original: 16386.2,
      spend_mad: 180248.2,
      cost_per_onboarding_success: 801.1,
      currency: 'MAD',
      count_campaigns: 8,
      campaigns: [Array]
    },
    google_ads: {
      manager_customer_id: '9393898970',
      customer_id: '2758763982',
      original_currency: 'EUR',
      metric: 'onboarding_success',
      onboarding_success: 76,
      spend_original: 21530.02,
      spend_mad: 236830.26,
      cost_per_onboarding_success: 3116.19,
      currency: 'MAD',
      count_campaigns: 14,
      campaigns: [Array]
    },
    fx_used: {
      meta_original_currency: 'EUR',
      google_original_currency: 'EUR',
      EUR_TO_MAD: 11,
      USD_TO_MAD: 11
    }
  }
}
 GET / 200 in 8.9s (next.js: 24ms, application-code: 8.9s)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (29 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (35 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (39 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (45 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 7,
    days: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (46 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (50 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 2.3s (next.js: 19ms, application-code: 2.3s)
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (647 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (737 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200 OK (3116 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 7,
    days: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (3333 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200 OK (3475 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200 OK (6135 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
 GET /? 200 in 7.3s (next.js: 8ms, application-code: 7.3s)
✓ Compiled in 158ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (49 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (50 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200  (50 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200  (57 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 7,
    days: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200  (65 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200  (72 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
 GET / 200 in 1713ms (next.js: 78ms, application-code: 1634ms)
✓ Compiled in 174ms
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-26',
    previous_until: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-09-03',
    until: '2026-09-09',
    previous_since: '2026-08-27',
    previous_until: '2026-09-02'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel {
  request: {
    client_id: 10,
    since: '2026-07-01',
    until: '2026-09-09',
    previous_since: '2026-07-01',
    previous_until: '2026-07-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents {
  request: {
    client_id: 10,
    start_date: '2026-09-03',
    end_date: '2026-09-09',
    previous_start_date: '2026-08-26',
    previous_end_date: '2026-09-01'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance {
  request: { client_id: 10, since: '2026-09-03', until: '2026-09-09' }
}
CRM funnel CSV diagnostic {
  columns: [
    'jour',
    'jour_selection',
    'canal_source',
    'device_id',
    'systeme',
    'prospect_category',
    'salary_range_label',
    'isCDC',
    'selected_offer_code',
    'selected_card_code',
    'selected_billing_frequency',
    'skipped_offer_card',
    'current_step',
    'journey_status',
    'a_mail',
    'a_telephone',
    'a_cin',
    'volume_prospects',
    'volume_selections',
    'volume_abandon',
    'volume_finalise',
    'volume_en_cours',
    'volume_escalade_crc',
    'taux_finalisation_pct'
  ],
  rowCount: 29575,
  uniqueIdField: 'device_id',
  statusValues: [
    'ABANDON_AMONT',
    'ABANDON_PARCOURS',
    'ABANDON_SIGNATURE',
    'EN_COURS',
    'ESCALATED_CRC',
    'FINALISE',
    'SIGNE_PROVISIONING'
  ],
  accountTypeValues: [ 'False', 'True' ],
  currentStepValues: [
    'POST_SIGN',
    'PRE_SUBSCRIPTION',
    'PRE_SUBSCRIPTION_AGENCE',
    'PRE_SUBSCRIPTION_TERMINE',
    'SUBSCRIPTION_DELIVERY',
    'SUBSCRIPTION_OFFER',
    'SUBSCRIPTION_SIGNATURE',
    'SUBSCRIPTION_SURVEY'
  ],
  dateColumns: [ 'jour', 'jour_selection' ],
  selectedDateColumn: 'jour',
  ignoredDateColumns: [ 'jour_selection' ],
  dateSemantics: {
    jour: 'seule colonne utilisée pour les tris, déduplications et regroupements mensuels CRM',
    jour_selection: 'colonne présente dans le CSV mais volontairement ignorée'
  },
  duplicatesCount: 1789
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (612 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 94,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 20.578
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (772 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 7,
      returned_days: 7,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-09-03',
      end_date: '2026-09-09',
      days_count: 7
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 180210.03,
      google_spend: 236968.17,
      total_spend: 417178.2,
      meta_impressions: 84065655,
      google_impressions: 14796054,
      total_paid_impressions: 98861709,
      meta_clicks: 657183,
      google_clicks: 455159,
      ctr_meta: 0.78,
      ctr_google: 3.08,
      appsflyer_installs_android: 35073,
      appsflyer_installs_ios: 3413,
      appsflyer_installs_total: 38486,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 21438,
      onboarding_start_active_users_android: 18402,
      onboarding_start_active_users_ios: 3036,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 219,
      onboarding_success_active_users_android: 106,
      onboarding_success_active_users_ios: 113,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 21438,
      comptes: 219,
      onboarding_conversion_rate: 1.02,
      cpi: 19.46,
      currency: 'MAD'
    },
    data: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 7,
      google_rows_count: 95,
      appsflyer_rows_count: 31906,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 4,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 1,
      appsflyer_unavailable_reports: [],
      appsflyer_warnings: [],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 70,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 22.277
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerDailyFunnel 200 OK (923 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-07-01',
      until: '2026-09-09',
      inclusive: true,
      timezone: 'Africa/Casablanca',
      expected_days: 71,
      returned_days: 71,
      missing_dates: [],
      duplicate_dates: [],
      start_date: '2026-07-01',
      end_date: '2026-09-09',
      days_count: 71
    },
    accounts: { meta_ads: [Object], google_ads: [Object], appsflyer: [Object] },
    filters: {
      meta_campaign_ids: [],
      google_campaign_ids: [],
      all_meta_campaigns: true,
      all_google_campaigns: true
    },
    metric: {
      spend: 'MAD',
      onboarding_start_active_users: 'unique appsflyer_id for onboarding_start',
      onboarding_success_active_users: 'unique appsflyer_id for onboarding_success',
      onboarding_start_active_users_android: 'unique Android users for onboarding_start',
      onboarding_start_active_users_ios: 'unique iOS users for onboarding_start',
      onboarding_start_active_users_unattributed_os: 'total starts - Android starts - iOS starts',
      onboarding_success_active_users_android: 'unique Android users for onboarding_success',
      onboarding_success_active_users_ios: 'unique iOS users for onboarding_success',
      onboarding_success_active_users_unattributed_os: 'total success - Android success - iOS success',
      appsflyer_installs_android: 'partners_by_date_report/v5 installs Android',
      appsflyer_installs_ios: 'partners_by_date_report/v5 installs iOS',
      appsflyer_installs_total: 'Android installs + iOS installs with current implementation',
      appsflyer_installs_unattributed_os: 'appsflyer_installs_total - android - ios',
      meta_impressions: 'impressions',
      google_impressions: 'metrics.impressions',
      meta_clicks: 'clicks',
      google_clicks: 'metrics.clicks',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    mapping: {
      installations: 'onboarding_start_active_users',
      comptes: 'onboarding_success_active_users',
      onboarding_conversion_rate: 'onboarding_success_active_users / onboarding_start_active_users × 100',
      cpi: 'total_spend / onboarding_start_active_users',
      ctr_meta: 'meta_clicks / meta_impressions × 100',
      ctr_google: 'google_clicks / google_impressions × 100'
    },
    total: {
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      active_campaigns_total: 22,
      meta_spend: 2092581.26,
      google_spend: 2564243.3,
      total_spend: 4656824.56,
      meta_impressions: 1096079444,
      google_impressions: 184276757,
      total_paid_impressions: 1280356201,
      meta_clicks: 7106850,
      google_clicks: 8411858,
      ctr_meta: 0.65,
      ctr_google: 4.56,
      appsflyer_installs_android: 0,
      appsflyer_installs_ios: 0,
      appsflyer_installs_total: 0,
      appsflyer_installs_unattributed_os: 0,
      onboarding_start_active_users: 53517,
      onboarding_start_active_users_android: 37118,
      onboarding_start_active_users_ios: 16399,
      onboarding_start_active_users_unattributed_os: 0,
      onboarding_success_active_users: 1260,
      onboarding_success_active_users_android: 419,
      onboarding_success_active_users_ios: 841,
      onboarding_success_active_users_unattributed_os: 0,
      installations: 53517,
      comptes: 1260,
      onboarding_conversion_rate: 2.35,
      cpi: 87.02,
      currency: 'MAD'
    },
    data: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object]
    ],
    debug: {
      endpoint_cache_version: 'v6',
      meta_rows_count: 68,
      google_rows_count: 951,
      appsflyer_rows_count: 90755,
      appsflyer_api_reports_count: 0,
      appsflyer_cached_reports_count: 6,
      appsflyer_skipped_rows_count: 0,
      appsflyer_missing_user_id_count: 0,
      appsflyer_report_mode: '31_day_chunks_streaming_cached_budgeted',
      appsflyer_chunks_count: 3,
      appsflyer_unavailable_reports: [Array],
      appsflyer_warnings: [Array],
      source_warnings: [Object],
      source_dates: [Object],
      appsflyer_installs_total_source: 'android_plus_ios',
      can_detect_unattributed_install_os: false,
      appsflyer_onboarding_total_source: 'android_plus_ios',
      can_detect_unattributed_onboarding_os: false,
      php_memory_peak_mb: 118,
      fx_used: [Object],
      endpoint_cache_hit: true,
      appsflyer_network_elapsed_seconds: 52.456
    },
    previous: { total: [Object] }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEventsdaily 200 OK (4250 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    total_days: 7,
    days: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ],
    note: 'Données par jour, par streamName, uniquement avec activeUsers. Chaque event contient active_users, previous_active_users et variation_percent. Aucun eventCount utilisé.'
  }
}
[API] POST http://127.0.0.1:8001/api/meta-ads-data/getAppsFlyerCampaignPerformance 200 OK (4460 ms) {
  response: {
    success: true,
    client_id: 10,
    period: {
      since: '2026-09-03',
      until: '2026-09-09',
      timezone: 'Africa/Casablanca'
    },
    summary: {
      active_campaigns: 22,
      meta_active_campaigns: 8,
      google_active_campaigns: 14,
      returned_campaigns: 10
    },
    total: {
      spend: 417120.84,
      impressions: 98868502,
      clicks: 1112151,
      ctr: 1.12,
      installs: 31519,
      cpi: 13.23,
      onboarding_start: 13719,
      cost_per_start: 30.4,
      onboarding_success: 110,
      cost_per_success: 3792.01,
      install_to_start_rate: 43.53,
      start_to_success_rate: 0.8,
      currency: 'MAD'
    },
    campaigns: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ],
    warnings: { meta: [], google: [], appsflyer: [] },
    debug: {
      endpoint_cache_hit: true,
      meta_campaigns: 8,
      google_campaigns: 14,
      appsflyer_reports_network: 2,
      appsflyer_reports_cached: 0,
      appsflyer_rows: 337,
      appsflyer_rows_with_campaign: 295,
      appsflyer_matched_rows: 208,
      appsflyer_unmatched_rows: 87,
      appsflyer_totals: [Object],
      appsflyer_unmatched_samples: [Array]
    }
  }
}
[API] POST http://127.0.0.1:8001/api/google-analytics/getAllTrackedEvents 200 OK (8400 ms) {
  response: {
    success: true,
    property_id: 240469523,
    period: { current: [Object], previous: [Object] },
    metric: 'activeUsers',
    total_events_tracked: 75,
    events: [
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object],
      [Object], [Object], [Object], [Object], [Object]
    ],
    events_by_stream: { ios: [Object], android: [Object] }
  }
}
 GET / 200 in 9.7s (next.js: 12ms, application-code: 9.7s)
 GET /api/aso/performance?app=Saham%20Bank&period=2026-08&comparison_period=2026-07&store=app_store&country=MA 404 in 1915ms (next.js: 1737ms, application-code: 177ms)
