From 87851d2ba4a40a38d06c32483dcec280580c0fea Mon Sep 17 00:00:00 2001 From: Nupur Lal Date: Mon, 28 Jul 2025 13:42:13 +0000 Subject: [PATCH 1/2] new usecase on fwa dashboard reporting --- .../FWA_Dataprocessing_sql.ipynb | 3005 +++++++++++++++++ .../FWA_Reporting_in_Healthcare.ipynb | 331 ++ .../images/fwa-dashboard-msk.jpg | Bin 0 -> 951755 bytes .../FWA_Healthcare/images/fwa-dashboard.jpg | Bin 0 -> 345905 bytes 4 files changed, 3336 insertions(+) create mode 100644 UseCases/FWA_Healthcare/FWA_Dataprocessing_sql.ipynb create mode 100644 UseCases/FWA_Healthcare/FWA_Reporting_in_Healthcare.ipynb create mode 100644 UseCases/FWA_Healthcare/images/fwa-dashboard-msk.jpg create mode 100644 UseCases/FWA_Healthcare/images/fwa-dashboard.jpg diff --git a/UseCases/FWA_Healthcare/FWA_Dataprocessing_sql.ipynb b/UseCases/FWA_Healthcare/FWA_Dataprocessing_sql.ipynb new file mode 100644 index 00000000..0243a0c8 --- /dev/null +++ b/UseCases/FWA_Healthcare/FWA_Dataprocessing_sql.ipynb @@ -0,0 +1,3005 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a9480d78-94ed-43bc-afd9-cd3679f73436", + "metadata": {}, + "source": [ + "
\n", + "

\n", + " Fraud, Waste, and Abuse (FWA) Detection - Dataprocessing
\n", + " \"Teradata\"\n", + "

