Files
medicines-snowflake/01_medicine_lookups/dispensing_by_vtm_or_vmp.sql
T
Andrew Charlwood 647d1bfa7f initial commit
2026-05-12 16:40:03 +01:00

79 lines
2.5 KiB
SQL

/*
Dispensing by VTM or VMP
========================
Purpose:
Summarise dispensed items, patients, and quantity for a medicine group
using national dispensing data.
Data source:
NATIONAL.GPMED."MedicinesDispensedInPrimarycare"
Notes:
- Dispensing data is official/payment-oriented and usually lags prescribing.
- Set either VTM_SNOMED_CODE or VMP_SNOMED_CODE. Leave the other as NULL.
- ProcessingPeriodDate is a month-level period date.
*/
SET START_PERIOD = '2025-04-01';
SET END_PERIOD = '2026-03-31';
SET VTM_SNOMED_CODE = NULL;
SET VMP_SNOMED_CODE = 'REPLACE_WITH_VMP_SNOMED_CODE';
WITH products AS (
-- Expands the selected VTM/VMP into product-level dm+d codes found in GPMED.
SELECT DISTINCT
"ProductSnomedCode",
"ProductDescription",
"TherapeuticMoietyName",
"BNFCode"
FROM DATA_HUB.DWH."DimMedicineAndDevice"
WHERE ($VTM_SNOMED_CODE IS NOT NULL AND "TherapeuticMoietySnomedCode" = $VTM_SNOMED_CODE)
OR ($VMP_SNOMED_CODE IS NOT NULL AND "MedicinalLatestSnomedCode" = $VMP_SNOMED_CODE)
OR ($VMP_SNOMED_CODE IS NOT NULL AND "ProductSnomedCode" = $VMP_SNOMED_CODE)
),
practices AS (
-- Restricts output to active Norfolk and Suffolk parent GP practices.
SELECT DISTINCT
"OrganisationCode" AS "PracticeCode",
"OrganisationName" AS "PracticeName",
"PCNName",
"PlaceName",
"AllianceName"
FROM DATA_HUB.DWH."DimOrganisationAndSite"
WHERE "OrganisationSubType" = 'GP Practice'
AND "IsSiteActive" = 'Yes'
AND "IsSiteNorfolkAndSuffolk" = 'Yes'
AND "SiteCode" = "OrganisationCode"
)
SELECT
gpm."ProcessingPeriodDate" AS "PeriodDate",
p."PracticeCode",
p."PracticeName",
p."PCNName",
p."PlaceName",
p."AllianceName",
prod."TherapeuticMoietyName",
COUNT(DISTINCT gpm."PatientPseudonym") AS "Patients",
SUM(gpm."ItemCount") AS "Items",
SUM(gpm."PaidQuantity") AS "PaidQuantity"
FROM NATIONAL.GPMED."MedicinesDispensedInPrimarycare" gpm
INNER JOIN products prod
ON gpm."PaiddmdCode" = prod."ProductSnomedCode"
INNER JOIN practices p
ON gpm."CostCentreODSCode" = p."PracticeCode"
WHERE gpm."ProcessingPeriodDate" BETWEEN $START_PERIOD AND $END_PERIOD
AND gpm."PatientPseudonym" IS NOT NULL
GROUP BY
gpm."ProcessingPeriodDate",
p."PracticeCode",
p."PracticeName",
p."PCNName",
p."PlaceName",
p."AllianceName",
prod."TherapeuticMoietyName"
ORDER BY
"PeriodDate",
"PracticeName",
prod."TherapeuticMoietyName";