version: 2

models:
  - name: stg_events
    description: Typed, deduplicated event records with explicit analytics eligibility.
    columns:
      - name: event_id
        tests: [not_null, unique]
      - name: event_name
        tests:
          - not_null
          - accepted_values:
              arguments:
                values: [page_viewed, project_viewed, case_study_viewed, resume_viewed, resume_downloaded, linkedin_clicked, contact_clicked]
      - name: event_timestamp
        tests: [not_null]

  - name: fct_sessions
    description: One row per reconstructed eligible session.
    columns:
      - name: session_id
        tests: [not_null, unique]
      - name: anonymous_user_id
        tests: [not_null]
      - name: session_start_at
        tests: [not_null]
      - name: pageviews
        tests: [not_null]

  - name: mart_conversion
    description: Governed daily engagement and conversion metrics.
    columns:
      - name: session_date
        tests: [not_null, unique]
      - name: sessions
        tests: [not_null]

  - name: stg_event_audit
    description: Delivered synthetic events, including duplicates and rejections.
    columns:
      - name: disposition
        tests:
          - not_null
          - accepted_values:
              arguments:
                values: [eligible,duplicate,invalid_contract,consent_denied,bot,internal,test_marker]
      - name: data_origin
        tests:
          - accepted_values:
              arguments:
                values: [synthetic_fixture]
  - name: fct_journeys
    description: Ordered same-session landing, project, case study and high-intent journey.
    columns:
      - name: session_id
        tests: [not_null,unique]
  - name: mart_project_engagement
    description: One row per session and project; downstream action is association, not attribution.
    columns:
      - name: project_id
        tests: [not_null]
      - name: seconds
        tests: [not_null]
  - name: mart_retention
    description: First-observed weekly cohorts, censoring incomplete weeks.
    columns:
      - name: cohort
        tests: [not_null]
      - name: week_number
        tests:
          - accepted_values:
              arguments:
                values: [0,1,2,3,4]
                quote: false
      - name: cohort_users
        tests: [not_null]
      - name: is_mature
        tests: [not_null]
