Skip to content

dbt Model Registry

Purpose: Complete map of every dbt model in production. Claude Code uses this to avoid duplicate models, understand dependencies, and ensure new models follow established patterns.

Last Updated: 2026-06-11 Project location: apps/dbt/xo-medallion/

ADR 019 standardization complete (Phases 1–4): All models follow client/layer folder structure, use 3-character client prefix, and aggregates source from Gold facts only. See ADR 019.


How to Update This File

When you deploy a new dbt model, add it here. When you deprecate a model, mark it deprecated and record the date. This file is Claude's map of the transformation layer.


Model Summary

Client / Domain Silver Gold Facts Gold Dims Gold Aggs Gold Int Gold rpt_ Gold exp_ Gold feed_ Seeds
Warby Parker (WBP_DB) 16 17 0 18 1 14 17 1 0
Condé Nast (CND_DB) 11 8 0 3 0 2 0 0 0
J.Crew (JCR_DB) 3 6 0 8 0 3 0 0 0
Core / Shared (CORE_DB) 29 0 28 0 0 1 0 0 2
Total 59 31 28 29 1 20 17 1 2

Counts verified 2026-06-11 against apps/dbt/xo-medallion/models/, excluding disabled _pending/ models. Core Silver: 27 bi_roster_* + 2 PH HR roster models = 29. Core Gold: 28 dim_employee_* (incl. dim_employee_ph) + 1 rpt_master_roster. Core seeds: dim_client_metrics.csv, dim_metric_definitions.csv (in GOLD). WBP Gold: 17 facts + 18 aggs + 1 int + 14 rpt_ + 17 exp_ + 1 feed_. CND Silver: Maestro models (from MAESTRO_DB, no Bronze layer) + Gladly incremental (merge) + 2 Gladly rolling-window exports (Bronze merge, ADR 024). CND Gold: 8 facts + 3 aggs + 2 reports. AGG_CND_QA_DAILY / RPT_CND_QA_DAILY are in _pending/ (disabled) and excluded.

⚠️ Detail tables below are not yet reconciled (2026-06-11). The Model Summary above is verified against the current project and is authoritative. The per-model detail tables that follow (Silver and Gold per client) are stale in places — CND/JCR Gold and the WBP exp_/feed_ models in particular are under-listed. A full per-model rebuild is pending. Note: the ai_agents.csv seed referenced in older detail rows no longer exists; current seeds are the two dim_* CSVs above.


Silver Models

Warby Parker (WBP_DB.SILVER / WBP_DB_DEV.SILVER)

Model File Table Name Grain Source Bronze Table Status
warbyparker/silver/wbp_gladly_contact_timestamps.sql WBP_GLADLY_CONTACT_TIMESTAMPS One row per event (CONTACT_ID + EVENT_TYPE + TIMESTAMP) GLADLY_CONTACT_TIMESTAMPS ✅ Production
warbyparker/silver/wbp_gladly_conversation_timestamps.sql WBP_GLADLY_CONVERSATION_TIMESTAMPS One row per event (CONVERSATION_ID + EVENT_TYPE + TIMESTAMP) GLADLY_CONVERSATION_TIMESTAMPS ✅ Production
warbyparker/silver/wbp_gladly_work_sessions.sql WBP_GLADLY_WORK_SESSIONS One row per WORK_SESSION_ID GLADLY_WORK_SESSIONS ✅ Production
warbyparker/silver/wbp_gladly_agent_durations.sql WBP_GLADLY_AGENT_DURATIONS One row per agent status span GLADLY_AGENT_DURATIONS ✅ Production
warbyparker/silver/wbp_gsheet_csat.sql WBP_GSHEET_CSAT One row per survey response GSHEET_CSAT ✅ Production
warbyparker/silver/wbp_gsheet_qa.sql WBP_GSHEET_QA One row per QA evaluation GSHEET_QA ✅ Production
warbyparker/silver/wbp_gsheet_qa_partner.sql WBP_GSHEET_QA_PARTNER One row per QA evaluation GSHEET_QA_PARTNER ✅ Production
warbyparker/silver/wbp_aspect_conformance.sql WBP_ASPECT_CONFORMANCE One row per (EID × date) ASPECT_CONFORMANCE ✅ Production
warbyparker/silver/wbp_aws_csat.sql WBP_AWS_CSAT One row per (contact × question) AWS_CSAT ✅ Production

Silver Rules: - Gladly models: incremental (append), preserves permanent history - GSheets models: table (rebuilds from latest BATCH_ID each run) - No JOINs, no business filters, no aggregation (per ADR 019) - Deduplicates by RECORD_KEY - Type converts VARCHAR → proper types via TRY_TO_*


Gold Models — Warby Parker (WBP_DB.GOLD / WBP_DB_DEV.GOLD)

Facts (fct_)

