---
title: "Get DVM production metrics (PAW-108, Phase 1): per-provider revenue/hours/visits and clinic totals."
method: GET
path: "/Metrics/dvm-production"
tags: ["Metrics"]
---

# Get DVM production metrics (PAW-108, Phase 1): per-provider revenue/hours/visits and clinic totals.

`GET /Metrics/dvm-production`

## Query parameters

- `period` string

## Response `200`

OK

- BusinessMetricsResponseDtoOfDvmProductionDto
  - `success` boolean
  - `data` DvmProductionDto
    - `period` string
    - `clinic` DvmProductionClinicDto
      - `revenue` union
        - number, double
        - string, double
      - `visits` union
        - integer
        - string, int32
      - `hours` union
        - number, double
        - string, double
      - `revPerHour` union
        - number, double
        - string, double
      - `visitsPerHour` union
        - number, double
        - string, double
      - `avgVisitValue` union
        - number, double
        - string, double
      - `revenueChangePct` union
        - number, double
        - string, double
      - `revPerHourChangePct` union
        - number, double
        - string, double
      - `avgVisitValueChangePct` union
        - number, double
        - string, double
      - `revenueSparkline` union[]
        - union
          - number, double
          - string, double
      - `revPerHourSparkline` union[]
        - union
          - number, double
          - string, double
      - `avgVisitValueSparkline` union[]
        - union
          - number, double
          - string, double
      - `totalCompensation` union
        - number, double
        - string, double
      - `totalMargin` union
        - number, double
        - string, double
      - `profitPerHour` union
        - number, double
        - string, double
      - `avgCompPercent` union
        - number, double
        - string, double
      - `totalCompensationChangePct` union
        - number, double
        - string, double
      - `totalMarginChangePct` union
        - number, double
        - string, double
      - `marginSparkline` union[]
        - union
          - number, double
          - string, double
      - `compPercentSparkline` union[]
        - union
          - number, double
          - string, double
      - `discountLeakage` union
        - number, double
        - string, double
      - `discountLeakPct` union
        - number, double
        - string, double
      - `serviceMix` ServiceMixCategoryDto[]
        - `category` string
        - `percent` union
          - number, double
          - string, double
      - `categoryBreakdown` ClinicCategoryBreakdownDto[]
        - `category` string
        - `revenue` union
          - number, double
          - string, double
        - `leakage` union
          - number, double
          - string, double
      - `revenueForecast` ForecastPointDto[]
        - `weekStart` string, date
        - `projectedRevenue` union
          - number, double
          - string, double
        - `projectedRevPerHour` union
          - number, double
          - string, double
        - `bookedHours` union
          - number, double
          - string, double
        - `isFallback` boolean — True when the week had no forward bookings and fell back to trailing-average hours.
    - `providers` DvmProductionProviderDto[]
      - `providerId` string
      - `name` string
      - `revenue` union
        - number, double
        - string, double
      - `hours` union
        - number, double
        - string, double
      - `visits` union
        - integer
        - string, int32
      - `revPerHour` union
        - number, double
        - string, double
      - `visitsPerHour` union
        - number, double
        - string, double
      - `avgVisitValue` union
        - number, double
        - string, double
      - `diagPenetrationPct` union
        - number, double
        - string, double
      - `status` string
      - `compensation` DvmCompensationDto
        - `model` string
        - `annualSalary` union
          - number, double
          - string, double
        - `hourlyRate` union
          - number, double
          - string, double
        - `productionPercentage` union
          - number, double
          - string, double
        - `salaryCost` union
          - number, double
          - string, double
        - `productionPay` union
          - number, double
          - string, double
        - `totalCompensation` union
          - number, double
          - string, double
        - `compPercent` union
          - number, double
          - string, double
        - `margin` union
          - number, double
          - string, double
        - `profitPerHour` union
          - number, double
          - string, double
        - `compensationThresholdOverridePercent` union — Per-vet override of the clinic-level comp-% warning threshold. Null = use clinic default.
          - number, double
          - string, double
        - `excludedBuckets` string[] — Service-mix buckets excluded from this provider's production-pay revenue base (PAW-578).
        - `productionExcludedRevenue` union — Revenue stripped out of the production-pay calculation by List&lt;string&gt; DvmCompensationDto.ExcludedBuckets.
          - number, double
          - string, double
      - `discountLeakage` union
        - number, double
        - string, double
      - `discountLeakPct` union
        - number, double
        - string, double
      - `serviceMix` ServiceMixCategoryDto[]
        - `category` string
        - `percent` union
          - number, double
          - string, double
    - `signals` DvmSignalDto[]
      - `id` string
      - `type` string — "leak" | "highComp" | "lowRph" | "highYield".
      - `severity` string — "high" | "medium" | "low" — drives ordering and card colour.
      - `title` string
      - `message` string — Plain-text, fully formatted server-side.
      - `providerId` string, nullable
      - `providerName` string, nullable
      - `action` DvmSignalActionDto — Primary call-to-action for a signal. The backend emits an action type + payload; the frontend owns the route it maps to.
        - `label` string
        - `actionType` string — "coachProvider" | "tightenDiscounts".
        - `providerId` string, nullable
  - `error` string, nullable
  - `message` string, nullable

## Other responses

- `500` — Internal Server Error

---

[API](https://skmtc.net/clinicos/apis/pawthosx-business-api-v1.md) · [All operations](https://skmtc.net/clinicos/apis/pawthosx-business-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/clinicos/pawthosx-business-api-v1/revisions/a905bde4e796/schema)