\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "7fd36aa3-fe29-43b5-ab9e-42dda4d7b9bc", + "metadata": {}, + "source": [ + "

Introduction
\n", + "

In this notebook we will process the source data and create the tables required for reporting.

" + ] + }, + { + "cell_type": "markdown", + "id": "49b6edde-fafb-4159-b9c2-c4867e5dd4d4", + "metadata": {}, + "source": [ + "
\n", + "1. Connect to Vantage\n", + "

You will be prompted to provide the password. Enter your password, press the Enter key, and then use the down arrow to go to the next cell.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ac825b3-0058-47fc-b2c0-0a46a9128b99", + "metadata": {}, + "outputs": [], + "source": [ + "%connect local, hidewarnings=True" + ] + }, + { + "cell_type": "markdown", + "id": "6892e7b8-3393-4c94-bce0-504382072a06", + "metadata": {}, + "source": [ + "

Setup for execution of notebook. Begin running steps with Shift + Enter keys.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05f00edd-6215-4358-8aa8-3ee73edfbdb5", + "metadata": {}, + "outputs": [], + "source": [ + "Set query_band='DEMO=FF_FWA_Healthcare_Sql.ipynb;' update for session;" + ] + }, + { + "cell_type": "markdown", + "id": "aa32d7e8-6ec4-4aa2-a18f-f41de7c7129d", + "metadata": {}, + "source": [ + "

Getting Data for This Demo

\n", + "

We have provided data for this demo on cloud storage. You can either run the demo using foreign tables to access the data without any storage on your environment or download the data to local storage, which may yield faster execution. Still, there could be considerations of available storage. Two statements are in the following cell, and one of them is commented out. You may switch between the modes by changing the comment string.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "915cb853-0b0c-4bb4-b63a-70346297a679", + "metadata": {}, + "outputs": [], + "source": [ + "call get_data('DEMO_HealthcareFWA_local'); -- Takes approx 7minutes\n", + "-- call get_data('DEMO_HealthcareFWA_cloud'); -- Takes 10 seconds" + ] + }, + { + "cell_type": "markdown", + "id": "270d36cb-23d1-4bd3-867b-72353ae9a68e", + "metadata": {}, + "source": [ + "

Optional step – if you want to see status of databases/tables created and space used.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2017234-a70b-40aa-b987-d7ddf296ec2c", + "metadata": {}, + "outputs": [], + "source": [ + "call space_report(); -- Takes 5 seconds" + ] + }, + { + "cell_type": "markdown", + "id": "0d715b97-a5d9-418c-9380-cfe3f63edf34", + "metadata": {}, + "source": [ + "
\n", + "2. Reporting tables for Musculoskeletal Conditions\n", + "

Here we are creating reporting tables needed for the musculoskeletal condtion reporting. As the first step we are creating and intermediate view which will hold the patient ids and will work as a driver table in the subsequent steps.In this view we have converted all the procedure codes to its corresponding procedure descriptions.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e01f2fa3-6b7e-492a-a758-2abe29a558ff", + "metadata": {}, + "outputs": [], + "source": [ + "REPLACE VIEW DEMO_USER.WC_BK_V_NPATH_QRY AS (\n", + "SELECT\n", + " patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code,\n", + " Total_Amount_Paid_Per_Line,\n", + " Service_Line_From_Date_ Service_Line_From_Date,\n", + " first_musc_diag,\n", + " Employee_Mailing_City,\n", + " CASE \n", + " WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9894[0-4]','c') = 1 \n", + " THEN 'CMT'\n", + " WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[1-4]','c') = 1\n", + " THEN 'PT'\n", + " WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[5-8]','c') = 1\n", + " THEN 'OT'\n", + " WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'970((1[0-9])|(2[0-8]))','c') = 1\n", + " THEN 'SM'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('63047', '63048', '63030', '63035',\n", + " '22612', '22633', '22558', '22551',\n", + " '64635', '64636', '63045') THEN 'SRG'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('70551','70553','70544','70547',\n", + " '70549','70540','70543','70540',\n", + " '70543','70336') THEN 'BCK_NCK_MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('72141','72156','72146','72157',\n", + " '72148','72158') THEN 'SPINE_MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('77059','77021') THEN 'BREAST_MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('73221','73223','73721','73723') THEN 'JOINTS_MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('73718','73720','73218','73220') THEN 'EXTR_MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('74181','74183','74185') THEN 'ABD_MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('72195','72197','72195',\n", + " '72197','72195','72197') THEN 'PLVS_MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('72125','72126','72131',\n", + " '72132''72128','72129') THEN 'CT_SCAN'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('72040','72050','72220',\n", + " '72100','72110','72114',\n", + " '72200','72202','72052',\n", + " '72082','72070') THEN 'XRAY'\n", + " ELSE 'OTHER' END as Description\n", + " ,Billing_Provider_Last_Name_Or_Group,Billing_Provider_Fein\n", + " \n", + " FROM(\n", + "\n", + "SELECT\n", + " (Claim_Administrator_Claim_Number || '_' ||Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, Total_Amount_Paid_Per_Line, \n", + " CAST(Service_Line_From_Date AS DATE FORMAT 'YYYYMMDD') Service_Line_From_Date_,\n", + " Employee_Mailing_City,\n", + " min(Service_Line_From_Date_) OVER (PARTITION BY patient_identifier) first_musc_diag\n", + " ,Billing_Provider_Last_Name_Or_Group,Billing_Provider_Fein\n", + " FROM DEMO_HealthcareFWA.WC_SV1_MSK\n", + "UNION ALL\n", + "SELECT \n", + " (Claim_Administrator_Claim_Number || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Total_Amount_Paid_Per_Line as FLOAT), \n", + " CAST(Service_Line_From_Date AS DATE FORMAT 'YYYYMMDD') Service_Line_From_Date_,\n", + " Employee_Mailing_City,\n", + " min(Service_Line_From_Date_) OVER (PARTITION BY patient_identifier) first_musc_diag\n", + " ,Billing_Provider_Last_Name_Or_Group,Billing_Provider_Fein\n", + " FROM DEMO_HealthcareFWA.WC_SV2_MSK\n", + ")\n", + " d\n", + " WHERE Description not like 'OTHER'\n", + ")\n", + ";" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f87956cc-a54a-4b6c-b5d2-2cef7a2f106e", + "metadata": {}, + "outputs": [], + "source": [ + "select top 10 * from WC_BK_V_NPATH_QRY;" + ] + }, + { + "cell_type": "markdown", + "id": "9e471f56-a188-4315-815a-1faa03dae690", + "metadata": {}, + "source": [ + "

Here we are calculating the data for the surgical pathways i.e where the last procedure is Surgery (SRG) augmenting it with the cost of each individual procedure and the overall cost. We will use Vantage's NPath function for this. As we have data available for the TX county only we have added that in filter clause.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5b67d4ca-a97e-4e9b-8676-277f3798daeb", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.surg_pathways\n", + "AS (\n", + "SELECT\n", + " TRIM (BOTH FROM REGEXP_REPLACE(p.patient_identifier, '[\\[\\]]', '', 1, 0, 'c')) as trimmed_claim,\n", + " REGEXP_REPLACE(path, '[\\[\\]\\s]+', '', 1, 0, 'c') AS path,\n", + " first_musc_diag,\n", + " last_date,\n", + " REGEXP_REPLACE(dates, '[\\[\\]\\s]+', '', 1, 0, 'c') AS dates,\n", + " REGEXP_REPLACE(cost, '[\\[\\]\\s]+', '', 1, 0, 'c') AS cost,\n", + " length,\n", + " REGEXP_REPLACE(prov_group, '[\\[\\]]+', '', 1, 0, 'c') as prov_group,\n", + " REGEXP_REPLACE(provider, '[\\[\\]\\s]+', '', 1, 0, 'c') as provider,\n", + " county,\n", + " total_cost\n", + "FROM nPath (\n", + " ON (\n", + " SELECT\n", + " patient_identifier, Description, Service_Line_From_Date, first_musc_diag,\n", + " CAST(AVG(Total_amount_paid_Per_Line) as decimal(10,2)) as Total_Charge_Per_Line\n", + " ,Billing_Provider_Last_Name_or_Group, Billing_Provider_FEIN\n", + " FROM DEMO_user.WC_BK_V_NPATH_QRY\n", + " GROUP BY patient_identifier, Description, first_musc_diag, Service_Line_From_Date,\n", + " Billing_Provider_Last_Name_or_Group, Billing_Provider_FEIN)\n", + " PARTITION BY patient_identifier\n", + " ORDER BY Service_Line_From_Date\n", + " USING\n", + " Mode (nonoverlapping)\n", + " Pattern ('^N_SRG+.SRG') \n", + " Symbols (\n", + " Description not like 'SRG' as N_SRG,\n", + " Description like 'SRG' as SRG\n", + " )\n", + " Result (\n", + "\n", + " FIRST (patient_identifier OF ANY( SRG, N_SRG)) AS patient_identifier,\n", + " ACCUMULATE (CAST (Description AS CHAR(40)) OF ANY( SRG, N_SRG)) AS path,\n", + " LAST(Service_Line_From_Date of any(SRG, N_SRG)) as last_date,\n", + " FIRST(first_musc_diag of any(SRG, N_SRG)) as first_musc_diag,\n", + " ACCUMULATE (Service_Line_From_Date of any(SRG, N_SRG)) AS dates,\n", + " ACCUMULATE(Total_Charge_Per_Line of ANY( SRG, N_SRG)) as cost,\n", + " COUNT(* of ANY( SRG, N_SRG)) as length,\n", + " ACCUMULATE(Billing_Provider_Last_Name_or_Group of ANY(SRG, N_SRG)) as prov_group,\n", + " ACCUMULATE(Billing_Provider_FEIN of ANY(SRG, N_SRG)) as provider\n", + " )\n", + ") p\n", + "LEFT JOIN (\n", + " select \n", + " MIN(COUNTY) as county,\n", + " MIN(STATE_CODE) as state_code,\n", + " SUM(Total_Charge_Per_Line) as total_cost,\n", + " (Claim_Administrator_Claim_Number ||'_'|| Insurer_FEIN) as patient_identifier\n", + " from DEMO_HealthcareFWA.WC_SV1_MSK\n", + " inner join DEMO_HealthcareFWA.wc_us_cities\n", + " on lower(Employee_Mailing_City) = lower(CITY)\n", + " where Employee_Mailing_City is not null and STATE_CODE = 'TX'\n", + " group by patient_identifier\n", + ") d\n", + "ON trimmed_claim = d.patient_identifier\n", + ")WITH DATA ;" + ] + }, + { + "cell_type": "markdown", + "id": "1c18d3c3-642c-4b4e-98f3-5ca7298bfcb5", + "metadata": {}, + "source": [ + "

Next we are calculating the data for all musculoskeletal procedures whcih are not ending with a surgery. Similar to above we are augmenting it with the cost of each individual procedure and the overall cost.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0ee6bf7a-3d57-48c1-996e-e0691f7ff88b", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.nsurg_pathways as (\n", + "SELECT \n", + " a.*,\n", + " COUNTY,\n", + " STATE_CODE\n", + "FROM\n", + "(\n", + " SELECT \n", + " TRIM (BOTH FROM REGEXP_REPLACE(p.patient_identifier, '[\\[\\]]', '', 1, 0, 'c')) as trimmed_claim,\n", + " REGEXP_REPLACE(path, '[\\[\\]\\s]+', '', 1, 0, 'c')||',NSRG' AS path,\n", + " first_musc_diag, \n", + " last_date,\n", + " REGEXP_REPLACE(dates, '[\\[\\]\\s]+', '', 1, 0, 'c')||','||last_date AS dates,\n", + " REGEXP_REPLACE(cost, '[\\[\\]\\s]+', '', 1, 0, 'c')||',0.0' AS cost, \n", + " length\n", + " FROM nPath (\n", + " ON (\n", + " SELECT\n", + " patient_identifier, Description, Service_Line_From_Date, first_musc_diag,\n", + " CAST(AVG(Total_amount_paid_Per_Line) as decimal(10,2)) as Total_Charge_Per_Line\n", + " FROM DEMO_USER.WC_BK_V_NPATH_QRY\n", + " GROUP BY patient_identifier, Description, first_musc_diag, Service_Line_From_Date)\n", + " PARTITION BY patient_identifier\n", + " ORDER BY Service_Line_From_Date\n", + " USING\n", + " Mode (nonoverlapping)\n", + " Pattern ('^N_SRG+.N_SRG$') \n", + " Symbols (\n", + " Description not like 'SRG' as N_SRG\n", + " )\n", + " Result (\n", + " FIRST (patient_identifier OF ANY( N_SRG)) AS patient_identifier,\n", + " ACCUMULATE (CAST (Description AS CHAR(40)) OF ANY( N_SRG)) AS path,\n", + " LAST(Service_Line_From_Date of any(N_SRG)) as last_date,\n", + " FIRST(first_musc_diag of any(N_SRG)) as first_musc_diag, \n", + " ACCUMULATE (Service_Line_From_Date of any(N_SRG)) AS dates,\n", + " ACCUMULATE(Total_Charge_Per_Line of ANY(N_SRG)) as cost,\n", + " COUNT(* of ANY( N_SRG)) as length\n", + " )\n", + ") p\n", + ") a\n", + "LEFT JOIN (\n", + " select MIN(COUNTY) as COUNTY, MIN(STATE_CODE) as STATE_CODE, \n", + " (Claim_Administrator_Claim_Number ||'_'|| Insurer_FEIN) as patient_identifier\n", + " from DEMO_HealthcareFWA.WC_SV1HEADER\n", + " inner join DEMO_HealthcareFWA.wc_us_cities\n", + " on lower(Employee_Mailing_City) = lower(CITY)\n", + " where Employee_Mailing_City is not null and STATE_CODE = 'TX'\n", + " group by patient_identifier\n", + ") d\n", + "ON trimmed_claim = d.patient_identifier\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "71c7b60b-5dbb-49d9-beef-83b2389d4531", + "metadata": {}, + "source": [ + "

In the table below, we are getting all the providers for the MSK procedures using the billing information.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87d11f46-bbce-4366-8a88-f5456e7c01d0", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_pathwys_prov as (\n", + "SELECT\n", + " Billing_Provider_FEIN,\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code in ('70551','70553','70544','70547','70549',\n", + " '70540','70543','70540','70543','70336',\n", + " '72141','72156','72146','72157','72148',\n", + " '72158','77059','77021','73221','73223',\n", + " '73721','73723','73718','73720','73218',\n", + " '73220','74181','74183','74185','72195',\n", + " '72197','72195','72197','72195','72197') \n", + " THEN 1 ELSE 0 END) as \"MRI Count\",\n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Total Cost\"\n", + "FROM (\n", + " select \n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " HCPCS_Line_Procedure_Billed_Code\n", + " from DEMO_HealthcareFWA.WC_SV1_MSK\n", + "UNION ALL\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " HCPCS_Line_Procedure_Billed_Code\n", + " from DEMO_HealthcareFWA.WC_SV2_MSK\n", + ") d\n", + "GROUP BY Billing_Provider_FEIN\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "c86a1f83-08ac-4420-862d-a53a865d29f5", + "metadata": {}, + "source": [ + "

In the table below, we are claculating the average surgery costs.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "85ba0f45-5f81-44e6-a131-ff646245e802", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.srg_averages as (\n", + "SELECT\n", + " avg(first_surg - first_musc_diag) as avg_days_srg, \n", + " avg(cost) as avg_cost, \n", + " count(patient_identifier) as volume\n", + "FROM (\n", + " SELECT\n", + " MIN(CASE WHEN \n", + " HCPCS_Line_Procedure_Billed_Code in ('63047','63048','63030','63035','22612','22633',\n", + " '22558','22551','64635','64636','63045')\n", + " THEN Service_Line_From_Date END) as first_surg,\n", + " MIN(CASE WHEN \n", + " HCPCS_Line_Procedure_Billed_Code in ('70551','70553','70544','70547','70549','70540','70543','70540',\n", + " '70543','70336','72141','72156','72146','72157','72148','72158',\n", + " '77059','77021','73221','73223','73721','73723','73718','73720',\n", + " '73218','73220','74181','74183','74185','72195','72197','72195',\n", + " '72197','72195','72197')\n", + " THEN Service_Line_From_Date END) as first_mri,\n", + " MIN(Service_Line_From_Date) as first_musc_diag,\n", + " MIN(CASE WHEN \n", + " HCPCS_Line_Procedure_Billed_Code in ('70551','70553','70544','70547','70549','70540','70543','70540',\n", + " '70543','70336','72141','72156','72146','72157','72148','72158',\n", + " '77059','77021','73221','73223','73721','73723','73718','73720',\n", + " '73218','73220','74181','74183','74185','72195','72197','72195',\n", + " '72197','72195','72197')\n", + " THEN 1 ELSE 0 END) as mri_count,\n", + " CASE \n", + " WHEN (first_mri <= first_musc_diag + (7*6)) THEN 'Non EBM'\n", + " ELSE 'EBM'\n", + " END as label,\n", + " SUM(Total_Charge_Per_Line) as cost,\n", + " patient_identifier\n", + " FROM\n", + " (\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, Service_Line_From_Date\n", + " from DEMO_HealthcareFWA.WC_SV1_MSK\n", + "\n", + " UNION ALL\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Service_Line_From_Date as DATE FORMAT 'YYYYMMDD')\n", + " from DEMO_HealthcareFWA.WC_SV2_MSK\n", + " ) d\n", + " GROUP BY patient_identifier\n", + ") d\n", + "WHERE first_surg is not null\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "8dba37dd-2eb3-4f5d-a7f3-1a94f1dc4899", + "metadata": {}, + "source": [ + "

In the table below, we are calculating average mri's performed on patients.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eab2e50f-4630-4482-a7e8-440a631e4d64", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.srg_mri as (\n", + "SELECT label, AVG(mri_count) avg_mri_count\n", + "FROM (\n", + " SELECT\n", + " MIN(CASE WHEN \n", + " HCPCS_Line_Procedure_Billed_Code in ('63047','63048','63030','63035','22612','22633',\n", + " '22558','22551','64635','64636','63045')\n", + " THEN Service_Line_From_Date END) as first_surg,\n", + " MIN(CASE WHEN \n", + " HCPCS_Line_Procedure_Billed_Code in ('70551','70553','70544','70547','70549','70540','70543','70540',\n", + " '70543','70336','72141','72156','72146','72157','72148','72158',\n", + " '77059','77021','73221','73223','73721','73723','73718','73720',\n", + " '73218','73220','74181','74183','74185','72195','72197','72195',\n", + " '72197','72195','72197')\n", + " THEN Service_Line_From_Date END) as first_mri,\n", + " MIN(Service_Line_From_Date) as first_musc_diag,\n", + " SUM(CASE WHEN \n", + " HCPCS_Line_Procedure_Billed_Code in ('70551','70553','70544','70547','70549','70540','70543','70540',\n", + " '70543','70336','72141','72156','72146','72157','72148','72158',\n", + " '77059','77021','73221','73223','73721','73723','73718','73720',\n", + " '73218','73220','74181','74183','74185','72195','72197','72195',\n", + " '72197','72195','72197')\n", + " THEN 1 ELSE 0 END) as mri_count,\n", + " CASE \n", + " WHEN (first_mri <= first_musc_diag + (7*6)) THEN 'Non EBM'\n", + " ELSE 'EBM'\n", + " END as label,\n", + " SUM(Total_Charge_Per_Line) as cost,\n", + " patient_identifier\n", + " FROM\n", + " (\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, Service_Line_From_Date\n", + " from DEMO_HealthcareFWA.WC_SV1_MSK\n", + "\n", + " UNION ALL\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Service_Line_From_Date as DATE FORMAT 'YYYYMMDD')\n", + " from DEMO_HealthcareFWA.WC_SV2_MSK\n", + " ) d\n", + " GROUP BY patient_identifier\n", + ") d\n", + "WHERE first_surg is not null\n", + "GROUP BY label\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "30a13721-52d8-4fb3-980b-5d2e7fe352eb", + "metadata": {}, + "source": [ + "

In the table below, we are getting cost of all the procedures in the musculoskeletal condition.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "09a2d81b-66ed-4e4c-94f5-edeaa96f6796", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_comorb_conds as (\n", + "SELECT *\n", + "FROM(\n", + " select\n", + " COALESCE(DESCRIPTION,CAST(Comorb_Code AS CHAR(3))) condition,\n", + " count(Bill_ID) volume,\n", + " sum(Total_Charge_Per_Line) cost\n", + " from (\n", + " sel Bill_ID, Comorb_Code, Total_Charge_Per_Line from\n", + " (\n", + " SELECT\n", + " main.Bill_ID,\n", + " main.First_ICD9_CM_Diagnosis_Code, main.Second_ICD9_CM_Diagnosis_Code,\n", + " main.Third_ICD9_CM_Diagnosis_Code, main.Fourth_ICD9_CM_Diagnosis_Code, \n", + " main.Fifth_ICD9_CM_Diagnosis_Code, Total_Charge_Per_Line\n", + " from DEMO_HealthcareFWA.WC_SV1HEADER main\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV1DETAIL det\n", + " ON main.Bill_ID = det.Bill_ID\n", + " WHERE ((main.First_ICD9_CM_Diagnosis_Code like 'M__%') OR (main.Second_ICD9_CM_Diagnosis_Code like 'M__%')\n", + " OR (main.Third_ICD9_CM_Diagnosis_Code like 'M__%') OR (main.Fourth_ICD9_CM_Diagnosis_Code like 'M__%')\n", + " OR (main.Fifth_ICD9_CM_Diagnosis_Code like 'M__%'))\n", + " ) a\n", + " UNPIVOT EXCLUDE NULLS\n", + " (\n", + " Comorb_Code FOR Diag_level IN\n", + " (First_ICD9_CM_Diagnosis_Code, Second_ICD9_CM_Diagnosis_Code,\n", + " Third_ICD9_CM_Diagnosis_Code, Fourth_ICD9_CM_Diagnosis_Code,\n", + " Fifth_ICD9_CM_Diagnosis_Code)\n", + " ) Tmp\n", + " where \n", + " (Comorb_Code not like 'M__%') AND (Comorb_Code not like 'S__%') AND\n", + " (Comorb_Code not like 'R26%') AND (Comorb_Code not like 'G56%') AND\n", + " (Comorb_Code not like 'Z47%') AND (Comorb_Code not like 'T84%') AND\n", + " (Comorb_Code not like 'G82%') AND (Comorb_Code not like 'Y99%') AND\n", + " (Comorb_Code not like 'T85%') AND (Comorb_Code not like 'Z96%') AND\n", + " (Comorb_Code not like 'R60%') AND (Comorb_Code not like 'R29%') AND\n", + " (Comorb_Code not like 'T14%') AND (Comorb_Code not like 'G57%') AND\n", + " (Comorb_Code not like 'W01%') AND (Comorb_Code not like 'Y92%') AND\n", + " (Comorb_Code not like 'W19%') AND (Comorb_Code not like 'X50%') AND\n", + " (Comorb_Code not like 'G89%') AND (Comorb_Code not like 'Z79%') AND\n", + " (Comorb_Code not like 'Z98%') AND (Comorb_Code not like 'Z48%') AND\n", + " (Comorb_Code not like 'Z01%') AND (Comorb_Code not like 'Z51%') AND\n", + " (Comorb_Code not like 'Z68%')\n", + ") A\n", + "LEFT JOIN DEMO_HealthcareFWA.WC_MSK_DIAG_DESC\n", + "ON CAST(Comorb_Code AS CHAR(3)) = ICD_10_CODE\n", + "group by Condition\n", + ") d\n", + "QUALIFY RANK() OVER (ORDER BY cost DESC) <= 10 OR\n", + " RANK() OVER (ORDER BY volume DESC) <= 10\n", + " ) WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "71984609-4ca4-4298-b48e-4c2fddc47941", + "metadata": {}, + "source": [ + "

In the table below, we are getting cost per percedure group for all the procedures in the musculoskeletal condition.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11c11b71-72aa-40ff-829c-e472194035bb", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_proc_groups as (\n", + "SELECT \"group\", cost\n", + "FROM(\n", + " SELECT\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9894[0-4]','c') = 1 \n", + " THEN Total_Charge_Per_Line ELSE 0 END) as \"Chiropractic Treatment\",\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[1-4]','c') = 1 \n", + " THEN Total_Charge_Per_Line ELSE 0 END) as \"Physical Therapy\",\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[5-8]','c') = 1 \n", + " THEN Total_Charge_Per_Line ELSE 0 END) as \"Occupational Therapy\",\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'970((1[0-9])|(2[0-8]))','c') = 1 \n", + " THEN Total_Charge_Per_Line ELSE 0 END) as \"Supervised Modalities\",\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code in ('63047','63048','63030','63035','22612',\n", + " '22633','22558','22551','64635','64636',\n", + " '63045') \n", + " THEN Total_Charge_Per_Line ELSE 0 END) as \"Spinal Surgery\",\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code in ('70551','70553','70544','70547','70549',\n", + " '70540','70543','70540','70543','70336',\n", + " '72141','72156','72146','72157','72148',\n", + " '72158','77059','77021','73221','73223',\n", + " '73721','73723','73718','73720','73218',\n", + " '73220','74181','74183','74185','72195',\n", + " '72197','72195','72197','72195','72197') \n", + " THEN Total_Charge_Per_Line ELSE 0 END) as MRI,\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code in ('72125','72126','72131','72132','72128','72129') \n", + " THEN Total_Charge_Per_Line ELSE 0 END) as \"CT Scan\",\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code in ('72040','72050','72220','72100','72110','72114',\n", + " '72200','72202','72052','72082','72070')\n", + " THEN Total_Charge_Per_Line ELSE 0 END) as \"X-ray\"\n", + " FROM(\n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, Total_Charge_Per_Line, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " FROM DEMO_HealthcareFWA.WC_SV1_MSK\n", + "\n", + " UNION ALL\n", + "\n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Total_Charge_Per_Line as FLOAT), CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " FROM DEMO_HealthcareFWA.WC_SV2_MSK\n", + " ) d\n", + ") d\n", + "UNPIVOT EXCLUDE NULLS (cost FOR \"group\" in (\"Chiropractic Treatment\", \"Physical Therapy\", \"Occupational Therapy\",\n", + " \"Supervised Modalities\", \"Spinal Surgery\", \"MRI\", \"CT Scan\", \"X-ray\")) tmp\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "946acd78-e136-4c7d-b637-f3654f662d1a", + "metadata": {}, + "source": [ + "

In the table below, we are calculating the cost procedure in the musculoskeletal condition.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4aa33d1c-3a5b-44fb-970b-05f8b255b65b", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_procedures as (\n", + "SELECT\n", + " CAST(Description AS VARCHAR(45)) as \"procedure\", total_cost\n", + "FROM (\n", + " select \n", + " COALESCE(\"Sub_Category\",\"SHORT DESCRIPTION\") as Description, \n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as total_cost\n", + " FROM (\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1_MSK\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL\n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2_MSK\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL\n", + " ) d\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_CPT_Coding_temp\n", + " ON\n", + " (HCPCS_Line_Procedure_Billed_Code BETWEEN \"FROM\" AND COALESCE(\"TO\",\"FROM\")) AND\n", + " (LENGTH(HCPCS_Line_Procedure_Billed_Code) = LENGTH(\"FROM\"))\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_HCPCS_Coding\n", + " ON HCPCS_Line_Procedure_Billed_Code = HCPC\n", + " GROUP BY Description\n", + ") d\n", + "QUALIFY RANK() OVER (ORDER BY TOTAL_COST DESC) <= 10\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "a3aec056-a514-42fd-be9b-6abfd85e29a3", + "metadata": {}, + "source": [ + "

In the table below, we list the providers of the musculoskeletal conditions.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "edab78d0-fb50-46c2-a435-0c4c682e9ba2", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_providers as (\n", + "SELECT \n", + " d.Billing_Provider_FEIN,\n", + " facility_name, Billing_Provider_First_Name, Billing_Provider_Last_Name_or_Group, cost\n", + "FROM\n", + "(\n", + " SELECT Billing_Provider_FEIN, CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as cost\n", + " FROM (\n", + " select \n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1_MSK\n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2_MSK\n", + " ) d\n", + " GROUP BY Billing_Provider_FEIN\n", + ") d\n", + "LEFT JOIN DEMO_HealthcareFWA.WC_PROVIDER_LOOKUP lu\n", + "ON lu.Billing_Provider_FEIN = d.Billing_Provider_FEIN\n", + "QUALIFY RANK() OVER (ORDER BY COST DESC) <= 20\n", + ") WITH DATA; " + ] + }, + { + "cell_type": "markdown", + "id": "b1932b0a-faf6-47ac-85e8-b878b5b15bd1", + "metadata": {}, + "source": [ + "

In the table below, we are calculating total, average, min and max cost and volume of patients having musculoskeletal conditions.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "866ad4ad-99f5-44a0-8123-dc71b87c727d", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_drilldown_proc_groups as (\n", + "SELECT\n", + " PRC_GRP as \"Procedure Group\", \n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Total Cost\",\n", + " SUM(CASE WHEN Total_Charge_Per_Line is NULL THEN 0 ELSE 1 END) as Volume,\n", + " CAST(AVG(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Average Cost\",\n", + " CAST(MIN(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Min Cost\",\n", + " CAST(MAX(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Max Cost\",\n", + " COUNT(DISTINCT CASE WHEN Total_Charge_Per_Line is NULL THEN NULL ELSE patient_identifier END) as \"No. of Patients\"\n", + "FROM DEMO_HealthcareFWA.WC_MSK_PRC_GRP_FILTERED_BILLS\n", + "GROUP BY \"Procedure Group\"\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "94c9ffa5-f6c8-47a4-9314-71328d343b63", + "metadata": {}, + "source": [ + "

In the table below, we are calculating average cost of procedure per county based on the city provided in the billing information.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2aae2885-6aee-4d12-8ca5-a2c61a11725d", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_drilldown_proc_grp_counties as (\n", + "SELECT\n", + " prc_grp as prc_grp,\n", + " county as county, \n", + " AVG(Total_Charge_Per_Line) as avg_costs\n", + "FROM(\n", + " select county, STATE_CODE, HCPCS_Line_Procedure_Billed_Code, Total_Charge_Per_Line\n", + " from DEMO_HealthcareFWA.WC_SV1HEADER hd\n", + " inner join DEMO_HealthcareFWA.WC_SV1DETAIL dt on hd.Bill_ID = dt.Bill_ID\n", + " inner join DEMO_HealthcareFWA.wc_us_cities\n", + " on lower(hd.Billing_Provider_City) = lower(CITY)\n", + " where \n", + " STATE_CODE = 'TX'\n", + " AND (hd.Date_of_Bill between 20170000 and 20210000)\n", + " AND ((hd.First_ICD9_CM_Diagnosis_Code like 'M__%') OR (hd.Second_ICD9_CM_Diagnosis_Code like 'M__%')\n", + " OR (hd.Third_ICD9_CM_Diagnosis_Code like 'M__%') OR (hd.Fourth_ICD9_CM_Diagnosis_Code like 'M__%'))\n", + ") d\n", + "INNER JOIN (\n", + " SELECT \n", + " MIN(Total_Charge_Per_Line) as min_cost,\n", + " MAX(Total_Charge_Per_Line) as max_cost,\n", + " hcpcs_line_procedure_billed_code\n", + " FROM DEMO_HealthcareFWA.WC_MSK_PRC_GRP_FILTERED_BILLS\n", + " GROUP BY hcpcs_line_procedure_billed_code\n", + ") b\n", + "ON \n", + " d.HCPCS_Line_Procedure_Billed_Code = b.HCPCS_Line_Procedure_Billed_Code\n", + " AND (d.Total_Charge_Per_Line > b.min_cost AND \n", + " d.Total_Charge_Per_Line < b.max_cost)\n", + "INNER JOIN DEMO_HealthcareFWA.WC_MSK_PRC_GRP\n", + "ON REGEXP_SIMILAR(d.HCPCS_Line_Procedure_Billed_Code,CPT_HCPC_CODE) = 1\n", + "GROUP BY county,prc_grp\n", + "HAVING AVG_COSTS is NOT NULL\n", + " ) WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "f049eb1f-73dc-43b9-80ae-8cc18e82388b", + "metadata": {}, + "source": [ + "

In the table below, we are calculating total cost and volume of patients having musculoskeletal conditions grouped by procedure and procedure group.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6f7791e6-a82f-4174-9290-8413af260833", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_drilldown_proc_grp_procedures as (\n", + "SELECT\n", + " prc_grp, proc, cost, volume\n", + "FROM (\n", + " select\n", + " prc_grp,\n", + " COALESCE(Description,HCPCS_Line_Procedure_Billed_Code) as proc,\n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as cost,\n", + " SUM(CASE WHEN Total_Charge_Per_Line is NULL THEN 0 ELSE 1 END) as volume\n", + " FROM DEMO_HealthcareFWA.WC_MSK_PRC_GRP_FILTERED_BILLS d\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_MSK_PRC_DESC\n", + " ON HCPCS_Line_Procedure_Billed_Code = CAST(CPT AS VARCHAR(20))\n", + " GROUP BY prc_grp, proc\n", + ") d\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "dbaa541a-cef7-4dc7-bc07-a50dc3e6b98a", + "metadata": {}, + "source": [ + "

Table below gives provider details.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1383ef76-a999-4789-9ba3-f00694d7057d", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.msk_drilldown_proc_grp_provs as (\n", + "SELECT \n", + " PRC_GRP, COUNTY, Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group,\n", + " AVG(Total_Charge_Per_Line) \"Average Cost\",\n", + " COUNT(d.HCPCS_Line_Procedure_Billed_Code) volume\n", + "FROM(\n", + " select COUNTY, STATE_CODE, HCPCS_Line_Procedure_Billed_Code, Total_Charge_Per_Line, Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group\n", + " from DEMO_HealthcareFWA.WC_SV1HEADER hd\n", + " inner join DEMO_HealthcareFWA.WC_SV1DETAIL dt on hd.Bill_ID = dt.Bill_ID\n", + " inner join DEMO_HealthcareFWA.wc_us_cities\n", + " on lower(hd.Billing_Provider_City) = lower(CITY)\n", + " where \n", + " STATE_CODE = 'TX'\n", + " AND (hd.Date_of_Bill between 20170000 and 20210000)\n", + " AND ((hd.First_ICD9_CM_Diagnosis_Code like 'M__%') OR (hd.Second_ICD9_CM_Diagnosis_Code like 'M__%')\n", + " OR (hd.Third_ICD9_CM_Diagnosis_Code like 'M__%') OR (hd.Fourth_ICD9_CM_Diagnosis_Code like 'M__%'))\n", + ") d\n", + "INNER JOIN (\n", + " SELECT \n", + " MIN(Total_Charge_Per_Line) as min_cost,\n", + " MAX(Total_Charge_Per_Line) as max_cost,\n", + " hcpcs_line_procedure_billed_code\n", + " FROM DEMO_HealthcareFWA.WC_MSK_PRC_GRP_FILTERED_BILLS\n", + " GROUP BY hcpcs_line_procedure_billed_code\n", + ") b\n", + "ON \n", + "d.HCPCS_Line_Procedure_Billed_Code = b.HCPCS_Line_Procedure_Billed_Code\n", + "AND (d.Total_Charge_Per_Line > b.min_cost AND \n", + " d.Total_Charge_Per_Line < b.max_cost)\n", + "INNER JOIN DEMO_HealthcareFWA.WC_MSK_PRC_GRP\n", + "ON REGEXP_SIMILAR(d.HCPCS_Line_Procedure_Billed_Code,CPT_HCPC_CODE) = 1\n", + "GROUP BY PRC_GRP, COUNTY, Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "e95d369f-0b24-49ea-b479-dcda893f1719", + "metadata": {}, + "source": [ + "
\n", + "4. Reporting tables for Diabetic Conditions\n", + "

Here we are creating reporting tables needed for the diabetic condition reporting. First we are creating some driving views which will limit our patient count. We are taking patients which have 90days duration between start and end of encounter.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "58ae1964-3749-4d01-bf0b-aacfa843d781", + "metadata": {}, + "outputs": [], + "source": [ + "Replace VIEW DEMO_USER.va_bk_v_PAT_ENC_LT_90D AS \n", + "SELECT \n", + " a.PATIENT,\n", + " a.ID ENCOUNTER,\n", + " ENCOUNTERCLASS,\n", + " CODE ENC_CD,\n", + " DESCRIPTION ENC_DESC,\n", + " CAST(SUBSTR(\"START\",0,11) AS DATE FORMAT 'YYYY-MM-DD') STRT_ENC,\n", + " CAST(SUBSTR(\"STOP\",0,11) AS DATE FORMAT 'YYYY-MM-DD') STOP_ENC,\n", + " (STOP_ENC-STRT_ENC) LOS_ENC,\n", + " PROVIDER,\n", + " ORGANIZATION\n", + "from DEMO_HealthcareFWA.va_encounters a \n", + "inner join DEMO_HealthcareFWA.va_bk_diab_pat_cnt b\n", + "on a.PATIENT = b.PATIENT\n", + "WHERE LOS_ENC<90\n", + ";" + ] + }, + { + "cell_type": "markdown", + "id": "36281cd4-46a8-423e-9672-fbd6386a0bc6", + "metadata": {}, + "source": [ + "

Next we are calculating the glycated hemoglobin (A1c) values for the patients.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "be6ca3a5-efec-42d8-a4a7-3875a4d03efb", + "metadata": {}, + "outputs": [], + "source": [ + "replace view demo_user.va_bk_v_a1c_enc as\n", + "sel b.PATIENT, ENCOUNTER, AVE(\"VALUE\") a1c\n", + "from DEMO_HealthcareFWA.va_observations a \n", + "inner join DEMO_HealthcareFWA.va_bk_diab_pat b \n", + "on a.PATIENT=b.PATIENT where code ='4548-4'\n", + "group by 1,2;" + ] + }, + { + "cell_type": "markdown", + "id": "e21c574f-bba5-4cfd-9195-872a04dfa214", + "metadata": {}, + "source": [ + "

Below is the driving view which holds the codes for diabetic procedures

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "853f020c-3e8a-4b9e-9941-94a5b4b0bf20", + "metadata": {}, + "outputs": [], + "source": [ + "REPLACE VIEW demo_user.va_bk_v_diabetes_codes AS \n", + "select distinct code, description, CAST (TRIM(mp.mapTarget) as VARCHAR(15)) Target\n", + " from (\n", + " Select distinct code, description from DEMO_HealthcareFWA.va_conditions\n", + " ) conds\n", + " inner join DEMO_HealthcareFWA.SNOMED_ICD_Map mp\n", + " on conds.code = cast(mp.referencedComponentId as BIGINT)\n", + " where Target like ANY ('V18%', '775%', 'V77%', '648%', '250%', '249%', 'P70%', 'Z83%',\n", + " 'O24%', 'Z13%', 'E11%', 'E08%', 'E10%', 'E09%', 'E13%', 'R80%', 'G53%','H54%');\n" + ] + }, + { + "cell_type": "markdown", + "id": "5aac4cc3-eaf0-40ad-86f6-8d4bcc5911a3", + "metadata": {}, + "source": [ + "

Below view gives the start date for patient having first diabetic encounter.\n", + "

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4ebc152a-5d81-469d-9cd8-600ad592600a", + "metadata": {}, + "outputs": [], + "source": [ + "REPLACE VIEW demo_user.va_bk_diab_strt AS\n", + "sel a.PATIENT, MIN(\"START\") STRT_DIAB \n", + "from DEMO_HealthcareFWA.va_bk_diab_pat a \n", + "inner join DEMO_HealthcareFWA.va_conditions b on a. PATIENT=b.PATIENT\n", + "inner join demo_user.va_bk_v_diabetes_codes c on b.CODE=c.CODE group by 1" + ] + }, + { + "cell_type": "markdown", + "id": "150872f0-e578-4b32-a85d-d3e474793e1d", + "metadata": {}, + "source": [ + "

Below view gives the days and a1c count per year for the patient.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51086513-3e41-49a1-a2bb-55095bb7201b", + "metadata": {}, + "outputs": [], + "source": [ + "Replace view demo_user.va_bk_v_a1c_per_yr as\n", + " sel PATIENT, a1c_per_yr from \n", + " (\n", + " sel \n", + " PATIENT, CAST(max_date-min_date as FLOAT) + 1.0 days,\n", + " days/365.0 years, Cast(cnt as FLOAT)/ CEILING(years) a1c_per_yr,\n", + " cnt\n", + " from (\n", + " sel \n", + " a.PATIENT,\n", + " min(STRT_ENC) min_date,\n", + " max(STRT_ENC) max_date,\n", + " count(a1c) cnt\n", + " from DEMO_USER.va_bk_v_PAT_ENC_LT_90D a \n", + " inner join DEMO_USER.va_bk_v_a1c_enc b \n", + " on a.PATIENT=b.PATIENT and a.ENCOUNTER=b.ENCOUNTER\n", + " group by 1\n", + " ) a\n", + " ) a" + ] + }, + { + "cell_type": "markdown", + "id": "c9dfc565-efbb-4ad0-8516-11c707c2444d", + "metadata": {}, + "source": [ + "

Below view holds the overall cost of each encounter the patient had along with its start and end dates.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8d8a8ec5-8d20-4c52-a7ba-b36402c0e93f", + "metadata": {}, + "outputs": [], + "source": [ + "REPLACE VIEW DEMO_USER.va_fr_v_ENC_COSTS AS (\n", + " SELECT patient, encounter_id, start_enc, stop_enc, SUM(cost) overall_cost\n", + " FROM(\n", + " SELECT \n", + " enc.patient as patient, ID as encounter_id,\n", + " CAST(SUBSTR(enc.\"START\",0,11) AS DATE FORMAT 'YYYY-MM-DD') start_enc,\n", + " CAST(SUBSTR(enc.STOP,0,11) AS DATE FORMAT 'YYYY-MM-DD') stop_enc, \n", + " CAST(total_claim_cost as decimal(18,2)) as enc_cost,\n", + " prc.base_cost as prc_cost,\n", + " imm.base_cost as imm_cost,\n", + " CAST(med.totalcost AS decimal(18,2))as med_cost,\n", + " enc_cost+prc_cost+imm_cost+med_cost as cost\n", + " FROM DEMO_HealthcareFWA.va_encounters enc\n", + " inner join DEMO_HealthcareFWA.va_bk_diab_pat_cnt b\n", + " on enc.PATIENT = b.PATIENT\n", + " LEFT JOIN DEMO_HealthcareFWA.va_procedures prc\n", + " ON enc.ID = prc.encounter\n", + " LEFT JOIN DEMO_HealthcareFWA.va_immunizations imm\n", + " ON enc.ID = imm.encounter\n", + " LEFT JOIN DEMO_HealthcareFWA.va_medications med\n", + " ON enc.ID = med.encounter\n", + " ) d\n", + " GROUP BY patient, encounter_id, start_enc, stop_enc\n", + ");" + ] + }, + { + "cell_type": "markdown", + "id": "cfbad0a0-40e2-4d4e-aed9-10f00ac2c205", + "metadata": {}, + "source": [ + "

Below table holds the providers for diabetic conditions. Also the total cost and total and average values of a1c test is also stored for each patient.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2f12fde-4439-4228-a808-a15fdfa8ff37", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.dbt_pathwys_prov as (\n", + "SELECT \n", + " h.ID as org_id, h.Name as org_name, \n", + " SUM(overall_cost) as \"Total Cost\",\n", + " ZEROIFNULL(AVG(e.cnt)) as \"Avg. HBA1C Tests\",\n", + " ZEROIFNULL(SUM(e.cnt)) as \"Total HBA1C Tests\"\n", + " FROM DEMO_USER.va_bk_v_PAT_ENC_LT_90D a\n", + "LEFT JOIN (\n", + " sel PATIENT, count(a1c) cnt\n", + " from DEMO_USER.va_bk_v_a1c_enc\n", + " group by 1\n", + ") e on a.PATIENT=e.PATIENT\n", + "INNER JOIN DEMO_HealthcareFWA.va_organizations h on a.Organization = h.ID\n", + "INNER JOIN DEMO_USER.va_fr_v_ENC_COSTS f on a.ENCOUNTER = f.encounter_id\n", + "GROUP BY h.ID, h.Name\n", + ")WITH DATA ;\n" + ] + }, + { + "cell_type": "markdown", + "id": "3551890c-cb63-490e-8cf2-5eb15a69ac96", + "metadata": {}, + "source": [ + "

Below table calculate the total procedure costs per group for diabetes procedures.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "196214ab-63ba-434e-a7d4-9ee86e11ba1c", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.Total_cost_for_procedure_groups_dbt as (\n", + "SELECT \"group\", cost\n", + "FROM(\n", + " SELECT\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code between '82943' and '82962' THEN Total_Charge_Per_Line ELSE 0 END) as \"Glucose Testing\",\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code between '85004' and '85049' THEN Total_Charge_Per_Line ELSE 0 END) as \"Blood Counts\",\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code between '36400' and '36425' THEN Total_Charge_Per_Line ELSE 0 END) as \"Phlebotomy\",\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code between '11042' and '11047' THEN Total_Charge_Per_Line ELSE 0 END) as \"Removal of Infected/Devitalized Tissue\",\n", + " SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code between '93000' and '93010' THEN Total_Charge_Per_Line ELSE 0 END) as \"Electrocardiogram\"\n", + " FROM(\n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, Total_Charge_Per_Line, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " FROM DEMO_HealthcareFWA.WC_SV1_DBT\n", + "\n", + " UNION ALL\n", + "\n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Total_Charge_Per_Line as FLOAT), CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " FROM DEMO_HealthcareFWA.WC_SV2_DBT\n", + " ) d\n", + ") d\n", + "UNPIVOT EXCLUDE NULLS (cost FOR \"group\" in (\"Glucose Testing\", \"Blood Counts\", \"Phlebotomy\", \"Removal of Infected/Devitalized Tissue\",\n", + " \"Electrocardiogram\")) tmp\n", + " ) WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "2bb31e98-710a-46c0-9c73-059a689aaae9", + "metadata": {}, + "source": [ + "

Below table calculate the total procedure costs for diabetes procedures.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25ae919a-415a-403f-aa7f-e16d106a5c98", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.Total_cost_for_procedures_dbt as (\n", + "SELECT\n", + " RANK() OVER (ORDER BY TOTAL_COST DESC) as COST_RANK,\n", + " CAST(Description AS VARCHAR(45)) as \"Procedure\", TOTAL_COST\n", + "FROM (\n", + " select \n", + " COALESCE(\"Sub_Category\",\"SHORT DESCRIPTION\") as Description, \n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as TOTAL_COST\n", + " FROM (\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1_DBT\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL\n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2_DBT\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL\n", + " ) d\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_CPT_Coding_temp\n", + " ON\n", + " (HCPCS_Line_Procedure_Billed_Code BETWEEN \"FROM\" AND COALESCE(\"TO\",\"FROM\")) AND\n", + " (LENGTH(HCPCS_Line_Procedure_Billed_Code) = LENGTH(\"FROM\"))\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_HCPCS_Coding\n", + " ON HCPCS_Line_Procedure_Billed_Code = HCPC\n", + " GROUP BY Description\n", + ") d\n", + "QUALIFY COST_RANK <= 10\n", + ") WITH DATA ;" + ] + }, + { + "cell_type": "markdown", + "id": "c84c2cf0-e4c6-449e-a28f-2c853f6023d8", + "metadata": {}, + "source": [ + "

Below table calculate and bin the patient volume in various a1c count group.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dec6281d-3187-4392-95eb-b56610531636", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.Hemoglobin_count_dbt as (\n", + "SELECT \n", + " CASE \n", + " WHEN A1C_COUNT = 1 THEN '1'\n", + " WHEN A1C_COUNT = 2 THEN '2'\n", + " WHEN A1C_COUNT = 3 THEN '3'\n", + " WHEN A1C_COUNT = 4 THEN '4'\n", + " ELSE '5+'\n", + " END AS HBA1C_COUNT, COUNT(patient_identifier) as Patient_Count\n", + "FROM (\n", + " SELECT\n", + " d.patient_identifier, COUNT(HCPCS_Line_Procedure_Billed_Code) as A1C_COUNT\n", + " FROM (\n", + " SELECT\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " FROM DEMO_HealthcareFWA.WC_SV1HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV1DETAIL det\n", + " ON hd.Bill_ID = det.Bill_ID\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL\n", + "\n", + " UNION ALL\n", + "\n", + " SELECT\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " FROM DEMO_HealthcareFWA.WC_SV2HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV2DETAIL det\n", + " ON hd.Bill_ID = det.Bill_ID\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL\n", + " ) d\n", + " INNER JOIN (\n", + " SELECT DISTINCT patient_identifier\n", + " FROM (\n", + " SELECT (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier\n", + " FROM DEMO_HealthcareFWA.WC_SV1_DBT\n", + "\n", + " UNION ALL\n", + "\n", + " SELECT (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier\n", + " FROM DEMO_HealthcareFWA.WC_SV2_DBT \n", + " ) d\n", + " ) a\n", + " ON d.patient_identifier = a.patient_identifier\n", + " INNER JOIN DEMO_HealthcareFWA.WC_DBT_PRC_DESC\n", + " ON HCPCS_Line_Procedure_Billed_Code = PRC\n", + " WHERE DESCRIPTION = 'Hemoglobin A1c Test'\n", + " GROUP BY d.patient_identifier\n", + ") d\n", + "GROUP BY HBA1C_COUNT\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "1de8cd18-4473-447f-ba41-d67050c2f593", + "metadata": {}, + "source": [ + "

Below table gives facilities information.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ce0e5029-f4cc-4c02-8932-93d672580f43", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.Total_cost_for_facilities_dbt as (\n", + "SELECT \n", + " RANK() OVER (ORDER BY COST DESC) as COST_RANK, d.Billing_Provider_FEIN,\n", + " Facility_Name, Billing_Provider_First_Name, Billing_Provider_Last_Name_or_Group, COST\n", + "FROM\n", + "(\n", + " SELECT Billing_Provider_FEIN, CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as COST\n", + " FROM (\n", + " select \n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1_DBT\n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2_DBT\n", + " ) d\n", + " GROUP BY Billing_Provider_FEIN\n", + ") d\n", + "LEFT JOIN DEMO_HealthcareFWA.WC_PROVIDER_LOOKUP lu\n", + "ON lu.Billing_Provider_FEIN = d.Billing_Provider_FEIN\n", + "QUALIFY COST_RANK <= 10\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "17337e02-791c-4fcc-b069-b24c5aa7d306", + "metadata": {}, + "source": [ + "

In the table below, we are calculating total cost and volume of patients having diabetes conditions grouped by procedure and procedure group.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "045927d9-56c2-4235-ab0a-2ede9c33a476", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.dbt_drilldown_proc_grp_procedures as (\n", + "SELECT\n", + " PRC_GRP, Proc, Cost, Volume\n", + "FROM (\n", + " select\n", + " PRC_GRP,\n", + " COALESCE(Description,HCPCS_Line_Procedure_Billed_Code) as Proc,\n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as Cost,\n", + " SUM(CASE WHEN Total_Charge_Per_Line is NULL THEN 0 ELSE 1 END) as Volume\n", + " FROM DEMO_HealthcareFWA.WC_DBT_PRC_GRP_FILTERED_BILLS d\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_DBT_PRC_DESC\n", + " ON HCPCS_Line_Procedure_Billed_Code = PRC\n", + " GROUP BY PRC_GRP, Proc\n", + ") d\n", + "QUALIFY RANK() OVER (PARTITION BY PRC_GRP ORDER BY Cost DESC) <= 30\n", + "\n", + "UNION ALL\n", + "\n", + "SELECT\n", + " DRUG_GRP, Drug, Cost, Volume\n", + "FROM (\n", + " select\n", + " DRUG_GRP,\n", + " COALESCE(DESCRIPTION,NDC_Billed_Code) as Drug,\n", + " CAST(SUM(Total_Amount_Paid_Per_Line) AS DECIMAL(20,2)) as Cost,\n", + " SUM(CASE WHEN Total_Amount_Paid_Per_Line is NULL THEN 0 ELSE 1 END) as Volume\n", + " FROM DEMO_HealthcareFWA.WC_DBT_DRUG_GRP_FILTERED_BILLS d\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_DBT_DRUG_DESC\n", + " ON NDC_Billed_Code = NDC_Code\n", + " GROUP BY DRUG_GRP, Drug\n", + ") d\n", + "QUALIFY RANK() OVER (PARTITION BY DRUG_GRP ORDER BY Cost DESC) <= 30\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "7bcad3c3-8375-4421-8351-9f0b64deb293", + "metadata": {}, + "source": [ + "

In the table below, we are calculating total, average, min and max cost and volume of patients having diabetes conditions.

\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1e90628d-fd10-47f7-9792-563db62c152f", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.dbt_drilldown_proc_groups as (\n", + "SELECT\n", + " PRC_GRP as \"Procedure/Treatment Group\", \n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Total Cost\",\n", + " SUM(CASE WHEN Total_Charge_Per_Line is NULL THEN 0 ELSE 1 END) as Volume,\n", + " CAST(AVG(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Average Cost\",\n", + " CAST(MIN(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Min Cost\",\n", + " CAST(MAX(Total_Charge_Per_Line) AS DECIMAL(20,2)) as \"Max Cost\",\n", + " COUNT(DISTINCT CASE WHEN Total_Charge_Per_Line is NULL THEN NULL ELSE patient_identifier END) as \"No. of Patients\"\n", + "FROM DEMO_HealthcareFWA.WC_DBT_PRC_GRP_FILTERED_BILLS\n", + "WHERE PRC_GRP <> 'Supervised Modalities'\n", + "GROUP BY \"Procedure/Treatment Group\"\n", + "\n", + "UNION ALL\n", + "\n", + "SELECT\n", + " DRUG_GRP as \"Procedure/Treatment Group\", \n", + " CAST(SUM(Total_Amount_Paid_Per_Line) AS DECIMAL(20,2)) as \"Total Cost\",\n", + " SUM(CASE WHEN Total_Amount_Paid_Per_Line is NULL THEN 0 ELSE 1 END) as Volume,\n", + " CAST(AVG(Total_Amount_Paid_Per_Line) AS DECIMAL(20,2)) as \"Average Cost\",\n", + " CAST(MIN(Total_Amount_Paid_Per_Line) AS DECIMAL(20,2)) as \"Min Cost\",\n", + " CAST(MAX(Total_Amount_Paid_Per_Line) AS DECIMAL(20,2)) as \"Max Cost\",\n", + " COUNT(DISTINCT CASE WHEN Total_Amount_Paid_Per_Line is NULL THEN NULL ELSE patient_identifier END) as \"No. of Patients\"\n", + "FROM DEMO_HealthcareFWA.WC_DBT_DRUG_GRP_FILTERED_BILLS\n", + "GROUP BY \"Procedure/Treatment Group\"\n", + " ) WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "2f6e5a0f-4b00-4d9b-886a-895451d6b5e8", + "metadata": {}, + "source": [ + "

In the table below, we are calculating average cost of procedure per county based on the city provided in the billing information.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dc82adbb-6ab8-4203-bd38-ac3351b549dd", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.dbt_drilldown_proc_grp_counties as (\n", + "SELECT PRC_GRP as prc_grp,\n", + " county, \n", + " AVG(Total_Charge_Per_Line) as avg_costs\n", + "FROM(\n", + " select COUNTY as county, STATE_CODE, HCPCS_Line_Procedure_Billed_Code, Total_Charge_Per_Line\n", + " from DEMO_HealthcareFWA.WC_SV1HEADER hd\n", + " inner join DEMO_HealthcareFWA.WC_SV1DETAIL dt on hd.Bill_ID = dt.Bill_ID\n", + " inner join DEMO_HealthcareFWA.wc_us_cities\n", + " on lower(hd.Billing_Provider_City) = lower(CITY)\n", + " INNER JOIN (\n", + " SELECT DISTINCT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM (\n", + " SELECT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM DEMO_HealthcareFWA.WC_SV1_DBT\n", + "\n", + " UNION ALL\n", + "\n", + " SELECT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM DEMO_HealthcareFWA.WC_SV2_DBT \n", + " ) v\n", + " ) a\n", + " ON \n", + " hd.Claim_Administrator_Claim_Number = a.Claim_Administrator_Claim_Number AND \n", + " hd.Insurer_FEIN = a.Insurer_FEIN\n", + " where STATE_CODE = 'TX' AND (hd.Date_of_Bill between 20170000 and 20210000)\n", + ") d\n", + "INNER JOIN (\n", + " SELECT \n", + " MIN(Total_Charge_Per_Line) as min_cost,\n", + " MAX(Total_Charge_Per_Line) as max_cost,\n", + " hcpcs_line_procedure_billed_code\n", + " FROM DEMO_HealthcareFWA.WC_DBT_PRC_GRP_FILTERED_BILLS\n", + " GROUP BY hcpcs_line_procedure_billed_code\n", + ") b\n", + "ON \n", + " d.HCPCS_Line_Procedure_Billed_Code = b.HCPCS_Line_Procedure_Billed_Code\n", + " AND (d.Total_Charge_Per_Line > b.min_cost AND \n", + " d.Total_Charge_Per_Line < b.max_cost)\n", + "INNER JOIN DEMO_HealthcareFWA.WC_DBT_PRC_GRP\n", + "ON REGEXP_SIMILAR(d.HCPCS_Line_Procedure_Billed_Code,CPT_HCPC_CODE) = 1\n", + "GROUP BY COUNTY,PRC_GRP\n", + "HAVING AVG_COSTS is NOT NULL\n", + "\n", + "UNION ALL\n", + "\n", + "SELECT DRUG_GRP as prc_grp,\n", + " county, \n", + " AVG(Total_Amount_Paid_Per_Line) as avg_costs\n", + "FROM(\n", + " SELECT COUNTY as county, STATE_CODE, NDC_Billed_Code, Total_Amount_Paid_Per_Line\n", + " FROM DEMO_HealthcareFWA.WC_SV4HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV4DETAIL dt \n", + " ON hd.Bill_ID = dt.Bill_ID\n", + " INNER JOIN wc_us_cities\n", + " ON lower(hd.Billing_Provider_City) = lower(CITY)\n", + " INNER JOIN (\n", + " SELECT DISTINCT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM (\n", + " SELECT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM DEMO_HealthcareFWA.WC_SV1_DBT\n", + "\n", + " UNION ALL\n", + "\n", + " SELECT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM DEMO_HealthcareFWA.WC_SV2_DBT \n", + " ) v\n", + " ) a\n", + " ON \n", + " hd.Claim_Administrator_Claim_Number = a.Claim_Administrator_Claim_Number AND \n", + " hd.Insurer_FEIN = a.Insurer_FEIN\n", + " where STATE_CODE = 'TX'\n", + ") d\n", + "INNER JOIN (\n", + " SELECT \n", + " MIN(Total_Amount_Paid_Per_Line) as min_cost,\n", + " MAX(Total_Amount_Paid_Per_Line) as max_cost,\n", + " ndc_billed_code\n", + " FROM DEMO_HealthcareFWA.WC_DBT_DRUG_GRP_FILTERED_BILLS\n", + " GROUP BY ndc_billed_code\n", + ") b\n", + "ON \n", + " d.ndc_billed_code = b.ndc_billed_code\n", + " AND (d.Total_Amount_Paid_Per_Line > b.min_cost AND \n", + " d.Total_Amount_Paid_Per_Line < b.max_cost)\n", + "INNER JOIN DEMO_HealthcareFWA.WC_DBT_DRUG_DESC dsc\n", + "ON d.NDC_Billed_Code = dsc.NDC_Code\n", + "INNER JOIN DEMO_HealthcareFWA.WC_DBT_DRUG_GRP grp\n", + "ON dsc.DESCRIPTION = grp.DESCRIPTION\n", + "GROUP BY COUNTY,DRUG_GRP\n", + "HAVING AVG_COSTS is NOT NULL\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "4e1666aa-a9e3-4cc8-8c14-93a66f820696", + "metadata": {}, + "source": [ + "

Table below gives provider details.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cd3e4c95-cf33-4f7f-83af-07c2f30fad1c", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.dbt_drilldown_proc_grp_provs as (\n", + "SELECT \n", + " PRC_GRP, COUNTY,Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group, AVG(Total_Charge_Per_Line) \"Average Cost\", COUNT(d.HCPCS_Line_Procedure_Billed_Code) volume\n", + " FROM(\n", + " SELECT COUNTY, STATE_CODE, HCPCS_Line_Procedure_Billed_Code, Total_Charge_Per_Line, Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group\n", + " FROM DEMO_HealthcareFWA.WC_SV1HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV1DETAIL dt \n", + " ON hd.Bill_ID = dt.Bill_ID\n", + " INNER JOIN DEMO_HealthcareFWA.wc_us_cities\n", + " ON lower(hd.Billing_Provider_City) = lower(CITY)\n", + " INNER JOIN (\n", + " SELECT DISTINCT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM (\n", + " SELECT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM DEMO_HealthcareFWA.WC_SV1_DBT\n", + " \n", + " UNION ALL\n", + " \n", + " SELECT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM DEMO_HealthcareFWA.WC_SV2_DBT\n", + " ) v\n", + " ) a\n", + " ON \n", + " hd.Claim_Administrator_Claim_Number = a.Claim_Administrator_Claim_Number AND \n", + " hd.Insurer_FEIN = a.Insurer_FEIN\n", + " WHERE STATE_CODE = 'TX'\n", + " ) d\n", + " INNER JOIN (\n", + " SELECT \n", + " MIN(Total_Charge_Per_Line) as min_cost,\n", + " MAX(Total_Charge_Per_Line) as max_cost,\n", + " hcpcs_line_procedure_billed_code\n", + " FROM DEMO_HealthcareFWA.WC_DBT_PRC_GRP_FILTERED_BILLS\n", + " GROUP BY hcpcs_line_procedure_billed_code\n", + " ) b\n", + " ON \n", + " d.HCPCS_Line_Procedure_Billed_Code = b.HCPCS_Line_Procedure_Billed_Code\n", + " AND (d.Total_Charge_Per_Line > b.min_cost AND \n", + " d.Total_Charge_Per_Line < b.max_cost)\n", + " INNER JOIN DEMO_HealthcareFWA.WC_DBT_PRC_GRP\n", + " ON REGEXP_SIMILAR(d.HCPCS_Line_Procedure_Billed_Code,CPT_HCPC_CODE) = 1\n", + " GROUP BY Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group,PRC_GRP,COUNTY\n", + " \n", + " UNION ALL \n", + " \n", + " SELECT\n", + " DRUG_GRP as PRC_GRP, COUNTY,Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group,\n", + " AVG(Total_Amount_Paid_Per_Line) \"Average Cost\",\n", + " COUNT(d.NDC_Billed_Code) volume\n", + " FROM(\n", + " SELECT COUNTY, STATE_CODE, NDC_Billed_Code, Total_Amount_Paid_Per_Line, Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group\n", + " FROM DEMO_HealthcareFWA.WC_SV4HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV4DETAIL dt \n", + " ON hd.Bill_ID = dt.Bill_ID\n", + " INNER JOIN DEMO_HealthcareFWA.wc_us_cities\n", + " ON lower(hd.Billing_Provider_City) = lower(CITY)\n", + " INNER JOIN (\n", + " SELECT DISTINCT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM (\n", + " SELECT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM DEMO_HealthcareFWA.WC_SV1_DBT\n", + " \n", + " UNION ALL\n", + " \n", + " SELECT Claim_Administrator_Claim_Number, Insurer_FEIN\n", + " FROM DEMO_HealthcareFWA.WC_SV2_DBT\n", + " ) v\n", + " ) a\n", + " ON \n", + " hd.Claim_Administrator_Claim_Number = a.Claim_Administrator_Claim_Number AND \n", + " hd.Insurer_FEIN = a.Insurer_FEIN\n", + " WHERE STATE_CODE = 'TX'\n", + " ) d\n", + " INNER JOIN (\n", + " SELECT \n", + " MIN(Total_Amount_Paid_Per_Line) as min_cost,\n", + " MAX(Total_Amount_Paid_Per_Line) as max_cost,\n", + " ndc_billed_code\n", + " FROM DEMO_HealthcareFWA.WC_DBT_DRUG_GRP_FILTERED_BILLS\n", + " GROUP BY ndc_billed_code\n", + " ) b\n", + " ON \n", + " d.ndc_billed_code = b.ndc_billed_code\n", + " AND (d.Total_Amount_Paid_Per_Line > b.min_cost AND \n", + " d.Total_Amount_Paid_Per_Line < b.max_cost)\n", + " \n", + " INNER JOIN DEMO_HealthcareFWA.WC_DBT_DRUG_DESC dsc\n", + " ON d.NDC_Billed_Code = dsc.NDC_Code\n", + " INNER JOIN DEMO_HealthcareFWA.WC_DBT_DRUG_GRP grp\n", + " ON dsc.DESCRIPTION = grp.DESCRIPTION\n", + " GROUP BY Billing_Provider_FEIN, Billing_Provider_Last_Name_or_Group, DRUG_GRP,COUNTY\n", + " ) WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "76c8d729-9142-4601-8277-a684a6f2e7d0", + "metadata": {}, + "source": [ + "

Below view list the patient and condition start date.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "71a38b8e-ce1c-4132-ae44-9cf748edeea0", + "metadata": {}, + "outputs": [], + "source": [ + "REPLACE VIEW demo_user.va_bk_v_sel_hrt_rnl AS \n", + " sel distinct \n", + " PATIENT, CODE COND_CD, encounter, CAST(SUBSTR(\"START\",0,11) AS DATE FORMAT 'YYYY-MM-DD') COND_DT,\n", + " DESCRIPTION COND \n", + " from DEMO_HealthcareFWA.va_conditions \n", + " where code in (433144002,88805009,53741008,84114007,127013003)" + ] + }, + { + "cell_type": "markdown", + "id": "f71b0dc4-dae1-4e11-bb59-3dc51bc05bdd", + "metadata": {}, + "source": [ + "

Below view calculate the cost of encounters in last 90 days.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5d51b04a-4aa8-4d61-907d-ae4f42e78568", + "metadata": {}, + "outputs": [], + "source": [ + "REPLACE VIEW DEMO_USER.va_fr_v_ENC_COSTS AS (\n", + " SELECT patient, encounter_id, start_enc, stop_enc, SUM(cost) overall_cost\n", + " FROM(\n", + " SELECT \n", + " enc.patient as patient, ID as encounter_id,\n", + " CAST(SUBSTR(enc.\"START\",0,11) AS DATE FORMAT 'YYYY-MM-DD') start_enc,\n", + " CAST(SUBSTR(enc.STOP,0,11) AS DATE FORMAT 'YYYY-MM-DD') stop_enc, \n", + " CAST(total_claim_cost as decimal(18,2)) as enc_cost,\n", + " prc.base_cost as prc_cost,\n", + " imm.base_cost as imm_cost,\n", + " CAST(med.totalcost AS decimal(18,2))as med_cost,\n", + " enc_cost+prc_cost+imm_cost+med_cost as cost\n", + " \n", + " FROM DEMO_HealthcareFWA.va_encounters enc\n", + " inner join DEMO_HealthcareFWA.va_bk_diab_pat_cnt b\n", + " on enc.PATIENT = b.PATIENT\n", + " LEFT JOIN DEMO_HealthcareFWA.va_procedures prc\n", + " ON enc.ID = prc.encounter\n", + " LEFT JOIN DEMO_HealthcareFWA.va_immunizations imm\n", + " ON enc.ID = imm.encounter\n", + " LEFT JOIN DEMO_HealthcareFWA.va_medications med\n", + " ON enc.ID = med.encounter\n", + " ) d\n", + "GROUP BY patient, encounter_id, start_enc, stop_enc\n", + ");" + ] + }, + { + "cell_type": "markdown", + "id": "0ff6b059-2af1-4bc7-8c3a-bec4aac1e1f6", + "metadata": {}, + "source": [ + "

In the table below we are calculating the path of procedures taken by a diabetic patient with cost of each procedure , a1c count as well as overall cost of all procedures.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a55a77a1-c60d-44ac-af69-7f910dcf3f42", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.dbt_pathways as (\n", + "SELECT \n", + " TRIM (BOTH FROM REGEXP_REPLACE(patient, '[\\[\\]]', '', 1, 0, 'c')) as patient_identifier,\n", + " COND || ', '|| REGEXP_REPLACE(path, '[\\[\\]]+', '', 1, 0, 'c') AS path,\n", + " cond, cond_dt,\n", + " last_enc,\n", + " a1c_val, a1c_per_yr, \n", + " (LAST_ENC-COND_DT)/365 num_yrs,\n", + " length,\n", + " '0,' || REGEXP_REPLACE(path_cost, '[\\[\\]\\s]+', '', 1, 0, 'c') as path_cost,\n", + " 'Start,' || REGEXP_REPLACE(provider_id, '[\\[\\]\\s]+', '', 1, 0, 'c') AS provider_id\n", + "FROM nPath (\n", + "ON ( \n", + " sel \n", + " a.PATIENT, ENCOUNTERCLASS, ENC_DESC, STRT_ENC,\n", + " COND, COND_DT, STRT_DIAB,\n", + " LAST_VALUE(STRT_ENC) OVER (PARTITION BY a.PATIENT ORDER BY STRT_ENC) LST_ENC,\n", + " COALESCE(a1c, 0.0) a1c_val, COALESCE(a1c_per_yr, 0.0) a1c_per_yr, overall_cost,\n", + " h.Name as prov_org, h.ID as prov_org_id\n", + " from demo_user.va_fr_v_PAT_ENC_LT_90D a\n", + " inner join (\n", + " sel * from DEMO_HealthcareFWA.va_bk_diab_pat_cnt\n", + " ) b on a.PATIENT=b.PATIENT\n", + " inner join DEMO_user.va_bk_diab_strt c on a.PATIENT=c.PATIENT\n", + " inner join DEMO_user.va_bk_v_sel_hrt_rnl x on a.PATIENT=x.PATIENT\n", + " left join DEMO_user.va_bk_v_a1c_enc d on a.PATIENT=d.PATIENT and a.ENCOUNTER=d.ENCOUNTER\n", + " inner join DEMO_user.va_bk_v_a1c_per_yr e on a.PATIENT=e.PATIENT\n", + " inner join DEMO_user.va_fr_v_ENC_COSTS f on a.ENCOUNTER = f.encounter_id\n", + " inner join DEMO_HealthcareFWA.va_providers g on a.PROVIDER = g.ID\n", + " inner join DEMO_HealthcareFWA.va_organizations h on g.Organization = h.ID\n", + " where \n", + " lower(ENCOUNTERCLASS) not like all ('wellness', 'ambulatory')\n", + " AND STRT_ENC < ADD_MONTHS(COND_DT, 5*12)\n", + ")\n", + "PARTITION BY a.PATIENT, COND\n", + "ORDER BY STRT_ENC\n", + "USING\n", + "Mode (nonoverlapping)\n", + "Pattern ('A+')\n", + "Symbols (\n", + " STRT_ENC > COND_DT AS A\n", + ")\n", + "Result (\n", + " \n", + " FIRST (PATIENT OF A) AS patient,\n", + " LAST (STRT_ENC OF A) AS last_enc,\n", + " FIRST (COND_DT OF A) AS cond_dt,\n", + " FIRST (COND OF A) AS cond, \n", + " AVE (a1c_val OF A) AS a1c_val,\n", + " FIRST (a1c_per_yr OF A) AS a1c_per_yr,\n", + " ACCUMULATE (CAST (ENC_DESC AS VARCHAR(40)) OF A) AS path,\n", + " COUNT(* of A) as length,\n", + " ACCUMULATE(overall_cost OF A) as path_cost,\n", + " ACCUMULATE(prov_org_id OF A) as provider_id\n", + ")\n", + ") p\n", + " ) WITH DATA; " + ] + }, + { + "cell_type": "markdown", + "id": "30a1fca5-e6d7-484f-8f74-78d04ab49fb8", + "metadata": {}, + "source": [ + "
\n", + "5. Reporting tables for Overall Summary\n", + "

Here we are creating reporting tables needed for the overall reporting. The table below list the cost of each chapter i.e MSK(musculoskeletal), DBT (Diabetic) and ALL.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a382b7f-bfd5-46df-8732-861193acb068", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.chapter_summary as (\n", + "select \n", + " COUNT(DISTINCT patient_identifier) as patients,\n", + " SUM(Total_Charge_Per_Line) as costs,\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[1-4]','c') = 1 THEN 1 ELSE 0 END) pt_visits,\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9894[0-4]','c') = 1 THEN 1 ELSE 0 END) chiro_trts,\n", + " 'MSK' as label\n", + "from (\n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier, Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code\n", + " FROM DEMO_HealthcareFWA.WC_SV1_MSK\n", + " UNION ALL\n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier, CAST(Total_Charge_Per_Line AS FLOAT),\n", + " HCPCS_Line_Procedure_Billed_Code\n", + " FROM DEMO_HealthcareFWA.WC_SV2_MSK \n", + ") d\n", + "\n", + "UNION ALL\n", + "\n", + "select \n", + " COUNT(DISTINCT patient_identifier) as patients,\n", + " SUM(Total_Charge_Per_Line) as costs,\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[1-4]','c') = 1 THEN 1 ELSE 0 END) pt_visits,\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9894[0-4]','c') = 1 THEN 1 ELSE 0 END) chiro_trts,\n", + " 'DBT' as label\n", + "from (\n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier, Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code\n", + " FROM DEMO_HealthcareFWA.WC_SV1_DBT\n", + " \n", + " UNION ALL\n", + " \n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier, CAST(Total_Charge_Per_Line AS FLOAT),\n", + " HCPCS_Line_Procedure_Billed_Code\n", + " FROM DEMO_HealthcareFWA.WC_SV2_DBT \n", + ") db\n", + "\n", + "\n", + "UNION ALL\n", + "\n", + "select \n", + " COUNT(DISTINCT patient_identifier) as PATIENTS,\n", + " SUM(Total_Charge_Per_Line) as COSTS,\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[1-4]','c') = 1 THEN 1 ELSE 0 END) pt_visits,\n", + " SUM(CASE WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9894[0-4]','c') = 1 THEN 1 ELSE 0 END) chiro_trts,\n", + " 'ALL'\n", + "from (\n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier, Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code\n", + " FROM DEMO_HealthcareFWA.WC_SV1HEADER head\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV1DETAIL det\n", + " on head.Bill_ID = det.Bill_ID\n", + " WHERE Date_of_Bill between 20170000 and 20210000\n", + " \n", + " UNION ALL\n", + " \n", + " SELECT \n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier, CAST(Total_Charge_Per_Line AS FLOAT),\n", + " HCPCS_Line_Procedure_Billed_Code\n", + " FROM DEMO_HealthcareFWA.WC_SV2HEADER head\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV2DETAIL det\n", + " on head.Bill_ID = det.Bill_ID\n", + " WHERE Date_of_Bill between 20170000 and 20210000\n", + ") d\n", + ") WITH DATA; " + ] + }, + { + "cell_type": "markdown", + "id": "0e99838e-f465-4d2c-98f9-11148602a780", + "metadata": {}, + "source": [ + "

Below table list the volume and cost of procedures calculated from billing data.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15b6f667-6427-4915-a82e-fbe3165320c4", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.overview_chapters as (\n", + "SELECT\n", + " RANK() OVER (ORDER BY COST DESC) as cost_rank,\n", + " chapter,\n", + " cost,\n", + " volume\n", + "FROM (\n", + " select \n", + " DESCRIPTION as chapter,\n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as cost,\n", + " COUNT(*) AS volume\n", + " FROM (\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " First_ICD9_CM_Diagnosis_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV1DETAIL det\n", + " ON hd.Bill_ID = det.Bill_ID\n", + " WHERE First_ICD9_CM_Diagnosis_Code is not NULL \n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " First_ICD9_CM_Diagnosis_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV2DETAIL det\n", + " ON hd.Bill_ID = det.Bill_ID\n", + " WHERE First_ICD9_CM_Diagnosis_Code is not NULL \n", + " ) d\n", + " INNER JOIN DEMO_HealthcareFWA.WC_MSK_DIAG_CHP\n", + " ON CAST(First_ICD9_CM_Diagnosis_Code AS CHAR(3)) BETWEEN D_FROM and D_TO\n", + " GROUP BY chapter\n", + ") d\n", + "WHERE \n", + " chapter not like 'Factors Influencing Health Status' AND \n", + " chapter not like 'Symptoms, Signs and Clinical Findings'\n", + "QUALIFY cost_rank <= 5\n", + " ) WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "4d0f0b54-074a-4beb-b5a9-2a8d568974e1", + "metadata": {}, + "source": [ + "

Below table list the information of all the procedures.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b29c4e82-9ca7-408c-a6e3-e53664031232", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.overview_procedures as (\n", + "SELECT\n", + " RANK() OVER (ORDER BY TOTAL_COST DESC) as cost_rank,\n", + " CAST(\"procedure\" AS VARCHAR(45)) as \"procedure\", total_cost\n", + "FROM (\n", + " select \n", + " COALESCE(\"Sub_Category\",\"SHORT DESCRIPTION\") as \"procedure\", \n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as total_cost\n", + " FROM (\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV1DETAIL det\n", + " ON hd.Bill_ID = det.Bill_ID\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL \n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV2DETAIL det\n", + " ON hd.Bill_ID = det.Bill_ID\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL \n", + " ) d\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_CPT_Coding_temp\n", + " ON\n", + " (HCPCS_Line_Procedure_Billed_Code BETWEEN \"FROM\" AND COALESCE(\"TO\",\"FROM\")) AND\n", + " (LENGTH(HCPCS_Line_Procedure_Billed_Code) = LENGTH(\"FROM\"))\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_HCPCS_Coding\n", + " ON HCPCS_Line_Procedure_Billed_Code = HCPC\n", + " GROUP BY \"procedure\"\n", + ") d\n", + "QUALIFY cost_rank <= 20\n", + " ) WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "2b0dc06d-c2f7-4b53-bf9b-146831ed3b98", + "metadata": {}, + "source": [ + "

Below table list the provider details.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "783e5cfc-0c08-442c-9033-d2fa4cf2b099", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.overview_providers as (\n", + "SELECT\n", + " RANK() OVER (ORDER BY COST DESC) as cost_rank, d.Billing_Provider_FEIN as provider_fein,\n", + " coalesce(Facility_Name,Billing_Provider_Last_Name_or_Group) as facility_name,\n", + " Billing_Provider_First_Name as provider_first_name, Billing_Provider_Last_Name_or_Group as provider_group, cost\n", + "FROM\n", + "(\n", + " SELECT \n", + " Billing_Provider_FEIN,\n", + " CAST(AVG(Total_Charge_Per_Line) AS DECIMAL(20,2)) as cost\n", + " FROM (\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " Billing_Provider_FEIN, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV1DETAIL det\n", + " ON hd.Bill_ID = det.Bill_ID\n", + " WHERE (Date_of_Bill between 20170000 and 20210000)\n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2HEADER hd\n", + " INNER JOIN DEMO_HealthcareFWA.WC_SV2DETAIL det\n", + " ON hd.Bill_ID = det.Bill_ID\n", + " WHERE (Date_of_Bill between 20170000 and 20210000)\n", + " ) d\n", + " GROUP BY Billing_Provider_FEIN\n", + ") d\n", + "LEFT JOIN DEMO_HealthcareFWA.WC_PROVIDER_LOOKUP lu\n", + "ON lu.Billing_Provider_FEIN = d.Billing_Provider_FEIN\n", + "QUALIFY COST_RANK <= 20\n", + " ) WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "311ddf33-3612-4da9-806f-f83f861c1293", + "metadata": {}, + "source": [ + "
\n", + "5. Reporting tables for Maternity Conditions\n", + "

Here we are creating reporting tables needed for the maternity condition reporting. Below table lists the infomation on the procedure groups.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7d9d54ce-842d-4e88-b9bc-4d77ce948012", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.mat_proc_grps as (\n", + "SELECT\n", + " CASE \n", + " WHEN (chapter in ('O82', 'Z38.01', 'Z38,62', 'Z38.64', 'Z38.66', 'Z38.31', 'Z38.69','740') OR \n", + " HCPCS_Line_Procedure_Billed_Code in ('59510','59514','59515')) OR \n", + " ICD9_CM_Principal_Procedure_Code in ('740','741','742','744','749','7499') THEN 'Cesarean Delivery'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('99291','99292') then 'Neonatal Critical Care'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('82105') then 'Alpha Fetoprotein'\n", + " END as treatment, SUM(Total_Charge_Per_Line) total_cost, COUNT(DISTINCT patient_identifier) patients, (total_cost/patients) avg_cost\n", + "FROM (\n", + " SELECT *\n", + " FROM (\n", + " select\n", + " (Claim_Administrator_Claim_Number || Insurer_FEIN) as patient_identifier, HCPCS_Line_Procedure_Billed_Code, 'NULL' as ICD9_CM_Principal_Procedure_Code,\n", + " First_ICD9_CM_Diagnosis_Code as chp_1, Second_ICD9_CM_Diagnosis_Code as chp_2,\n", + " Third_ICD9_CM_Diagnosis_Code as chp_3, Fourth_ICD9_CM_Diagnosis_Code as chp_4,\n", + " Fifth_ICD9_CM_Diagnosis_Code as chp_5, Total_Charge_Per_Line\n", + " from DEMO_HealthcareFWA.WC_SV1_MAT\n", + "\n", + " UNION ALL\n", + "\n", + " --Maternity Procedure Groups \n", + " select\n", + " (Claim_Administrator_Claim_Number || Insurer_FEIN) as patient_identifier, HCPCS_Line_Procedure_Billed_Code, ICD9_CM_Principal_Procedure_Code,\n", + " First_ICD9_CM_Diagnosis_Code as chp_1, Second_ICD9_CM_Diagnosis_Code as chp_2,\n", + " Third_ICD9_CM_Diagnosis_Code as chp_3, Fourth_ICD_9_CM_Diagnosis_Code as chp_4,\n", + " Fifth_ICD9_CM_Diagnosis_Code as chp_5, CAST(Total_Charge_Per_Line AS FLOAT)\n", + " from DEMO_HealthcareFWA.WC_SV2_MAT\n", + "\n", + " ) d\n", + " UNPIVOT EXCLUDE NULLS\n", + " (\n", + " chapter FOR diag_level IN\n", + " (chp_1, chp_2, chp_3, chp_4, chp_5)\n", + " ) Tmp\n", + ") up\n", + "Where treatment is not NULL\n", + "GROUP BY treatment\n", + ") WITH DATA ; ;" + ] + }, + { + "cell_type": "markdown", + "id": "32eddce0-f5a2-4dbf-bdc5-ecb17a80d74e", + "metadata": {}, + "source": [ + "

Below view is the driving view for the patients with maternity condition.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b310ee3d-91bb-46a2-b2f7-67cc0fa6bd54", + "metadata": {}, + "outputs": [], + "source": [ + "REPLACE VIEW DEMO_USER.WC_FR_V_NPATH_PRG_QRY AS (\n", + " SELECT\n", + " (Claim_Administrator_Claim_Number ||'_'|| Insurer_FEIN) as patient_identifier,\n", + " HCPCS_Line_Procedure_Billed_Code, Total_Charge_Per_Line,\n", + " Service_Line_From_Date,\n", + " min(Service_Line_From_Date) OVER (PARTITION BY patient_identifier) first_mat_diag,\n", + " COUNT(Service_Line_From_Date) OVER (PARTITION BY patient_identifier) proc_count,\n", + " Billing_Provider_Last_Name_or_Group,\n", + " Billing_Provider_FEIN,\n", + " First_ICD9_CM_Diagnosis_Code, Second_ICD9_CM_Diagnosis_Code, Third_ICD9_CM_Diagnosis_Code,\n", + " Fourth_ICD9_CM_Diagnosis_Code, Fifth_ICD9_CM_Diagnosis_Code,\n", + " ICD9_CM_Principal_Procedure_Code,\n", + " COALESCE(Description,\"Sub_Category\") as PRC_DESC, -- ,\"\"SHORT DESCRIPTION\"\"\n", + " COALESCE(ch_ds.descr,CAST(First_ICD9_CM_Diagnosis_Code as CHAR(3))) primary_condition,\n", + " Procedure_Description,\n", + " CASE\n", + " WHEN (First_ICD9_CM_Diagnosis_Code in \n", + " ('O82', 'Z38.01', 'Z38,62', 'Z38.64', 'Z38.66', 'Z38.31', 'Z38.69','740') OR \n", + " HCPCS_Line_Procedure_Billed_Code in ('59510','59514','59515')) OR \n", + " ICD9_CM_Principal_Procedure_Code in ('740','741','742','744','749','7499') THEN 'Cesarean Delivery'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('99291','99292') then 'Neonatal Critical Care'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('82105','82106') then 'Alpha Fetoprotein'\n", + " WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9894[0-4]','c') = 1 \n", + " THEN 'Chiropractic Manipulative Treatment'\n", + " WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[1-4]','c') = 1\n", + " THEN 'Physical Therapy'\n", + " WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'9716[5-8]','c') = 1\n", + " THEN 'Occupational Therapy'\n", + " WHEN REGEXP_SIMILAR(HCPCS_Line_Procedure_Billed_Code,'970((1[0-9])|(2[0-8]))','c') = 1\n", + " THEN 'Supervised Modalities'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('63047', '63048', '63030', '63035',\n", + " '22612', '22633', '22558', '22551',\n", + " '64635', '64636', '63045') THEN 'Spinal Surgery'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('70551','70553','70544','70547',\n", + " '70549','70540','70543','70540',\n", + " '70543','70336') THEN 'Back/Neck MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('72141','72156','72146','72157',\n", + " '72148','72158') THEN 'Spine MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('77059','77021') THEN 'Breast MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('73221','73223','73721','73723') THEN 'Joints MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('73718','73720','73218','73220') THEN 'Extremity MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('74181','74183','74185') THEN 'Abdomen MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('72195','72197','72195',\n", + " '72197','72195','72197') THEN 'Pelvis MRI'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('72125','72126','72131',\n", + " '72132''72128','72129') THEN 'CT Scan for Spine'\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('72040','72050','72220',\n", + " '72100','72110','72114',\n", + " '72200','72202','72052',\n", + " '72082','72070') THEN 'Xray for Spine'\n", + " ELSE NULL END as Description,\n", + " Employee_Mailing_City\n", + " FROM DEMO_HealthcareFWA.WC_MAT_PATIENT_ALL_BILLS\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_CHP_DESC ch_ds\n", + " ON CAST(First_ICD9_CM_Diagnosis_Code as CHAR(3)) = CAST(ch_ds.code as CHAR(3))\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_CPT_Coding_temp\n", + " ON\n", + " (HCPCS_Line_Procedure_Billed_Code BETWEEN \"FROM\" AND COALESCE(\"TO\",\"FROM\")) AND\n", + " (LENGTH(HCPCS_Line_Procedure_Billed_Code) = LENGTH(\"FROM\"))\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_HCPCS_Coding\n", + " ON HCPCS_Line_Procedure_Billed_Code = HCPC\n", + " WHERE \n", + " HCPCS_Line_Procedure_Billed_Code is not null and First_ICD9_CM_Diagnosis_Code is not null\n", + " and PRC_DESC is not null\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "747ef5eb-9c24-4a6a-b212-27cc19d8cfb6", + "metadata": {}, + "source": [ + "

Below table lists the pathways in maternity condition.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "587e948e-f0b6-4a10-a7cf-e8799fdfb101", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE Demo_User.mat_pathways as (\n", + "SELECT\n", + "TRIM (BOTH FROM REGEXP_REPLACE(patient_identifier, '[\\[\\]]', '', 1, 0, 'c')) as patient_identifier,\n", + "'Pregnancy Condition,' || REGEXP_REPLACE(path, '[\\[\\]]+', '', 1, 0, 'c') AS path,\n", + "'0.0,' || REGEXP_REPLACE(cost, '[\\[\\]\\s]+', '', 1, 0, 'c') AS cost,\n", + "label,\n", + "'None,' || REGEXP_REPLACE(prov_group, '[\\[\\]]+', '', 1, 0, 'c') as prov_group,\n", + "'None,' || REGEXP_REPLACE(provider, '[\\[\\]\\s]+', '', 1, 0, 'c') as provider,\n", + "total_cost\n", + "FROM nPath (\n", + "ON (\n", + " SELECT\n", + " a.patient_identifier, HCPCS_Line_Procedure_Billed_Code, Service_Line_From_Date, first_mat_diag,\n", + " Billing_Provider_Last_Name_or_Group, Billing_Provider_FEIN,\n", + " First_ICD9_CM_Diagnosis_Code, Second_ICD9_CM_Diagnosis_Code, Third_ICD9_CM_Diagnosis_Code,\n", + " Fourth_ICD9_CM_Diagnosis_Code, Fifth_ICD9_CM_Diagnosis_Code, PRC_DESC, primary_condition,\n", + " CASE \n", + " WHEN pt.p_id is NOT NULL THEN 'PT'\n", + " WHEN csec.p_id is NOT NULL THEN 'CS'\n", + " WHEN h_cost.p_id is NOT NULL THEN 'HC'\n", + " ELSE 'Other' END as label,\n", + " CAST(AVG(Total_Charge_Per_Line) as Decimal(10,2)) as Total_Charge_Per_Line,\n", + " h_cost.total_cost as total_cost\n", + " FROM demo_user.WC_FR_V_NPATH_PRG_QRY a\n", + " INNER JOIN(\n", + " SELECT DISTINCT patient_identifier as p_id\n", + " FROM demo_user.WC_FR_V_NPATH_PRG_QRY\n", + " WHERE\n", + " First_ICD9_CM_Diagnosis_Code like any ('64_._1','64_._2','65_._1','65_._2','66_._1','66_._2','67_._1','67_._2'\n", + " 'O10._2','O10._3','O11.3','O11.4','O12._4','O12._5','O13.4','O13.5','O14._4',\n", + " 'O14._5','O15.2','O16.4','O16.5','O24._2%','O24._3%','O25.2','O25.3','O26.62',\n", + " 'O26.63','O26.72','O26.73','O60.1%','O60.2%','O63.2','O70%','O80%','O82%',\n", + " 'O86.1%','O86.2%','O86.4%','O87%','O88._2','O88._3','O89%','O90%','O91._2',\n", + " 'O91._3','O92._2','O92._3','O98._2','O98._3','O9A._2','O9A._3','Z37%','Z39.0','Z39.1')\n", + " OR Second_ICD9_CM_Diagnosis_Code like any ('64_._1','64_._2','65_._1','65_._2','66_._1','66_._2','67_._1','67_._2'\n", + " 'O10._2','O10._3','O11.3','O11.4','O12._4','O12._5','O13.4','O13.5','O14._4',\n", + " 'O14._5','O15.2','O16.4','O16.5','O24._2%','O24._3%','O25.2','O25.3','O26.62',\n", + " 'O26.63','O26.72','O26.73','O60.1%','O60.2%','O63.2','O70%','O80%','O82%',\n", + " 'O86.1%','O86.2%','O86.4%','O87%','O88._2','O88._3','O89%','O90%','O91._2',\n", + " 'O91._3','O92._2','O92._3','O98._2','O98._3','O9A._2','O9A._3','Z37%','Z39.0','Z39.1')\n", + " OR Third_ICD9_CM_Diagnosis_Code like any ('64_._1','64_._2','65_._1','65_._2','66_._1','66_._2','67_._1','67_._2'\n", + " 'O10._2','O10._3','O11.3','O11.4','O12._4','O12._5','O13.4','O13.5','O14._4',\n", + " 'O14._5','O15.2','O16.4','O16.5','O24._2%','O24._3%','O25.2','O25.3','O26.62',\n", + " 'O26.63','O26.72','O26.73','O60.1%','O60.2%','O63.2','O70%','O80%','O82%',\n", + " 'O86.1%','O86.2%','O86.4%','O87%','O88._2','O88._3','O89%','O90%','O91._2',\n", + " 'O91._3','O92._2','O92._3','O98._2','O98._3','O9A._2','O9A._3','Z37%','Z39.0','Z39.1')\n", + " OR Fourth_ICD9_CM_Diagnosis_Code like any ('64_._1','64_._2','65_._1','65_._2','66_._1','66_._2','67_._1','67_._2'\n", + " 'O10._2','O10._3','O11.3','O11.4','O12._4','O12._5','O13.4','O13.5','O14._4',\n", + " 'O14._5','O15.2','O16.4','O16.5','O24._2%','O24._3%','O25.2','O25.3','O26.62',\n", + " 'O26.63','O26.72','O26.73','O60.1%','O60.2%','O63.2','O70%','O80%','O82%',\n", + " 'O86.1%','O86.2%','O86.4%','O87%','O88._2','O88._3','O89%','O90%','O91._2',\n", + " 'O91._3','O92._2','O92._3','O98._2','O98._3','O9A._2','O9A._3','Z37%','Z39.0','Z39.1')\n", + " OR Fifth_ICD9_CM_Diagnosis_Code like any ('64_._1','64_._2','65_._1','65_._2','66_._1','66_._2','67_._1','67_._2'\n", + " 'O10._2','O10._3','O11.3','O11.4','O12._4','O12._5','O13.4','O13.5','O14._4',\n", + " 'O14._5','O15.2','O16.4','O16.5','O24._2%','O24._3%','O25.2','O25.3','O26.62',\n", + " 'O26.63','O26.72','O26.73','O60.1%','O60.2%','O63.2','O70%','O80%','O82%',\n", + " 'O86.1%','O86.2%','O86.4%','O87%','O88._2','O88._3','O89%','O90%','O91._2',\n", + " 'O91._3','O92._2','O92._3','O98._2','O98._3','O9A._2','O9A._3','Z37%','Z39.0','Z39.1')\n", + " ) d\n", + " ON a.patient_identifier = d.p_id\n", + " LEFT JOIN (\n", + " SELECT DISTINCT patient_identifier as p_id\n", + " FROM demo_user.WC_FR_V_NPATH_PRG_QRY\n", + " WHERE\n", + " First_ICD9_CM_Diagnosis_Code like any ('644%','O60%')\n", + " OR Second_ICD9_CM_Diagnosis_Code like any ('644%','O60%')\n", + " OR Third_ICD9_CM_Diagnosis_Code like any ('644%','O60%')\n", + " OR Fourth_ICD9_CM_Diagnosis_Code like any ('644%','O60%')\n", + " OR Fifth_ICD9_CM_Diagnosis_Code like any ('644%','O60%')\n", + " ) pt\n", + " ON a.patient_identifier = pt.p_id\n", + " LEFT JOIN (\n", + " SELECT DISTINCT patient_identifier as p_id\n", + " FROM demo_user.WC_FR_V_NPATH_PRG_QRY\n", + " WHERE\n", + " (First_ICD9_CM_Diagnosis_Code in ('O82', 'Z38.01', 'Z38,62', 'Z38.64', 'Z38.66', 'Z38.31', 'Z38.69','740') OR \n", + " HCPCS_Line_Procedure_Billed_Code in ('59510','59514','59515')) OR \n", + " ICD9_CM_Principal_Procedure_Code in ('740','741','742','744','749','7499')\n", + " ) csec\n", + " ON a.patient_identifier = csec.p_id\n", + " LEFT JOIN (\n", + " SELECT patient_identifier as p_id,total_cost\n", + " FROM (\n", + " SELECT (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier, \n", + " SUM(Total_Charge_Per_Line) total_cost\n", + " FROM DEMO_HealthcareFWA.WC_MAT_PATIENT_ALL_BILLS \n", + " GROUP BY patient_identifier\n", + " ) d\n", + " ) h_cost\n", + " ON a.patient_identifier = h_cost.p_id\n", + " GROUP BY\n", + " a.patient_identifier, HCPCS_Line_Procedure_Billed_Code, first_mat_diag, Service_Line_From_Date,\n", + " Billing_Provider_Last_Name_or_Group, Billing_Provider_FEIN, First_ICD9_CM_Diagnosis_Code,\n", + " Second_ICD9_CM_Diagnosis_Code, Third_ICD9_CM_Diagnosis_Code, Fourth_ICD9_CM_Diagnosis_Code,\n", + " Fifth_ICD9_CM_Diagnosis_Code, PRC_DESC, primary_condition, label,total_cost\n", + ")\n", + "PARTITION BY patient_identifier\n", + "ORDER BY Service_Line_From_Date\n", + "USING\n", + "Mode (nonoverlapping)\n", + "Pattern ('(P|S|T|F|FF).(B){1,50}') \n", + "Symbols (\n", + " TRUE as B,\n", + " CAST(First_ICD9_CM_Diagnosis_Code AS CHAR(3)) in ('630','631','632','633','634','635','636','637','638','639',\n", + " '640','641','642','643','644','645','646','647','648','649',\n", + " '650','651','652','653','654','655','656','657','658','659',\n", + " '660','661','662','663','664','665','666','667','668','669',\n", + " '670','671','672','673','674','675','676','677','678','679',\n", + " 'O00','O01','O02','O03','O04','O05','O06','O07','O08','O09',\n", + " 'O10','O11','O12','O13','O14','O15','O16','O17','O18','O19',\n", + " 'O20','O21','O22','O23','O24','O25','O26','O27','O28','O29',\n", + " 'O30','O31','O32','O33','O34','O35','O36','O37','O38','O39',\n", + " 'O40','O41','O42','O43','O44','O45','O46','O47','O48','O49',\n", + " 'O50','O51','O52','O53','O54','O55','O56','O57','O58','O59',\n", + " 'O60','O61','O62','O63','O64','O65','O66','O67','O68','O69',\n", + " 'O70','O71','O72','O73','O74','O75','O76','O77','O78','O79',\n", + " 'O80','O81','O82','O83','O84','O85','O86','O87','O88','O89',\n", + " 'O90','O91','O92','O93','O94','O95','O96','O97','O98','O99') as P,\n", + " CAST(Second_ICD9_CM_Diagnosis_Code AS CHAR(3)) in ('630','631','632','633','634','635','636','637','638','639',\n", + " '640','641','642','643','644','645','646','647','648','649',\n", + " '650','651','652','653','654','655','656','657','658','659',\n", + " '660','661','662','663','664','665','666','667','668','669',\n", + " '670','671','672','673','674','675','676','677','678','679',\n", + " 'O00','O01','O02','O03','O04','O05','O06','O07','O08','O09',\n", + " 'O10','O11','O12','O13','O14','O15','O16','O17','O18','O19',\n", + " 'O20','O21','O22','O23','O24','O25','O26','O27','O28','O29',\n", + " 'O30','O31','O32','O33','O34','O35','O36','O37','O38','O39',\n", + " 'O40','O41','O42','O43','O44','O45','O46','O47','O48','O49',\n", + " 'O50','O51','O52','O53','O54','O55','O56','O57','O58','O59',\n", + " 'O60','O61','O62','O63','O64','O65','O66','O67','O68','O69',\n", + " 'O70','O71','O72','O73','O74','O75','O76','O77','O78','O79',\n", + " 'O80','O81','O82','O83','O84','O85','O86','O87','O88','O89',\n", + " 'O90','O91','O92','O93','O94','O95','O96','O97','O98','O99') as S,\n", + " CAST(Third_ICD9_CM_Diagnosis_Code AS CHAR(3)) in ('630','631','632','633','634','635','636','637','638','639',\n", + " '640','641','642','643','644','645','646','647','648','649',\n", + " '650','651','652','653','654','655','656','657','658','659',\n", + " '660','661','662','663','664','665','666','667','668','669',\n", + " '670','671','672','673','674','675','676','677','678','679',\n", + " 'O00','O01','O02','O03','O04','O05','O06','O07','O08','O09',\n", + " 'O10','O11','O12','O13','O14','O15','O16','O17','O18','O19',\n", + " 'O20','O21','O22','O23','O24','O25','O26','O27','O28','O29',\n", + " 'O30','O31','O32','O33','O34','O35','O36','O37','O38','O39',\n", + " 'O40','O41','O42','O43','O44','O45','O46','O47','O48','O49',\n", + " 'O50','O51','O52','O53','O54','O55','O56','O57','O58','O59',\n", + " 'O60','O61','O62','O63','O64','O65','O66','O67','O68','O69',\n", + " 'O70','O71','O72','O73','O74','O75','O76','O77','O78','O79',\n", + " 'O80','O81','O82','O83','O84','O85','O86','O87','O88','O89',\n", + " 'O90','O91','O92','O93','O94','O95','O96','O97','O98','O99') as T,\n", + " CAST(Fourth_ICD9_CM_Diagnosis_Code AS CHAR(3)) in ('630','631','632','633','634','635','636','637','638','639',\n", + " '640','641','642','643','644','645','646','647','648','649',\n", + " '650','651','652','653','654','655','656','657','658','659',\n", + " '660','661','662','663','664','665','666','667','668','669',\n", + " '670','671','672','673','674','675','676','677','678','679',\n", + " 'O00','O01','O02','O03','O04','O05','O06','O07','O08','O09',\n", + " 'O10','O11','O12','O13','O14','O15','O16','O17','O18','O19',\n", + " 'O20','O21','O22','O23','O24','O25','O26','O27','O28','O29',\n", + " 'O30','O31','O32','O33','O34','O35','O36','O37','O38','O39',\n", + " 'O40','O41','O42','O43','O44','O45','O46','O47','O48','O49',\n", + " 'O50','O51','O52','O53','O54','O55','O56','O57','O58','O59',\n", + " 'O60','O61','O62','O63','O64','O65','O66','O67','O68','O69',\n", + " 'O70','O71','O72','O73','O74','O75','O76','O77','O78','O79',\n", + " 'O80','O81','O82','O83','O84','O85','O86','O87','O88','O89',\n", + " 'O90','O91','O92','O93','O94','O95','O96','O97','O98','O99') as F,\n", + " CAST(Fifth_ICD9_CM_Diagnosis_Code AS CHAR(3)) in ('630','631','632','633','634','635','636','637','638','639',\n", + " '640','641','642','643','644','645','646','647','648','649',\n", + " '650','651','652','653','654','655','656','657','658','659',\n", + " '660','661','662','663','664','665','666','667','668','669',\n", + " '670','671','672','673','674','675','676','677','678','679',\n", + " 'O00','O01','O02','O03','O04','O05','O06','O07','O08','O09',\n", + " 'O10','O11','O12','O13','O14','O15','O16','O17','O18','O19',\n", + " 'O20','O21','O22','O23','O24','O25','O26','O27','O28','O29',\n", + " 'O30','O31','O32','O33','O34','O35','O36','O37','O38','O39',\n", + " 'O40','O41','O42','O43','O44','O45','O46','O47','O48','O49',\n", + " 'O50','O51','O52','O53','O54','O55','O56','O57','O58','O59',\n", + " 'O60','O61','O62','O63','O64','O65','O66','O67','O68','O69',\n", + " 'O70','O71','O72','O73','O74','O75','O76','O77','O78','O79',\n", + " 'O80','O81','O82','O83','O84','O85','O86','O87','O88','O89',\n", + " 'O90','O91','O92','O93','O94','O95','O96','O97','O98','O99') as FF\n", + ")\n", + "Result (\n", + "\n", + " FIRST (patient_identifier OF ANY(P,S,T,F,FF,B)) AS patient_identifier,\n", + " ACCUMULATE (CAST (PRC_DESC AS VARCHAR(40)) OF ANY(P,S,T,F,FF,B)) AS path,\n", + " ACCUMULATE(Total_Charge_Per_Line of ANY(P,S,T,F,FF,B)) as cost,\n", + " FIRST(total_cost of any(P,S,T,F,FF,B)) as total_cost, \n", + " FIRST(label of any(P,S,T,F,FF,B)) as label,\n", + " ACCUMULATE(Billing_Provider_Last_Name_or_Group of ANY(P,S,T,F,FF,B)) as prov_group,\n", + " ACCUMULATE(Billing_Provider_FEIN of ANY(P,S,T,F,FF,B)) as provider\n", + ")\n", + ") p\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "829ccac6-c052-4f4b-9924-67507b34052e", + "metadata": {}, + "source": [ + "

Below table calculates the chapterwise cost for maternity procedures.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "32038832-7695-4528-9057-35e760c542ec", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.mat_chap_comp as (\n", + "SELECT \n", + "chap, SUM(total_cost) AS total_cost, SUM(patients) AS patients, (SUM(avg_cost)/2) AS avg_cost \n", + "FROM\n", + "(\n", + "SELECT CASE WHEN chapter like '64%' THEN 'Normal Delivery' ELSE 'Delivery with Complications' END as chap,\n", + "SUM(Total_Charge_Per_Line) total_cost, COUNT(DISTINCT patient_identifier) patients, (total_cost/patients) avg_cost\n", + "FROM (\n", + " SELECT *\n", + " FROM(\n", + " select\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " CAST(First_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_1, CAST(Second_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_2,\n", + " CAST(Third_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_3, CAST(Fourth_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_4,\n", + " CAST(Fifth_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_5, Total_Charge_Per_Line\n", + " from DEMO_HealthcareFWA.WC_SV1_MAT\n", + " UNION ALL\n", + " select\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " CAST(First_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_1, CAST(Second_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_2,\n", + " CAST(Third_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_3, CAST(Fourth_ICD_9_CM_Diagnosis_Code AS CHAR(3)) as chp_4,\n", + " CAST(Fifth_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_5, CAST(Total_Charge_Per_Line AS FLOAT)\n", + " from DEMO_HealthcareFWA.WC_SV2_MAT\n", + " ) d\n", + " UNPIVOT EXCLUDE NULLS\n", + " (\n", + " chapter FOR diag_level IN\n", + " (chp_1, chp_2, chp_3, chp_4, chp_5)\n", + " ) Tmp\n", + " where CAST(chapter AS CHAR(2)) in ('64','65')--,'67','O0','O1','O2','O3','O4','O5','O6','O7','O8','O9','V2','Z3','76','77')\n", + ") up\n", + "GROUP BY chap\n", + "\n", + "UNION\n", + "\n", + "SELECT CASE WHEN chapter in ('Z34','O80','O82') THEN 'Normal Delivery' ELSE 'Delivery with Complications' END as chap,\n", + "SUM(Total_Charge_Per_Line) total_cost, COUNT(DISTINCT patient_identifier) patients, (total_cost/patients) avg_cost\n", + "FROM (\n", + " SELECT *\n", + " FROM(\n", + " select\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " CAST(First_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_1, CAST(Second_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_2,\n", + " CAST(Third_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_3, CAST(Fourth_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_4,\n", + " CAST(Fifth_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_5, Total_Charge_Per_Line\n", + " from DEMO_HealthcareFWA.WC_SV1_MAT\n", + " UNION ALL\n", + " select\n", + " (Claim_Administrator_Claim_Number || '_' || Insurer_FEIN) as patient_identifier,\n", + " CAST(First_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_1, CAST(Second_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_2,\n", + " CAST(Third_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_3, CAST(Fourth_ICD_9_CM_Diagnosis_Code AS CHAR(3)) as chp_4,\n", + " CAST(Fifth_ICD9_CM_Diagnosis_Code AS CHAR(3)) as chp_5, CAST(Total_Charge_Per_Line AS FLOAT)\n", + " from DEMO_HealthcareFWA.WC_SV2_MAT\n", + " ) d\n", + " UNPIVOT EXCLUDE NULLS\n", + " (\n", + " chapter FOR diag_level IN\n", + " (chp_1, chp_2, chp_3, chp_4, chp_5)\n", + " ) Tmp\n", + " where chapter in ('Z34','O80','O82','O60','O61','O62','O63','O64','O65','O66','O67','O68','O69','O70','O71','O72','O73','O74','O75','O76','O77')--,'67','O0','O1','O2','O3','O4','O5','O6','O7','O8','O9','V2','Z3','76','77')\n", + ") up\n", + "GROUP BY chap) CombineResults\n", + "GROUP BY chap\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "a7bb52be-8ce9-4c45-98f4-43a6f237ea53", + "metadata": {}, + "source": [ + "

Below table lists the top maternity procedures.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b2cf4a19-7494-476c-a5a4-9e0f97833edb", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.mat_top_proc as (\n", + "SELECT\n", + " RANK() OVER (ORDER BY TOTAL_COST DESC) as COST_RANK,\n", + " CAST(Description AS VARCHAR(45)) as \"Procedure\", TOTAL_COST\n", + "FROM (\n", + " select \n", + " COALESCE(\"Sub_Category\",\"SHORT DESCRIPTION\") as Description, \n", + " CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as TOTAL_COST\n", + " FROM (\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1_MAT\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL\n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line,\n", + " HCPCS_Line_Procedure_Billed_Code, CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2_MAT\n", + " WHERE HCPCS_Line_Procedure_Billed_Code is not NULL\n", + " ) d\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_CPT_Coding_temp\n", + " ON\n", + " (HCPCS_Line_Procedure_Billed_Code BETWEEN \"FROM\" AND COALESCE(\"TO\",\"FROM\")) AND\n", + " (LENGTH(HCPCS_Line_Procedure_Billed_Code) = LENGTH(\"FROM\"))\n", + " LEFT JOIN DEMO_HealthcareFWA.WC_HCPCS_Coding\n", + " ON HCPCS_Line_Procedure_Billed_Code = HCPC\n", + " GROUP BY Description\n", + ") d\n", + "QUALIFY COST_RANK <= 10\n", + ") WITH DATA ; " + ] + }, + { + "cell_type": "markdown", + "id": "5c165e0b-45e8-40a4-ba93-362039ced5e0", + "metadata": {}, + "source": [ + "

Below tables lists the maternity provider information.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e40db083-ea73-4447-a28b-e8fef91cbc55", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.mat_path_prov as (\n", + "SELECT\n", + "Billing_Provider_FEIN,\n", + "SUM(CASE \n", + " WHEN First_ICD9_CM_Diagnosis_Code in ('O82', 'Z38.01', 'Z38,62', 'Z38.64', 'Z38.66', 'Z38.31', 'Z38.69','740') THEN 1\n", + " WHEN Second_ICD9_CM_Diagnosis_Code in ('O82', 'Z38.01', 'Z38,62', 'Z38.64', 'Z38.66', 'Z38.31', 'Z38.69','740') THEN 1\n", + " WHEN Third_ICD9_CM_Diagnosis_Code in ('O82', 'Z38.01', 'Z38,62', 'Z38.64', 'Z38.66', 'Z38.31', 'Z38.69','740') THEN 1\n", + " WHEN Fourth_ICD9_CM_Diagnosis_Code in ('O82', 'Z38.01', 'Z38,62', 'Z38.64', 'Z38.66', 'Z38.31', 'Z38.69','740') THEN 1\n", + " WHEN Fifth_ICD9_CM_Diagnosis_Code in ('O82', 'Z38.01', 'Z38,62', 'Z38.64', 'Z38.66', 'Z38.31', 'Z38.69','740') THEN 1\n", + " WHEN HCPCS_Line_Procedure_Billed_Code in ('59510','59514','59515') THEN 1\n", + " WHEN ICD9_CM_Principal_Procedure_Code in ('740','741','742','744','749','7499') THEN 1\n", + " ELSE 0\n", + " END\n", + ") AS \"Total Cesarean Deliveries\",\n", + "SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code BETWEEN '76801' AND '76817' AND LENGTH(HCPCS_Line_Procedure_Billed_Code) = 5 THEN 1 ELSE 0 END) \"Total Ultrasound Performed\",\n", + "SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code in ('99291','99292') then 1 ELSE 0 END) \"Total Neonatal ICU Admissions\",\n", + "SUM(CASE WHEN HCPCS_Line_Procedure_Billed_Code in ('82105') then 1 ELSE 0 END) as \"Total Alpha Fetoprotein Tests\",\n", + "SUM(Total_Charge_Per_Line) \"Total Costs\"\n", + "FROM (\n", + "select\n", + " Billing_Provider_FEIN, Total_Charge_Per_Line,\n", + " First_ICD9_CM_Diagnosis_Code,Second_ICD9_CM_Diagnosis_Code,Third_ICD9_CM_Diagnosis_Code,Fourth_ICD9_CM_Diagnosis_Code,\n", + " Fifth_ICD9_CM_Diagnosis_Code,ICD9_CM_Principal_Procedure_Code,HCPCS_Line_Procedure_Billed_Code\n", + "from DEMO_HealthcareFWA.WC_MAT_PATIENT_ALL_BILLS\n", + ") d\n", + "GROUP BY Billing_Provider_FEIN\n", + " ) WITH DATA ; \n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "4b3766d1-b802-48cf-8ba4-0da558451954", + "metadata": {}, + "source": [ + "

Below table gives information on maternity facility.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46e3062e-71f9-4cb1-b4f2-8e07025f42a8", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE TABLE DEMO_USER.mat_top_facil as (\n", + "SELECT \n", + " RANK() OVER (ORDER BY COST DESC) as COST_RANK, d.Billing_Provider_FEIN,\n", + " Facility_Name, Billing_Provider_First_Name, Billing_Provider_Last_Name_or_Group, COST\n", + "FROM\n", + "(\n", + " SELECT Billing_Provider_FEIN, CAST(SUM(Total_Charge_Per_Line) AS DECIMAL(20,2)) as COST\n", + " FROM (\n", + " select \n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV1_MAT\n", + "\n", + " UNION ALL\n", + "\n", + " select\n", + " CAST(Total_Charge_Per_Line AS FLOAT) as Total_Charge_Per_Line, Billing_Provider_FEIN,\n", + " CAST(Date_of_Bill as CHAR(4)) as DOB\n", + " from DEMO_HealthcareFWA.WC_SV2_MAT\n", + " ) d\n", + " GROUP BY Billing_Provider_FEIN\n", + ") d\n", + "LEFT JOIN DEMO_HealthcareFWA.WC_PROVIDER_LOOKUP lu\n", + "ON lu.Billing_Provider_FEIN = d.Billing_Provider_FEIN\n", + "QUALIFY COST_RANK <= 10\n", + ") WITH DATA ; ;" + ] + }, + { + "cell_type": "markdown", + "id": "638781ca-acb2-4f6d-8e2b-fcefb0a73c75", + "metadata": {}, + "source": [ + "

Conclusion:

\n", + "

\n", + "In this notebook we have created the tables which are then used in the dashboard for the reporting. Here we can see how we have used Teradata's inbuild functions to calculate and derive complex logic and calutions. The dataprep step makes it seamless and easy to grasp the insights using visual dashboards.
Please review the insights derived from the source data and assess how they might assist in identifying Fraud, Waste, and Abuse (FWA). Superset Dashboard link

\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "21fffe00-fdfd-46b7-92e1-d4a68971caef", + "metadata": {}, + "source": [ + "
\n", + "7. Cleanup" + ] + }, + { + "cell_type": "markdown", + "id": "18db3975-fe9c-41a0-8edc-6ba34a904269", + "metadata": {}, + "source": [ + "

Work Tables

\n", + "

Cleanup work tables to prevent errors next time. This section drops all the tables created during the demonstration.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "04334089-b383-4392-ba1d-d2bccf4d0f4f", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.chapter_summary ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7357127e-da07-4a3e-9f9b-99adb08867a1", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.overview_chapters ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "408974c4-5871-43cf-a286-2b5e4866e9d9", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.overview_procedures ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2cb1637-1a07-4875-8c66-6b0cf1aa45dc", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.overview_providers ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a64122d7-a032-4e27-9d79-393176eca29d", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_comorb_conds ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f5bbb237-5dca-4b3b-a144-3c21e41df067", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_proc_groups ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7db1f1f7-8d13-4564-ab76-5eee2018b64a", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_procedures ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3c16ffc3-f63d-4c8f-ac27-fd581fbda89a", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_providers ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4d44a57c-e310-458b-b488-78d0f4c30fce", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_drilldown_proc_groups ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf9d7f36-7317-4477-b679-15f64102b694", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_drilldown_proc_grp_counties ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d00d72d-e39d-4184-9d42-cb270d8e9bc3", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_drilldown_proc_grp_procedures ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7ae05dc7-25fa-4d71-a5e0-09d0fd78002c", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_drilldown_proc_grp_provs ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "71ecacf0-c0cd-4aa4-8516-b124a97a77e5", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.srg_averages ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6f12e65e-46e7-41ae-9e12-8c9a666ca701", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.srg_mri ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "959f1a12-1e0d-4a14-8c00-84f865c90971", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.msk_pathwys_prov ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c70a945c-db2a-469b-86cd-697a007e997a", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.surg_pathways ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "29cc08b8-ecc0-47e5-b6fd-df06e209e63c", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.nsurg_pathways ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2bc5045-69a3-4386-84c9-67d93263f1ad", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.Total_cost_for_procedure_groups_dbt ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91754732-037b-44b8-aa5c-2549c5f2ba34", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.Total_cost_for_procedures_dbt ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7368ec86-1945-4b3b-a032-815a186e911d", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.Hemoglobin_count_dbt ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c6315968-551d-432e-b05b-29c6c7a06782", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.Total_cost_for_facilities_dbt ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d0f6a8b-21fb-40bb-9101-6aeb626b7a69", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.dbt_drilldown_proc_groups ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "481e7edc-c33a-4f48-a64f-7849aad3803d", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.dbt_drilldown_proc_grp_procedures ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3899b2d7-5b2e-460f-807b-a3aa242e7af1", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.dbt_drilldown_proc_grp_counties ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f9f9840-16cc-440e-8b72-76a8bc6ae75e", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.dbt_drilldown_proc_grp_provs ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3fa08018-f143-479a-a9d6-fa83a89fa4c5", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.dbt_pathways ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f67f195-334a-45cc-b94b-b2923c76ae74", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.dbt_pathwys_prov ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f0942531-051a-481c-9e8c-cd098782bec7", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.mat_chap_comp ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ef856fd3-6194-41a3-812d-f91d6e77462b", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.mat_proc_grps ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5290f888-286d-495b-946a-82e3081aa724", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.mat_top_proc ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7bd00dc-cd15-4713-8f22-86cfe81acb29", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.mat_top_facil ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "123a2bd6-d09c-4aa1-8c2a-d7e97eede289", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.mat_pathways ;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0e8640fa-f4b3-425a-a589-d9d6a295172c", + "metadata": {}, + "outputs": [], + "source": [ + "drop table demo_user.mat_path_prov ;" + ] + }, + { + "cell_type": "markdown", + "id": "829daa6c-a278-487e-8f51-c2fbd8d04064", + "metadata": {}, + "source": [ + "
\n", + "

Databases and Tables

\n", + "

The following code will clean up tables and databases created above.

" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f755d4c-5347-4d03-b046-afb48a009ffc", + "metadata": {}, + "outputs": [], + "source": [ + "call remove_data('DEMO_HealthcareFWA'); " + ] + }, + { + "cell_type": "markdown", + "id": "6fcd4a6c-0bb4-4371-8bc4-b8f527af4b3c", + "metadata": {}, + "source": [ + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Teradata SQL", + "language": "Teradata SQL", + "name": "teradatasql" + }, + "language_info": { + "codemirror_mode": "Teradata SQL", + "file_extension": ".tdrs", + "mimetype": "application/vnd.teradata.resultset", + "name": "Teradata SQL", + "nbconvert_exporter": "", + "pygments_lexer": "", + "version": "16.20" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/UseCases/FWA_Healthcare/FWA_Reporting_in_Healthcare.ipynb b/UseCases/FWA_Healthcare/FWA_Reporting_in_Healthcare.ipynb new file mode 100644 index 00000000..576db50f --- /dev/null +++ b/UseCases/FWA_Healthcare/FWA_Reporting_in_Healthcare.ipynb @@ -0,0 +1,331 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8020ca33-aad1-4e50-876e-0c4c660e3195", + "metadata": {}, + "source": [ + "
\n", + "

\n", + " AI/ML-Powered Evidence-Based Pathway Analytics for Fraud, Waste, and Abuse (FWA) Detection in Healthcare
\n", + " \"Teradata\"\n", + "

\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "f28724a7-cdde-4bb8-839d-93e0f9e4cebb", + "metadata": {}, + "source": [ + "

Introduction
\n", + "

Current FWA(Fraud, waste and abuse) detection processes in healthcare industry rely heavily on traditional queries and manual auditing, which are slow and not scalable. Similarly, identifying cost inefficiencies and poor adherence to Value-Based Care models example in complex musculoskeletal (MSK) cases is difficult due to scattered data and limited advanced analytics. Key challenges include:\n", + "

\n", + "

\n", + " Proposed Solution
Evidence-Based Pathway Monitoring Using AI/ML\n", + "Implement a robust analytics platform leveraging machine learning, npath analysis, and visual dashboards to detect deviations from evidence based medication(EBM) and reduce fraud,waste and abuse(FWA). With the help of the information in the dashboards we can find out the deviations in the recommended practices like Surgical interventions without appropriate diagnostics or conservative treatments. Cases where diagnostics are skipped or treatment is prematurely escalated. Patient journey flows across diagnostic and treatment steps. Predict patterns of behavior that frequently lead to FWA incidents.\n", + "

\n", + " Benefits\n", + "

" + ] + }, + { + "cell_type": "markdown", + "id": "44397f16-5321-448a-83c1-f895ea2a7cd5", + "metadata": {}, + "source": [ + "

Solution Steps
\n", + "

Due to the size and complexity of the solution, we have divided the solution approach into two steps.

    \n", + "
    \n", + " \n", + " Data processing\n", + "

    This notebook loads the source data and does the data-processing required for the dashboard reporting. The target tables created in the notebook are then be used for the reporting.\n", + "

    \n", + "\n", + "
    \n", + " \n", + " Superset Dashboards\n", + "

    The reporting dashboard based on the tables created in using dataprocessing sqls.\n", + "

    \n" + ] + }, + { + "cell_type": "markdown", + "id": "34fd4845-8cd4-44ad-b2e9-07e6be0675f5", + "metadata": {}, + "source": [ + "
    \n", + "

    1. Connect to Vantage, Import python packages and explore the dataset

    \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "931b0dfe-4e25-44b2-8896-27e3b3107042", + "metadata": {}, + "outputs": [], + "source": [ + "#import libraries\n", + "import getpass\n", + "from teradataml import *\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "warnings.simplefilter(action='ignore', category=DeprecationWarning)\n", + "warnings.simplefilter(action='ignore', category=RuntimeWarning)\n", + "warnings.simplefilter(action='ignore', category=FutureWarning)\n", + "\n", + "display.max_rows=5" + ] + }, + { + "cell_type": "markdown", + "id": "9f103944-fd7b-487e-aa7c-6ae303c82db2", + "metadata": {}, + "source": [ + "

    We will be prompted to provide the password. We will enter the password, press the Enter key, and then use the down arrow to go to the next cell.

    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8357989a-319e-4cf0-b053-b7ec9b934b75", + "metadata": {}, + "outputs": [], + "source": [ + "%run -i ../startup.ipynb\n", + "eng = create_context(host = 'host.docker.internal', username='demo_user', password = password)\n", + "print(eng)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1ef190b7-b335-46cc-9ab0-82a187457a90", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "execute_sql('''SET query_band='DEMO=FF_FWA_Reporting_in_Healthcare_Python.ipynb;' UPDATE FOR SESSION; ''')" + ] + }, + { + "cell_type": "markdown", + "id": "3bfe3a6e-23e8-4540-a9b2-ae17ad3acad5", + "metadata": {}, + "source": [ + "

    Getting Data for This Demo

    \n", + "

    We have provided data for this demo on cloud storage. We have the option of either running the demo using foreign tables to access the data without using any storage on our environment or downloading the data to local storage, which may yield somewhat faster execution. However, we need to consider available storage. There are two statements in the following cell, and one is commented out. We may switch which mode we choose by changing the comment string.

    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8adc50c1-007e-45d1-8eb4-46534565c192", + "metadata": {}, + "outputs": [], + "source": [ + "%run -i ../run_procedure.py \"call get_data('DEMO_HealthcareFWA_cloud');\"\n", + " # takes about 30 seconds, estimated space: 0Mb\n", + "#%run -i ../run_procedure.py \"call get_data('DEMO_HealthcareFWA_local');\" \n", + "# takes about 7minutes, estimated space: 800Mb" + ] + }, + { + "cell_type": "markdown", + "id": "5eacf4c7-3a3b-4a26-95aa-a245448ff61d", + "metadata": {}, + "source": [ + "

    Optional step – We should execute the below step only if we want to see the status of databases/tables created and space used.

    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e210987b-966a-4afe-a1cc-5e5197e0c108", + "metadata": {}, + "outputs": [], + "source": [ + "%run -i ../run_procedure.py \"call space_report();\"" + ] + }, + { + "cell_type": "markdown", + "id": "76dd0790-8b89-4848-8c39-8142af1fab97", + "metadata": {}, + "source": [ + "
    \n", + "

    2. Data Exploration

    " + ] + }, + { + "cell_type": "markdown", + "id": "843a8104-42c3-46d5-b97b-03fa6c5a15a3", + "metadata": {}, + "source": [ + "

    Let us start by listing all tables/datasets available for us.

    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3650ea30-d063-4cff-ac39-03424db2c626", + "metadata": {}, + "outputs": [], + "source": [ + "db_list_tables('DEMO_HealthcareFWA')" + ] + }, + { + "cell_type": "markdown", + "id": "43f0b3b9-ff0f-409d-8b81-45ef88791ace", + "metadata": {}, + "source": [ + "

    As we can see from above, we have data in tables about the Procedure, conditions, medications etc. We also have patients billing history e.g in Wc_Sv1header, Wc_Sv1detail. We have information about musculoskeletal, diabetics and maternity cases.

    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4492ccb9-fdf0-4549-811c-33cf713b37bc", + "metadata": {}, + "outputs": [], + "source": [ + "df_proc = DataFrame(in_schema(\"DEMO_HealthcareFWA\", \"Va_Procedures\"))\n", + "df_proc" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "faeaaffb-4e15-45b8-bb79-8d7a45c3785d", + "metadata": {}, + "outputs": [], + "source": [ + "df_sv1_header = DataFrame(in_schema(\"DEMO_HealthcareFWA\", \"Wc_Sv1header\"))\n", + "df_sv1_header" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75e00d48-cb6c-4d49-9237-f66f43ae2f5d", + "metadata": {}, + "outputs": [], + "source": [ + "df_sv1_detail = DataFrame(in_schema(\"DEMO_HealthcareFWA\", \"Wc_Sv1detail\"))\n", + "df_sv1_detail" + ] + }, + { + "cell_type": "markdown", + "id": "fc52eac9-6be3-40e9-91b3-5701416ceb36", + "metadata": {}, + "source": [ + "

    You can check the information available in the other tables also. In the Dataprocessing Notebook we can see how we derive meaningful information from these tables and used them in reporting.

    \n" + ] + }, + { + "cell_type": "markdown", + "id": "73f29794-0df2-4cf2-b08f-490e53092991", + "metadata": {}, + "source": [ + "

    The dasboard looks like below and it uses the tables created in the dataprocessing step.\n", + "\n", + "

    \"fwa_dashboard\"
    \n" + ] + }, + { + "cell_type": "markdown", + "id": "0fc5fedf-b1a5-4678-815b-d59098c4c51d", + "metadata": {}, + "source": [ + "

    \n", + " Superset Dashboard link Please review the insights derived from the source data and assess how they might assist in identifying Fraud, Waste, and Abuse (FWA).

    \n" + ] + }, + { + "cell_type": "markdown", + "id": "4e7d48f1-dd97-4b0a-b3eb-edf5744f1293", + "metadata": {}, + "source": [ + "
    \n", + "3. Cleanup" + ] + }, + { + "cell_type": "markdown", + "id": "45884c10-da59-41ef-a274-28ccc0e111e5", + "metadata": {}, + "source": [ + "

    Databases and Tables

    \n", + "

    The following code will clean up tables and databases created above.

    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b83294e0-2135-4559-8a11-d2324aee7df9", + "metadata": {}, + "outputs": [], + "source": [ + "%run -i ../run_procedure.py \"call remove_data('DEMO_HealthcareFWA');\" # Takes 10 seconds" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "96de2215-a095-44cb-8354-c70eebbade74", + "metadata": {}, + "outputs": [], + "source": [ + "remove_context()" + ] + }, + { + "cell_type": "markdown", + "id": "9e2f6327-b156-43be-b7be-a1f3859bbf50", + "metadata": {}, + "source": [ + "
    \n", + "
    ClearScape Analytics™
    \n", + "
    \n", + "
    \n", + " Copyright © Teradata Corporation - 2025. All Rights Reserved\n", + "
    \n", + "
    \n", + "
    " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/UseCases/FWA_Healthcare/images/fwa-dashboard-msk.jpg b/UseCases/FWA_Healthcare/images/fwa-dashboard-msk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0db634eb01b6580f23fc5a65f6c3acef2bc4b69b GIT binary patch literal 951755 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%0At7B5N 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�&ZfaJ!`>prIN7|>4 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

\n", + "

" ] }, { @@ -246,11 +246,14 @@ }, { "cell_type": "markdown", - "id": "0fc5fedf-b1a5-4678-815b-d59098c4c51d", + "id": "c348f7c4-19a6-4e56-a1e1-232ce5b397d0", "metadata": {}, "source": [ "

\n", - " Superset Dashboard link Please review the insights derived from the source data and assess how they might assist in identifying Fraud, Waste, and Abuse (FWA).

\n" + "

Please review the insights derived from the source data and assess how they might assist in identifying Fraud, Waste, and Abuse (FWA).

" ] }, {