Model File Table Name Grain Source Silver Enriched With Source Category
warbyparker/gold/fct_wbp_contacts.sql FCT_WBP_CONTACTS One row per CONTACT_ID WBP_GLADLY_CONTACT_TIMESTAMPS, WBP_GLADLY_WORK_SESSIONS BI_ROSTER_WARBYPARKER (IS_XO_AGENT flag + EID via ended agent) Case 3 (LEFT JOIN + IS_XO_AGENT flag; includes non-XO rows)
warbyparker/gold/fct_wbp_conversations.sql FCT_WBP_CONVERSATIONS One row per CONVERSATION_ID WBP_GLADLY_CONVERSATION_TIMESTAMPS, WBP_GLADLY_CONTACT_TIMESTAMPS BI_ROSTER_WARBYPARKER (EID via first-close agent) Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_csat.sql FCT_WBP_CSAT One row per survey response WBP_GSHEET_CSAT BI_ROSTER_WARBYPARKER (EID via OKTA_USER) Case 2 (in-source filter + LEFT JOIN)
warbyparker/gold/fct_wbp_aws_csat.sql FCT_WBP_AWS_CSAT One row per contact (INITIAL_CONTACT_ID) WBP_AWS_CSAT BI_ROSTER_WARBYPARKER (EID via ACCOUNT_EMAIL) Case 2 (in-source filter + LEFT JOIN)
warbyparker/gold/fct_wbp_qa_internal.sql FCT_WBP_QA_INTERNAL One row per QA evaluation WBP_GSHEET_QA BI_ROSTER_WARBYPARKER (EID) Case 1 (LEFT JOIN, EID can be NULL)
warbyparker/gold/fct_wbp_qa_partner.sql FCT_WBP_QA_PARTNER One row per QA evaluation WBP_GSHEET_QA_PARTNER BI_ROSTER_WARBYPARKER (EID) Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_work_sessions.sql FCT_WBP_WORK_SESSIONS One row per WORK_SESSION_ID WBP_GLADLY_WORK_SESSIONS BI_ROSTER_WARBYPARKER (EID) Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_agent_durations.sql FCT_WBP_AGENT_DURATIONS One row per agent status span WBP_GLADLY_AGENT_DURATIONS BI_ROSTER_WARBYPARKER (EID) Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_agent_channel_summary.sql FCT_WBP_AGENT_CHANNEL_SUMMARY One row per agent per day per channel WBP_GLADLY_AGENT_SUMMARY BI_ROSTER_WARBYPARKER (EID, join on EMAIL = ACCOUNT_EMAIL) Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_agent_summary_daily.sql FCT_WBP_AGENT_SUMMARY_DAILY One row per agent per day WBP_GLADLY_AGENT_SUMMARY BI_ROSTER_WARBYPARKER (EID, join on EMAIL = ACCOUNT_EMAIL) Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_conversation_topics.sql FCT_WBP_CONVERSATION_TOPICS One row per topic add event WBP_GLADLY_CONVERSATION_TIMESTAMPS BI_ROSTER_WARBYPARKER (EID) Case 3 (INNER JOIN)
warbyparker/gold/fct_wbp_aspect_conformance.sql FCT_WBP_ASPECT_CONFORMANCE One row per (EID × date) WBP_ASPECT_CONFORMANCE BI_ROSTER_WARBYPARKER (EID direct join) Case 1 (LEFT JOIN + WHERE r.EID IS NOT NULL)

Intermediates (int_)

Model File Table Name Purpose Used By Status
warbyparker/intermediate/int_wbp_contacts_hold.sql (ephemeral) Hold time calculation via LAG() over contact events fct_wbp_contacts ✅ Production

Aggregates (agg_)

Model File Table Name Grain Source Status
warbyparker/gold/agg_wbp_agent_contacts_daily.sql AGG_WBP_AGENT_CONTACTS_DAILY (date, eid, channel, direction, status, inbox) fct_wbp_contacts + fct_wbp_agent_durations ✅ Production
warbyparker/gold/agg_wbp_agent_performance_daily.sql AGG_WBP_AGENT_PERFORMANCE_DAILY (date, eid, channel) fct_wbp_contacts + fct_wbp_work_sessions ✅ Production
warbyparker/gold/agg_wbp_csat_daily.sql AGG_WBP_CSAT_DAILY (date, eid) fct_wbp_csat ✅ Production
warbyparker/gold/agg_wbp_qa_daily.sql AGG_WBP_QA_DAILY (date, eid, evaluation_type) fct_wbp_qa_internal + fct_wbp_qa_partner ✅ Production
warbyparker/gold/agg_wbp_qa_attributes_daily.sql AGG_WBP_QA_ATTRIBUTES_DAILY (date, attribute, eval_type, eid, agent, auditor, channel) fct_wbp_qa_internal + fct_wbp_qa_partner ✅ Production
warbyparker/gold/agg_wbp_agent_summary_channel_daily.sql AGG_WBP_AGENT_SUMMARY_CHANNEL_DAILY (date, eid, channel) fct_wbp_agent_channel_summary ✅ Production
warbyparker/gold/agg_wbp_agent_durations_daily.sql AGG_WBP_AGENT_DURATIONS_DAILY (date, eid) fct_wbp_agent_durations ✅ Production
warbyparker/gold/agg_wbp_handle_time_topic_daily.sql AGG_WBP_HANDLE_TIME_TOPIC_DAILY (date, eid, channel, topic_id) fct_wbp_contacts + fct_wbp_conversation_topics ✅ Production
warbyparker/gold/agg_wbp_fcr_topic_daily.sql AGG_WBP_FCR_TOPIC_DAILY (date, eid, channel, topic_id) fct_wbp_conversations + fct_wbp_conversation_topics + bi_roster_warbyparker ✅ Production
warbyparker/gold/agg_wbp_qa_topic_daily.sql AGG_WBP_QA_TOPIC_DAILY (date, eid, channel, evaluation_type, topic_id) fct_wbp_qa_internal + fct_wbp_qa_partner + fct_wbp_contacts + fct_wbp_conversation_topics ✅ Production
warbyparker/gold/agg_wbp_csat_topic_daily.sql AGG_WBP_CSAT_TOPIC_DAILY (date, eid, channel, topic_id) fct_wbp_csat + fct_wbp_conversations + fct_wbp_conversation_topics ✅ Production
warbyparker/gold/agg_wbp_csat_channel_daily.sql AGG_WBP_CSAT_CHANNEL_DAILY (date, eid, interaction_type) fct_wbp_csat ✅ Production
warbyparker/gold/agg_wbp_aws_csat_channel_daily.sql AGG_WBP_AWS_CSAT_CHANNEL_DAILY (date, eid, interaction_type) fct_wbp_aws_csat ✅ Production (#1406 — AWS IVR CSAT; additive with agg_wbp_csat_channel_daily)

All aggregates source from Gold facts only — no Silver, no Bronze, no direct roster JOINs (ADR 019 Phase 4). agg_wbp_agent_contacts_daily is consumed directly by Tableau — no dbt downstream refs. Attribution anchored on FULFILLED_AT (closing agent). agg_wbp_agent_durations_daily (issue #934) pivots the durations fact by TYPE_FIELD + CONTEXT. Provides total_active_time_sec, total_acw_time_sec (the #931 fix), and AWAY-context breakouts (Break, Lunch, Training, Meeting). Topic aggs (added 2026-05): fan-out grain — one row per topic per metric. CSAT uses a fuzzy join (customer_id + week + channel); QA uses URL parsing to resolve conversation ID. See ADR 022.

Reports (rpt_)

Model File View Name Source Status
warbyparker/gold/rpt_wbp_agent_performance.sql RPT_WBP_AGENT_PERFORMANCE agg_wbp_agent_performance_daily, agg_wbp_qa_daily, agg_wbp_csat_daily, fct_wbp_agent_durations ✅ Production
warbyparker/gold/rpt_wbp_email_daily.sql RPT_WBP_EMAIL_DAILY agg_wbp_agent_contacts_daily, agg_wbp_qa_daily, agg_wbp_csat_daily ✅ Production
warbyparker/gold/rpt_wbp_xoos_agent_performance.sql RPT_WBP_XOOS_AGENT_PERFORMANCE agg_wbp_agent_performance_daily, agg_wbp_qa_daily, agg_wbp_csat_daily ✅ Production
warbyparker/gold/rpt_wbp_agent_performance_channel.sql RPT_WBP_AGENT_PERFORMANCE_CHANNEL agg_wbp_agent_summary_channel_daily, agg_wbp_aws_agent_performance_channel_daily, agg_wbp_csat_channel_daily, agg_wbp_aws_csat_channel_daily, agg_wbp_qa_channel_daily, agg_wbp_fcr_channel_daily, agg_wbp_agent_durations_daily, bi_roster_warbyparker ✅ Production (extended 2026-04 with durations ACW for #931; #1406 adds additive AWS CSAT)
warbyparker/gold/rpt_wbp_agent_productivity_daily.sql RPT_WBP_AGENT_PRODUCTIVITY_DAILY agg_wbp_agent_durations_daily, agg_wbp_agent_summary_channel_daily, fct_wbp_aspect_conformance, bi_roster_warbyparker ✅ Production (issue #934 — all agents, no AI filter; EPH/MPH/CPH/ACW% at agent-day grain; conformance columns added 2026-05)
warbyparker/gold/rpt_wbp_account_performance_channel_daily.sql RPT_WBP_ACCOUNT_PERFORMANCE_CHANNEL_DAILY agg_wbp_agent_summary_channel_daily, agg_wbp_csat_channel_daily, agg_wbp_qa_channel_daily, agg_wbp_fcr_channel_daily ✅ Production (issue #934 — account-level, no agent dimension; AHT/SLA/ASA/CSAT/QA/FCR)
warbyparker/gold/rpt_wbp_metrics_topic_daily.sql RPT_WBP_METRICS_TOPIC_DAILY agg_wbp_handle_time_topic_daily, agg_wbp_qa_topic_daily, agg_wbp_csat_topic_daily, agg_wbp_fcr_topic_daily ✅ Production (replaces OPERATIONS.AGGREGATE.WARBYPARKER_METRICS_BY_TOPIC; see ADR 022)
warbyparker/gold/rpt_wbp_contact_volume.sql RPT_WBP_CONTACT_VOLUME fct_wbp_contacts ✅ Production (issue #1043 — inbound contact volume by vendor/ai_status/ai_wave; multi-date spine for queued/offered/fulfilled/ended; AI status = roster enrollment date)
warbyparker/gold/rpt_wbp_aws_contact_volume.sql RPT_WBP_AWS_CONTACT_VOLUME agg_wbp_aws_queue_productivity_interval, agg_wbp_gladly_contact_volume_daily, fct_wbp_forecast_volume ✅ Production (issue #1291 — unified AWS + Gladly historical contact volume; grain: date × channel × ai_status × data_source; Email=AI Enabled, Chat/Phone=Not Enabled; forecasted_volume joined for AI Enabled rows only)

Exploration (exp_)

AI pilot analysis views — no SLA. May change or be dropped without notice. Promote to rpt_ when logic stabilizes and a Tableau dashboard adopts it. See ADR 021.

Model File View Name Source Status
warbyparker/gold/exp_wbp_contact_volume_inbox.sql EXP_WBP_CONTACT_VOLUME_INBOX fct_wbp_contacts 🔬 Exploration (issue #1043 — contact volume variant; AI status = inbox-based IS_AI_QUEUE flag; same grain as rpt_wbp_contact_volume)
warbyparker/gold/exp_wbp_contact_volume_agent.sql EXP_WBP_CONTACT_VOLUME_AGENT agg_wbp_agent_summary_channel_daily, bi_roster_warbyparker 🔬 Exploration (issue #1043 — contact volume from agent summary; AI status = roster enrollment; XO only; queued=accepted; fulfilled_same_day=NULL)
warbyparker/gold/exp_wbp_agent_qa_trend.sql EXP_WBP_AGENT_QA_TREND fct_wbp_qa_internal, fct_wbp_qa_partner 🔬 Exploration
warbyparker/gold/exp_wbp_ai_agent_concurrency_daily.sql EXP_WBP_AI_AGENT_CONCURRENCY_DAILY agg_wbp_gladly_productivity_agent_daily, dim_employee_warbyparker 🔬 Exploration
warbyparker/gold/exp_wbp_ai_agents_durations_daily.sql EXP_WBP_AI_AGENTS_DURATIONS_DAILY fct_wbp_agent_durations, dim_employee_warbyparker 🔬 Exploration
warbyparker/gold/exp_wbp_ai_agent_qa_week_over_week.sql EXP_WBP_AI_AGENT_QA_WEEK_OVER_WEEK agg_wbp_qa_daily, dim_employee_warbyparker 🔬 Exploration
warbyparker/gold/exp_wbp_ai_agent_qa_month_over_month.sql EXP_WBP_AI_AGENT_QA_MONTH_OVER_MONTH agg_wbp_qa_daily, dim_employee_warbyparker 🔬 Exploration
warbyparker/gold/exp_wbp_ai_wave_qa_week_over_week.sql EXP_WBP_AI_WAVE_QA_WEEK_OVER_WEEK agg_wbp_qa_daily 🔬 Exploration
warbyparker/gold/exp_wbp_ai_wave_qa_month_over_month.sql EXP_WBP_AI_WAVE_QA_MONTH_OVER_MONTH agg_wbp_qa_daily 🔬 Exploration
warbyparker/gold/exp_wbp_ai_wave_qa_quarter_over_quarter.sql EXP_WBP_AI_WAVE_QA_QUARTER_OVER_QUARTER agg_wbp_qa_daily 🔬 Exploration
warbyparker/gold/exp_wbp_ai_vs_nonai_qa_wow.sql EXP_WBP_AI_VS_NONAI_QA_WOW agg_wbp_qa_daily 🔬 Exploration
warbyparker/gold/exp_wbp_ai_vs_nonai_qa_mom.sql EXP_WBP_AI_VS_NONAI_QA_MOM agg_wbp_qa_daily 🔬 Exploration
warbyparker/gold/exp_wbp_ai_vs_nonai_qa_qoq.sql EXP_WBP_AI_VS_NONAI_QA_QOQ agg_wbp_qa_daily 🔬 Exploration
warbyparker/gold/exp_wbp_ai_qa_attributes_week_over_week.sql EXP_WBP_AI_QA_ATTRIBUTES_WEEK_OVER_WEEK agg_wbp_qa_attributes_daily, dim_employee_warbyparker 🔬 Exploration
warbyparker/gold/exp_wbp_ai_qa_attributes_month_over_month.sql EXP_WBP_AI_QA_ATTRIBUTES_MONTH_OVER_MONTH agg_wbp_qa_attributes_daily, dim_employee_warbyparker 🔬 Exploration
warbyparker/gold/exp_wbp_gladly_blended_ai_productivity.sql EXP_WBP_GLADLY_BLENDED_AI_PRODUCTIVITY agg_wbp_gladly_productivity_agent_daily 🔬 Exploration
warbyparker/gold/exp_wbp_gladly_blended_ai_productivity_weekly.sql EXP_WBP_GLADLY_BLENDED_AI_PRODUCTIVITY_WEEKLY agg_wbp_gladly_productivity_agent_daily 🔬 Exploration
warbyparker/gold/exp_wbp_gladly_blended_ai_productivity_channel_daily.sql EXP_WBP_GLADLY_BLENDED_AI_PRODUCTIVITY_CHANNEL_DAILY agg_wbp_gladly_productivity_agent_daily 🔬 Exploration

Silver Models — Condé Nast (CND_DB.SILVER / CND_DB_DEV.SILVER)

Model File Table Name Grain Source Status
condenast/silver/cnd_maestro_answers.sql CND_MAESTRO_ANSWERS One row per ANSWER_ID MAESTRO_DB.PUBLIC.ANSWERS ✅ Production
condenast/silver/cnd_maestro_questions.sql CND_MAESTRO_QUESTIONS One row per TEMPLATE_ID + QUESTION_ID MAESTRO_DB.PUBLIC.QUESTIONS ✅ Production
condenast/silver/cnd_maestro_sections.sql CND_MAESTRO_SECTIONS One row per TEMPLATE_ID + SECTION_ID MAESTRO_DB.PUBLIC.SECTIONS ✅ Production
condenast/silver/cnd_maestro_templates.sql CND_MAESTRO_TEMPLATES One row per TEMPLATE_ID MAESTRO_DB.PUBLIC.TEMPLATES ✅ Production
condenast/silver/cnd_maestro_question_scores.sql CND_MAESTRO_QUESTION_SCORES One row per ANSWER_ID + QUESTION_ID MAESTRO_DB.PUBLIC.QUESTION_SCORES ✅ Production
condenast/silver/cnd_maestro_section_scores.sql CND_MAESTRO_SECTION_SCORES One row per ANSWER_ID + SECTION_ID MAESTRO_DB.PUBLIC.SECTION_SCORES ✅ Production
condenast/silver/cnd_maestro_helpdesk_id_email.sql CND_MAESTRO_HELPDESK_ID_EMAIL One row per HELPDESK + HELPDESK_ID MAESTRO_DB.PUBLIC.HELPDESK_ID_EMAIL ✅ Production

Gladly (CND_DB.BRONZE — incremental merge)

Model File Table Name Grain Source Bronze Table Status
condenast/silver/cnd_gladly_contact_timestamps.sql CND_GLADLY_CONTACT_TIMESTAMPS One row per event (CONTACT_ID + EVENT_TYPE + TIMESTAMP) GLADLY_CONTACT_TIMESTAMPS ✅ Production
condenast/silver/cnd_gladly_conversation_timestamps.sql CND_GLADLY_CONVERSATION_TIMESTAMPS One row per event (CONVERSATION_ID + composite key) GLADLY_CONVERSATION_TIMESTAMPS ✅ Production
condenast/silver/cnd_gladly_work_sessions.sql CND_GLADLY_WORK_SESSIONS One row per WORK_SESSION_ID GLADLY_WORK_SESSIONS ✅ Production
condenast/silver/cnd_gladly_agent_durations.sql CND_GLADLY_AGENT_DURATIONS One row per agent status span (composite key) GLADLY_AGENT_DURATIONS ✅ Production
condenast/silver/cnd_gladly_agent_summary.sql CND_GLADLY_AGENT_SUMMARY One row per AGENT_ID + day GLADLY_AGENT_SUMMARY ✅ Production
condenast/silver/cnd_gladly_fcr_by_agent.sql CND_GLADLY_FCR_BY_AGENT One row per agent + day GLADLY_FCR_BY_AGENT ✅ Production

Gladly Rolling-Window Exports (CND_DB.BRONZE — Bronze merge strategy, ADR 024)

Model File Table Name Grain Source Bronze Table Status
condenast/silver/cnd_gladly_contact_export.sql CND_GLADLY_CONTACT_EXPORT One row per CONTACT_ID (latest state) GLADLY_CONTACT_EXPORT ✅ Production
condenast/silver/cnd_gladly_conversation_export.sql CND_GLADLY_CONVERSATION_EXPORT One row per CONVERSATION_ID (latest state) GLADLY_CONVERSATION_EXPORT ✅ Production

Gold Models — Condé Nast (CND_DB.GOLD)

Facts (fct_)

Model File Table Name Grain Source Enriched With Source Category
condenast/gold/fct_cnd_qa.sql FCT_CND_QA One row per ANSWER_ID CND_MAESTRO_ANSWERS, CND_MAESTRO_TEMPLATES, CND_MAESTRO_HELPDESK_ID_EMAIL OPERATIONS.BAMBOOHR.ROSTER_CONDENAST (EID — pending migration to ref()) Case 1 (LEFT JOIN, EID can be NULL)

Note: fct_cnd_qa still uses source('operations_bamboohr', 'ROSTER_CONDENAST') — migration to ref('bi_roster_condenast') is pending (Phase 5+).

Aggregates (agg_)

Model File Table Name Grain Source Status
condenast/gold/agg_cnd_qa_daily.sql AGG_CND_QA_DAILY (evaluation_date, agent_name, direct_leader, channel) fct_cnd_qa ✅ Production

Reports (rpt_)

Model File View Name Source Status
condenast/gold/rpt_cnd_qa_daily.sql RPT_CND_QA_DAILY agg_cnd_qa_daily ✅ Production

Silver Models — J.Crew (JCR_DB.SILVER / JCR_DB_DEV.SILVER)

Model File Table Name Grain Source Bronze Table Status
jcrew/silver/jcr_gdrive_aaa.sql JCR_GDRIVE_AAA One row per ASSOCIATE × date GDRIVE_JCREW_AAA ✅ Production
jcrew/silver/jcr_gdrive_interactions.sql JCR_GDRIVE_INTERACTIONS One row per conversation GDRIVE_JCREW_INTERACTIONS 🟡 New (Gold pending spike)
jcrew/silver/jcr_gdrive_csat.sql JCR_GDRIVE_CSAT One row per CSAT record GDRIVE_JCREW_CSAT ✅ Production
jcrew/silver/jcr_gdrive_fcr.sql JCR_GDRIVE_FCR One row per agent × channel × contact reason × week GDRIVE_JCREW_FCR ✅ Production
jcrew/silver/jcr_gdrive_qa.sql JCR_GDRIVE_QA One row per conversation GDRIVE_JCREW_QA 🟡 New (Gold pending spike)
jcrew/silver/jcr_gdrive_agent_daily_aht.sql JCR_GDRIVE_AGENT_DAILY_AHT One row per agent × interval × media type GDRIVE_JCREW_AGENT_DAILY_AHT 🟡 New (Gold pending spike #1269)
jcrew/silver/jcr_gdrive_agent_status.sql JCR_GDRIVE_AGENT_STATUS One row per agent × interval (daily); no channel GDRIVE_JCREW_AGENT_STATUS 🟡 New (Gold deferred #1322)

All three models use incremental merge strategy (ADR 020). Source: Google Drive / Google Sheets exports loaded weekly by jcrew_gdrive_weekly DAG.


Gold Models — J.Crew (JCR_DB.GOLD)

Facts (fct_)

Model File Table Name Grain Source Enriched With Source Category
jcrew/gold/fct_jcr_aaa.sql FCT_JCR_AAA One row per agent × date JCR_GDRIVE_AAA bi_roster_jcrew (SAP primary, CUIC_NAME fallback) Category 1 (LEFT JOIN, EID can be NULL)
jcrew/gold/fct_jcr_csat.sql FCT_JCR_CSAT One row per CSAT record JCR_GDRIVE_CSAT bi_roster_jcrew (SAP) Category 1 (LEFT JOIN, EID can be NULL)
jcrew/gold/fct_jcr_fcr.sql FCT_JCR_FCR One row per agent × channel × contact reason × week JCR_GDRIVE_FCR bi_roster_jcrew (CUIC_NAME) Category 1 (LEFT JOIN, EID can be NULL)
jcrew/gold/fct_jcr_aht_ops.sql FCT_JCR_AHT_OPS One row per agent × interval × media_type JCR_GDRIVE_AGENT_DAILY_AHT bi_roster_jcrew_new (AGENT_ID → GENESYS_ID) Mixed — LEFT JOIN, non-XO retained (spike #1269) 🟡 New
jcrew/gold/fct_jcr_interactions.sql FCT_JCR_INTERACTIONS One row per conversation (last-agent-wins) JCR_GDRIVE_INTERACTIONS bi_roster_jcrew_new (last USERS_INTERACTED token → USER_NAME) Mixed — LEFT JOIN, BPO_GROUP = XtendOps / J.Crew Corporate, non-XO retained (#1275/#1347) 🟡 New
jcrew/gold/fct_jcr_qa.sql FCT_JCR_QA One row per conversation (latest scored evaluation; all-Retracted/Deleted dropped) JCR_GDRIVE_QA bi_roster_jcrew_new (TRIM(EVALUATED_AGENT) → USER_NAME) Mixed — LEFT JOIN, BPO_GROUP = XtendOps / J.Crew Corporate, non-XO retained (#1290/#1349) 🟡 New
jcrew/gold/fct_jcr_agent_daily_aht.sql FCT_JCR_AGENT_DAILY_AHT One row per AGENT_ID × interval × media_type JCR_GDRIVE_AGENT_DAILY_AHT bi_roster_jcrew_new (3-key COALESCE: AGENT_ID→GENESYS_ID, EMAIL→ACCOUNT_EMAIL, AGENT_NAME→USER_NAME) Mixed — non-XO retained; BPO_GROUP = XtendOps / J.Crew In-House / J.Crew Corporate (#1343) ✅ Production
jcrew/gold/fct_jcr_agent_status.sql FCT_JCR_AGENT_STATUS One row per AGENT_ID × interval (daily); no channel JCR_GDRIVE_AGENT_STATUS bi_roster_jcrew_new (3-key COALESCE: AGENT_ID→GENESYS_ID, EMAIL→ACCOUNT_EMAIL, AGENT_NAME→USER_NAME) Mixed — non-XO retained; BPO_GROUP = XtendOps / J.Crew Corporate (no site field, no In-House bucket) (#1322) 🟡 New

Aggregates (agg_)

Model File Table Name Grain Source Status
jcrew/gold/agg_jcr_aaa_daily.sql AGG_JCR_AAA_DAILY (date, EID, site, skill) fct_jcr_aaa ✅ Production
jcrew/gold/agg_jcr_csat_channel_daily.sql AGG_JCR_CSAT_CHANNEL_DAILY (date, EID, site, channel) fct_jcr_csat ✅ Production
jcrew/gold/agg_jcr_fcr_channel_weekly.sql AGG_JCR_FCR_CHANNEL_WEEKLY (week_date, EID, channel, site) fct_jcr_fcr ✅ Production
jcrew/gold/agg_jcr_aht_channel_daily_ops.sql AGG_JCR_AHT_CHANNEL_DAILY_OPS (date, agent_id, media_type) — XO + non-XO retained, keyed on agent_id fct_jcr_aht_ops 🟡 New
jcrew/gold/agg_jcr_interactions_channel_daily.sql AGG_JCR_INTERACTIONS_CHANNEL_DAILY (date, media_type, BPO_GROUP) — conversation volume + duration sums fct_jcr_interactions 🟡 New
jcrew/gold/agg_jcr_qa_channel_daily.sql AGG_JCR_QA_CHANNEL_DAILY (date, evaluated_agent, media_type) — score sums/counts, carries BPO_GROUP; XO + non-XO retained fct_jcr_qa 🟡 New
jcrew/gold/agg_jcr_agent_daily_aht.sql AGG_JCR_AGENT_DAILY_AHT (INTERVAL_DATE, AGENT_ID, MEDIA_TYPE) — HANDLE > 0; XO + non-XO retained, keyed on agent_id (#1343) fct_jcr_agent_daily_aht ✅ Production
jcrew/gold/agg_jcr_agent_status_daily.sql AGG_JCR_AGENT_STATUS_DAILY (INTERVAL_DATE, AGENT_ID) — LOGGED_IN > 0; XO + non-XO retained, keyed on agent_id (#1322) fct_jcr_agent_status 🟡 New
jcrew/gold/agg_jcr_agent_metrics_daily.sql AGG_JCR_AGENT_METRICS_DAILY (date, EID, site, channel, SOURCE) — compact wide; ~4 rows per agent × date (Phone, Email, Chat, ALL); CSAT survey cols merged onto Chat AAA row; FCR at weekly grain agg_jcr_aaa_daily, agg_jcr_csat_channel_daily, agg_jcr_fcr_channel_weekly ✅ Production

agg_jcr_agent_metrics_daily full column set:

Column Type Populated for
date DATE All rows
EID VARCHAR All rows
site VARCHAR All rows
channel VARCHAR All rows (Phone, Email, Chat, ALL for AAA; Chat, Email, Phone for FCR)
source VARCHAR All rows (AAA or FCR)
is_xo_agent BOOLEAN AAA rows; NULL for FCR
associate VARCHAR AAA rows; NULL for FCR
SAP VARCHAR AAA rows; NULL for FCR
supervisor VARCHAR AAA rows; NULL for FCR
skill VARCHAR AAA rows (collapsed via MAX); NULL for FCR
YEAR NUMBER AAA rows; NULL for FCR
SEASON VARCHAR AAA rows; NULL for FCR
QUARTER VARCHAR AAA rows; NULL for FCR
MONTH VARCHAR AAA rows; NULL for FCR
WKOF_MON VARCHAR AAA rows; NULL for FCR
ACTIVE BOOLEAN AAA rows; NULL for FCR
volume NUMBER AAA rows (interactions/handled_emails/nchat_completed/total); NULL for FCR
handle_time_total NUMBER Phone/Email/Chat AAA rows; NULL for ALL and FCR
qa_audits_total NUMBER Phone/Email/Chat AAA rows; NULL for ALL and FCR
qa_score_sum NUMBER Phone/Email/Chat AAA rows; NULL for ALL and FCR
log_time_secs NUMBER ALL AAA rows only
aux_secs NUMBER ALL AAA rows only
wrap_time_secs NUMBER ALL AAA rows only
ja_calls_made NUMBER ALL AAA rows only
ch_csat_score_sum NUMBER Chat AAA rows only
ch_csat_total NUMBER Chat AAA rows only
csat_rating_total NUMBER Chat AAA rows only (NULL when no CSAT match)
csat_survey_count NUMBER Chat AAA rows only
csat_bad_count NUMBER Chat AAA rows only
csat_neutral_count NUMBER Chat AAA rows only
csat_good_count NUMBER Chat AAA rows only
fcr_count NUMBER FCR rows only
fcr_eligible_contacts NUMBER FCR rows only

Reports (rpt_)

Model File View Name Grain Source Status
jcrew/gold/rpt_jcr_agent_performance.sql RPT_JCR_AGENT_PERFORMANCE (week_date, EID, channel, site) agg_jcr_csat_channel_daily, agg_jcr_fcr_channel_weekly ✅ Production
jcrew/gold/rpt_jcr_agent_metrics_daily.sql RPT_JCR_AGENT_METRICS_DAILY (date, EID, site, channel, SOURCE) agg_jcr_agent_metrics_daily, bi_roster_jcrew_new ✅ Production
jcrew/gold/rpt_jcr_aht_account_ops.sql RPT_JCR_AHT_ACCOUNT_OPS (date, media_type, agent_group=XO/Non-XO) — account AHT, XO vs non-XO agg_jcr_aht_channel_daily_ops 🟡 New
jcrew/gold/rpt_jcr_interactions_volume.sql RPT_JCR_INTERACTIONS_VOLUME (date, media_type, BPO_GROUP) — account conversation volume + AHT by BPO group agg_jcr_interactions_channel_daily 🟡 New
jcrew/gold/rpt_jcr_qa_agent_scorecard.sql RPT_JCR_QA_AGENT_SCORECARD (date, evaluated_agent, media_type) — per-agent QA avg score + critical, carries BPO_GROUP agg_jcr_qa_channel_daily 🟡 New
jcrew/gold/rpt_jcr_qa_account.sql RPT_JCR_QA_ACCOUNT (date, media_type, BPO_GROUP) — account QA by BPO group agg_jcr_qa_channel_daily 🟡 New
jcrew/gold/rpt_jcr_handle_time_daily.sql RPT_JCR_HANDLE_TIME_DAILY (INTERVAL_DATE, AGENT_ID, MEDIA_TYPE) — per-agent AHT/handle-time KPIs, all BPO groups; roster attrs join on EID (NULL for non-XO) (#1343) agg_jcr_agent_daily_aht, bi_roster_jcrew_new ✅ Production
jcrew/gold/rpt_jcr_agent_status_daily.sql RPT_JCR_AGENT_STATUS_DAILY (INTERVAL_DATE, AGENT_ID) — per-agent adherence/occupancy rates, all BPO groups; roster attrs join on EID (NULL for non-XO) (#1322) agg_jcr_agent_status_daily, bi_roster_jcrew_new 🟡 New
jcrew/gold/exp_jcr_interactions_join_coverage.sql EXP_JCR_INTERACTIONS_JOIN_COVERAGE account-wide (1 row) — explode vs direct USER_NAME join coverage comparison (spike #1275) jcr_gdrive_interactions, bi_roster_jcrew_new 🟡 New (exp)

Silver Models — Core / Shared (CORE_DB.SILVER)

All materialized as table, rebuilt each run from the latest BATCH_ID. One row per employee (current state). Tagged core_bi_roster.

PH HR Roster

Model File Table Name Grain Source Bronze Table Status
core/silver/ph_hr_roster_active.sql PH_HR_ROSTER_ACTIVE One row per EMPLOYEE_ID PH_HR_ROSTER_ACTIVE ✅ Production
core/silver/ph_hr_roster_inactive.sql PH_HR_ROSTER_INACTIVE One row per EMPLOYEE_ID PH_HR_ROSTER_INACTIVE ✅ Production

BI Rosters (Standard_Roster Google Sheet)

Model File Table Name Client Status
core/silver/bi_roster_warbyparker.sql BI_ROSTER_WARBYPARKER Warby Parker ✅ Production
core/silver/bi_roster_bi_team.sql BI_ROSTER_BI_TEAM BI Team ✅ Production
core/silver/bi_roster_staff_mx.sql BI_ROSTER_STAFF_MX Staff MX ✅ Production
core/silver/bi_roster_morganandmorgan.sql BI_ROSTER_MORGANANDMORGAN Morgan & Morgan ✅ Production
core/silver/bi_roster_quadlock.sql BI_ROSTER_QUADLOCK Quad Lock ✅ Production
core/silver/bi_roster_ionos.sql BI_ROSTER_IONOS IONOS ✅ Production
core/silver/bi_roster_flare.sql BI_ROSTER_FLARE Flare ✅ Production
core/silver/bi_roster_postman_law.sql BI_ROSTER_POSTMAN_LAW Postman Law ✅ Production
core/silver/bi_roster_rugiet.sql BI_ROSTER_RUGIET Rugiet ✅ Production
core/silver/bi_roster_jcrew.sql BI_ROSTER_JCREW J.Crew ✅ Production
core/silver/bi_roster_keller_postman.sql BI_ROSTER_KELLER_POSTMAN Keller Postman ✅ Production
core/silver/bi_roster_condenast.sql BI_ROSTER_CONDENAST Condé Nast ✅ Production
core/silver/bi_roster_within_health.sql BI_ROSTER_WITHIN_HEALTH Within Health ✅ Production
core/silver/bi_roster_western_dental.sql BI_ROSTER_WESTERN_DENTAL Western Dental ✅ Production
core/silver/bi_roster_match.sql BI_ROSTER_MATCH Match ✅ Production
core/silver/bi_roster_logitech.sql BI_ROSTER_LOGITECH Logitech ✅ Production
core/silver/bi_roster_drfirst.sql BI_ROSTER_DRFIRST DrFirst ✅ Production
core/silver/bi_roster_goodfood.sql BI_ROSTER_GOODFOOD GoodFood ✅ Production
core/silver/bi_roster_imagine_wellness.sql BI_ROSTER_IMAGINE_WELLNESS Imagine Wellness ✅ Production
core/silver/bi_roster_nba.sql BI_ROSTER_NBA NBA ✅ Production
core/silver/bi_roster_trim.sql BI_ROSTER_TRIM Trim ✅ Production
core/silver/bi_roster_ur_labs.sql BI_ROSTER_UR_LABS UR Labs ✅ Production
core/silver/bi_roster_flex_mg.sql BI_ROSTER_FLEX_MG Flex MG ✅ Production
core/silver/bi_roster_cartamundi.sql BI_ROSTER_CARTAMUNDI Cartamundi ✅ Production
core/silver/bi_roster_hellofresh.sql BI_ROSTER_HELLOFRESH HelloFresh ✅ Production
core/silver/bi_roster_smashtech.sql BI_ROSTER_SMASHTECH Smashtech ✅ Production

Silver Rules (Core BI Rosters): - Materialized as table (not dynamic table — rebuilt each run) - No JOINs, no filters beyond latest BATCH_ID - Date columns cast with TRY_TO_DATE(), numbers with TRY_TO_NUMBER() - Deduplicated by EID (natural key, not hashed)


Gold Models — Core / Shared (CORE_DB.GOLD)

Reports (rpt_)

Model File View Name Purpose Status
core/gold/rpt_master_roster.sql RPT_MASTER_ROSTER Cross-client active employee view, deduped by email/EID ✅ Production

Dimensions (dim_employee_*)

Employee dimensions for all clients. SCD Type 1 — latest state wins. Per ADR 010, all employee dimensions live in CORE_DB regardless of client.

Model File Table Name Source Silver Client Status
core/gold/dim_employee_warbyparker.sql DIM_EMPLOYEE_WARBYPARKER BI_ROSTER_WARBYPARKER Warby Parker ✅ Production
core/gold/dim_employee_bi_team.sql DIM_EMPLOYEE_BI_TEAM BI_ROSTER_BI_TEAM BI Team ✅ Production
core/gold/dim_employee_staff_mx.sql DIM_EMPLOYEE_STAFF_MX BI_ROSTER_STAFF_MX Staff MX ✅ Production
core/gold/dim_employee_morganandmorgan.sql DIM_EMPLOYEE_MORGANANDMORGAN BI_ROSTER_MORGANANDMORGAN Morgan & Morgan ✅ Production
core/gold/dim_employee_quadlock.sql DIM_EMPLOYEE_QUADLOCK BI_ROSTER_QUADLOCK Quad Lock ✅ Production
core/gold/dim_employee_ionos.sql DIM_EMPLOYEE_IONOS BI_ROSTER_IONOS IONOS ✅ Production
core/gold/dim_employee_flare.sql DIM_EMPLOYEE_FLARE BI_ROSTER_FLARE Flare ✅ Production
core/gold/dim_employee_postman_law.sql DIM_EMPLOYEE_POSTMAN_LAW BI_ROSTER_POSTMAN_LAW Postman Law ✅ Production
core/gold/dim_employee_rugiet.sql DIM_EMPLOYEE_RUGIET BI_ROSTER_RUGIET Rugiet ✅ Production
core/gold/dim_employee_jcrew.sql DIM_EMPLOYEE_JCREW BI_ROSTER_JCREW J.Crew ✅ Production
core/gold/dim_employee_keller_postman.sql DIM_EMPLOYEE_KELLER_POSTMAN BI_ROSTER_KELLER_POSTMAN Keller Postman ✅ Production
core/gold/dim_employee_condenast.sql DIM_EMPLOYEE_CONDENAST BI_ROSTER_CONDENAST Condé Nast ✅ Production
core/gold/dim_employee_within_health.sql DIM_EMPLOYEE_WITHIN_HEALTH BI_ROSTER_WITHIN_HEALTH Within Health ✅ Production
core/gold/dim_employee_western_dental.sql DIM_EMPLOYEE_WESTERN_DENTAL BI_ROSTER_WESTERN_DENTAL Western Dental ✅ Production
core/gold/dim_employee_match.sql DIM_EMPLOYEE_MATCH BI_ROSTER_MATCH Match ✅ Production
core/gold/dim_employee_logitech.sql DIM_EMPLOYEE_LOGITECH BI_ROSTER_LOGITECH Logitech ✅ Production
core/gold/dim_employee_drfirst.sql DIM_EMPLOYEE_DRFIRST BI_ROSTER_DRFIRST DrFirst ✅ Production
core/gold/dim_employee_goodfood.sql DIM_EMPLOYEE_GOODFOOD BI_ROSTER_GOODFOOD GoodFood ✅ Production
core/gold/dim_employee_imagine_wellness.sql DIM_EMPLOYEE_IMAGINE_WELLNESS BI_ROSTER_IMAGINE_WELLNESS Imagine Wellness ✅ Production
core/gold/dim_employee_nba.sql DIM_EMPLOYEE_NBA BI_ROSTER_NBA NBA ✅ Production
core/gold/dim_employee_trim.sql DIM_EMPLOYEE_TRIM BI_ROSTER_TRIM Trim ✅ Production
core/gold/dim_employee_ur_labs.sql DIM_EMPLOYEE_UR_LABS BI_ROSTER_UR_LABS UR Labs ✅ Production
core/gold/dim_employee_flex_mg.sql DIM_EMPLOYEE_FLEX_MG BI_ROSTER_FLEX_MG Flex MG ✅ Production
core/gold/dim_employee_cartamundi.sql DIM_EMPLOYEE_CARTAMUNDI BI_ROSTER_CARTAMUNDI Cartamundi ✅ Production
core/gold/dim_employee_hellofresh.sql DIM_EMPLOYEE_HELLOFRESH BI_ROSTER_HELLOFRESH HelloFresh ✅ Production
core/gold/dim_employee_smashtech.sql DIM_EMPLOYEE_SMASHTECH BI_ROSTER_SMASHTECH Smashtech ✅ Production
core/gold/dim_employee_ph.sql DIM_EMPLOYEE_PH PH_HR_ROSTER_ACTIVE PH (internal) ✅ Production

Seeds

Seed File Table Name Schema Purpose Updated
seeds/warbyparker/ai_agents.csv AI_AGENTS WBP_DB.GOLD AI wave enablement dates per agent As needed

Source Definitions (sources.yml)

Source Name Database Schema Tables
warbyparker_bronze WBP_DB / WBP_DB_DEV BRONZE gladly_contact_timestamps, gladly_conversation_timestamps, gladly_work_sessions, gladly_agent_durations
warbyparker_gsheets WBP_DB / WBP_DB_DEV BRONZE gsheet_csat, gsheet_qa, gsheet_qa_partner
core_bronze CORE_DB / CORE_DB_DEV BRONZE gsheet_bi_roster_* (26 tables), ph_hr_roster_active, ph_hr_roster_inactive
condenast_maestro MAESTRO_DB PUBLIC answers, questions, sections, templates, question_scores, section_scores, helpdesk_id_email
operations_bamboohr OPERATIONS BAMBOOHR ROSTER_CONDENAST (legacy — fct_cnd_qa still uses this; pending migration)

Dependency Graph

Bronze Tables (xo-foundry)
Silver Models (dbt tables)
├── wbp_gladly_contact_timestamps
├── wbp_gladly_conversation_timestamps
├── wbp_gladly_work_sessions
├── wbp_gladly_agent_durations
├── wbp_gsheet_csat
├── wbp_gsheet_qa
└── wbp_gsheet_qa_partner
Gold Facts (dbt tables)
├── fct_wbp_contacts      ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
│                         ◄── WBP_DB.SILVER.WBP_GLADLY_WORK_SESSIONS
│        ▲
│   int_wbp_contacts_hold (ephemeral)
├── fct_wbp_conversations ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_csat          ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_qa_internal   ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_qa_partner    ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_work_sessions ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EID)
├── fct_wbp_agent_durations
├── fct_wbp_agent_channel_summary ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EMAIL → EID)
├── fct_wbp_agent_summary_daily   ◄── CORE_DB.SILVER.BI_ROSTER_WARBYPARKER (EMAIL → EID)
└── fct_wbp_conversation_topics
Gold Aggregates (dbt tables)
├── agg_wbp_agent_contacts_daily       ← fct_wbp_contacts + fct_wbp_agent_durations
├── agg_wbp_agent_performance_daily    ← fct_wbp_contacts + fct_wbp_work_sessions
├── agg_wbp_csat_daily                 ← fct_wbp_csat
├── agg_wbp_qa_daily                   ← fct_wbp_qa_internal + fct_wbp_qa_partner
├── agg_wbp_qa_attributes_daily        ← fct_wbp_qa_internal + fct_wbp_qa_partner
└── agg_wbp_agent_summary_channel_daily ← fct_wbp_agent_channel_summary
Gold Reports (dbt views)
├── rpt_wbp_agent_performance
├── rpt_wbp_email_daily
├── rpt_wbp_xoos_agent_performance
├── rpt_wbp_agent_performance_channel
├── rpt_wbp_agent_productivity_daily
├── rpt_wbp_account_performance_channel_daily
├── exp_wbp_agent_qa_trend
├── exp_wbp_ai_agent_concurrency_daily
├── exp_wbp_ai_agents_durations_daily
├── exp_wbp_ai_agent_qa_week_over_week
├── exp_wbp_ai_agent_qa_month_over_month
├── exp_wbp_ai_qa_attributes_week_over_week
├── exp_wbp_ai_qa_attributes_month_over_month
├── exp_wbp_ai_wave_qa_week_over_week
├── exp_wbp_ai_wave_qa_month_over_month
├── exp_wbp_ai_wave_qa_quarter_over_quarter
├── exp_wbp_ai_vs_nonai_qa_wow
├── exp_wbp_ai_vs_nonai_qa_mom
├── exp_wbp_ai_vs_nonai_qa_qoq
├── exp_wbp_gladly_blended_ai_productivity
├── exp_wbp_gladly_blended_ai_productivity_weekly
└── exp_wbp_gladly_blended_ai_productivity_channel_daily
Tableau / Consumers

Planned Models (Not Yet Built)

Track upcoming models here so the team knows what's coming.

Model Type Client Priority Notes
agg_wbp_agent_daily_conversations Aggregate WBP High Conversation KPIs by agent/day; depends on fct_wbp_conversations
rpt_wbp_agent_performance_v2 Report WBP Medium Post Phase ⅚: full enrichment with macros + KPI registry
silver/condenast/* Silver CND Medium Sprout Social messages Silver layer