Пример #1
0
    )
    SELECT
      week_num, report_year, c.state_code, c.cohort, c.person_id, c.start_date,
      DATE_DIFF(report_end_date, GREATEST(earliest_start_date, c.start_date), DAY) AS days_since_start,
      DATE_DIFF(i.admission_date, GREATEST(earliest_start_date, c.start_date), DAY) AS days_until_admission,
      DATE_DIFF(COALESCE(i.admission_date, report_end_date), GREATEST(earliest_start_date, c.start_date), DAY) AS survival_days,
      (i.admission_date IS NULL OR i.admission_date >= r.report_start_date) AS report_week_cohort,
      i.admission_date, i.incarceration_type
    FROM most_recent_release c
    LEFT JOIN incarcerations i
      USING (state_code, person_id, week_num, report_year)
    JOIN report_dates r USING (week_num, report_year)
    ORDER BY week_num, report_year, survival_days, days_until_admission DESC, start_date
"""

US_ID_RELEASED_COMMUNITY_PERFORMANCE_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.COVID_REPORT_DATASET,
    materialized_metrics_dataset=dataset_config.
    DATAFLOW_METRICS_MATERIALIZED_DATASET,
    reference_dataset=dataset_config.REFERENCE_VIEWS_DATASET,
    state_dataset=dataset_config.STATE_BASE_DATASET,
    view_id=US_ID_RELEASED_COMMUNITY_PERFORMANCE_VIEW_NAME,
    view_query_template=US_ID_RELEASED_COMMUNITY_PERFORMANCE_QUERY_TEMPLATE,
    description=US_ID_RELEASED_COMMUNITY_PERFORMANCE_DESCRIPTION,
    covid_report_dataset=COVID_REPORT_DATASET,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        US_ID_RELEASED_COMMUNITY_PERFORMANCE_VIEW_BUILDER.build_and_print()
        (SELECT
          state_code,
          termination_date,
          termination_reason,
          person_id
        FROM supervision_terminations
        LEFT JOIN overlapping_open_period USING (supervision_period_id)
          -- Do not count any discharges that are overlapping with another open supervision period
          -- Count any overlapping periods that ended due to ABSCONSION
          WHERE (overlapping_open_period.supervision_period_id IS NULL OR termination_reason = 'ABSCONSION')
            AND termination_reason NOT IN ('TRANSFER_WITHIN_STATE', 'TRANSFER_OUT_OF_STATE', 'RETURN_FROM_ABSCONSION')
      ) terminations
      ON report.state_code = terminations.state_code AND termination_date BETWEEN start_date AND end_date
      GROUP BY state_code, week_num, start_date, end_date)
    ORDER BY state_code, week_num
"""

SUPERVISION_TERMINATIONS_BY_TYPE_BY_WEEK_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.COVID_REPORT_DATASET,
    view_id=SUPERVISION_TERMINATIONS_BY_TYPE_BY_WEEK_VIEW_NAME,
    view_query_template=SUPERVISION_TERMINATIONS_BY_TYPE_BY_WEEK_QUERY_TEMPLATE,
    description=SUPERVISION_TERMINATIONS_BY_TYPE_BY_WEEK_DESCRIPTION,
    base_dataset=dataset_config.STATE_BASE_DATASET,
    covid_report_dataset=dataset_config.COVID_REPORT_DATASET,
    reference_views_dataset=dataset_config.REFERENCE_VIEWS_DATASET,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        SUPERVISION_TERMINATIONS_BY_TYPE_BY_WEEK_VIEW_BUILDER.build_and_print()
      SUM(recidivated_releases)/COUNT(*) AS recidivism_rate,
      stay_length_bucket,
      district
    FROM `{project_id}.{metrics_dataset}.recidivism_rate_metrics`
    JOIN `{project_id}.{reference_dataset}.most_recent_job_id_by_metric_and_state_code` job
      USING (state_code, job_id, metric_type),
    {district_dimension}
    WHERE methodology = 'PERSON'
      AND person_id IS NOT NULL
      AND follow_up_period = 1
      AND district IS NOT NULL
      AND release_cohort = EXTRACT(YEAR FROM DATE_SUB(CURRENT_DATE(), INTERVAL 2 YEAR))
    GROUP BY state_code, release_cohort, follow_up_period, stay_length_bucket, district
    ORDER BY state_code, release_cohort, follow_up_period, stay_length_bucket, district
    """

REINCARCERATION_RATE_BY_STAY_LENGTH_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.DASHBOARD_VIEWS_DATASET,
    view_id=REINCARCERATION_RATE_BY_STAY_LENGTH_VIEW_NAME,
    view_query_template=REINCARCERATION_RATE_BY_STAY_LENGTH_QUERY_TEMPLATE,
    description=REINCARCERATION_RATE_BY_STAY_LENGTH_DESCRIPTION,
    metrics_dataset=dataset_config.DATAFLOW_METRICS_DATASET,
    reference_dataset=dataset_config.REFERENCE_TABLES_DATASET,
    district_dimension=bq_utils.unnest_district(
        district_column='county_of_residence'),
)

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        REINCARCERATION_RATE_BY_STAY_LENGTH_VIEW_BUILDER.build_and_print()
Пример #4
0
        supervision_type,
        district
      FROM `{project_id}.{reference_dataset}.event_based_supervision_populations`
      GROUP BY state_code, year, month, supervision_type, district
    ) pop
    LEFT JOIN (
      SELECT 
        state_code, year, month,
        COUNT(DISTINCT person_id) AS revocation_count,
        supervision_type,
        district
      FROM `{project_id}.{reference_dataset}.event_based_revocations`
      GROUP BY state_code, year, month, supervision_type, district
    ) rev
    USING (state_code, year, month, supervision_type, district)
    WHERE supervision_type in ('ALL', 'PAROLE', 'PROBATION')
    ORDER BY state_code, year, month, supervision_type, district
    """

REVOCATIONS_BY_MONTH_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.DASHBOARD_VIEWS_DATASET,
    view_id=REVOCATIONS_BY_MONTH_VIEW_NAME,
    view_query_template=REVOCATIONS_BY_MONTH_QUERY_TEMPLATE,
    description=REVOCATIONS_BY_MONTH_DESCRIPTION,
    reference_dataset=dataset_config.REFERENCE_TABLES_DATASET,
)

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        REVOCATIONS_BY_MONTH_VIEW_BUILDER.build_and_print()
Пример #5
0
/*{description}*/
SELECT charge_id, booking_id, class, severity
FROM (
  -- Assign '{external_unknown}' if charge class is NULL.
  -- These will all be lumped into an UNKNOWN category for visualization.
  SELECT charge_id, booking_id, COALESCE(class, '{external_unknown}') AS class
  FROM
  `{project_id}.{base_dataset}.{charge_table}`
) Charge
LEFT JOIN
  `{project_id}.{views_dataset}.{charge_class_severity_ranks_view}` ChargeClassSeverity
ON
  Charge.class = ChargeClassSeverity.charge_class
"""

CHARGES_AND_SEVERITY_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=CHARGES_AND_SEVERITY_VIEW_NAME,
    view_query_template=CHARGES_AND_SEVERITY_QUERY_TEMPLATE,
    description=CHARGES_AND_SEVERITY_DESCRIPTION,
    external_unknown=external_unknown,
    base_dataset=dataset_config.COUNTY_BASE_DATASET,
    views_dataset=dataset_config.VIEWS_DATASET,
    charge_table=Charge.__tablename__,
    charge_class_severity_ranks_view=CHARGE_CLASS_SEVERITY_RANKS_VIEW_BUILDER.
    view_id)

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        CHARGES_AND_SEVERITY_VIEW_BUILDER.build_and_print()
Пример #6
0
        race,
        ethnicity
    FROM person_based_terminations,
    {district_dimension},
    {supervision_dimension},
    {charge_category_dimension}
    WHERE ranking = 1
      AND supervision_type IN ('ALL', 'DUAL', 'PAROLE', 'PROBATION')
      AND district IS NOT NULL
    """

SUPERVISION_TERMINATION_MATRIX_BY_PERSON_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.REFERENCE_TABLES_DATASET,
    view_id=SUPERVISION_TERMINATION_MATRIX_BY_PERSON_VIEW_NAME,
    view_query_template=
    SUPERVISION_TERMINATION_MATRIX_BY_PERSON_VIEW_QUERY_TEMPLATE,
    description=SUPERVISION_TERMINATION_MATRIX_BY_PERSON_VIEW_DESCRIPTION,
    metrics_dataset=dataset_config.DATAFLOW_METRICS_DATASET,
    reference_dataset=dataset_config.REFERENCE_TABLES_DATASET,
    most_severe_violation_type_subtype_grouping=bq_utils.
    most_severe_violation_type_subtype_grouping(),
    district_dimension=bq_utils.unnest_district('district'),
    supervision_dimension=bq_utils.unnest_supervision_type(),
    charge_category_dimension=bq_utils.unnest_charge_category(),
    metric_period_dimension=bq_utils.unnest_metric_period_months(),
    metric_period_condition=bq_utils.metric_period_condition())

if __name__ == '__main__':
    with local_project_id_override(GAE_PROJECT_STAGING):
        SUPERVISION_TERMINATION_MATRIX_BY_PERSON_VIEW_BUILDER.build_and_print()
        ON population_dates.population_date BETWEEN sessions.start_date AND COALESCE(sessions.end_date, '9999-01-01')
    WHERE sessions.compartment_level_1 IN ('INCARCERATION', 'INCARCERATION_OUT_OF_STATE')
    )
    SELECT 
        state_code,
        population_date,
        person_id,
        COALESCE(in_dataflow, 0) AS in_dataflow,
        COALESCE(in_sessions, 0) AS in_sessions,
    FROM dataflow_population
    FULL OUTER JOIN sessions_population
        USING(state_code, population_date, person_id)
    """

SESSION_INCARCERATION_POPULATION_TO_DATAFLOW_VIEW_BUILDER_DISAGGREGATED = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=
    SESSION_INCARCERATION_POPULATION_TO_DATAFLOW_DISAGGREGATED_VIEW_NAME,
    view_query_template=
    SESSION_INCARCERATION_POPULATION_TO_DATAFLOW_DISAGGREGATED_QUERY_TEMPLATE,
    description=
    SESSION_INCARCERATION_POPULATION_TO_DATAFLOW_DISAGGREGATED_DESCRIPTION,
    materialized_metrics_dataset=DATAFLOW_METRICS_MATERIALIZED_DATASET,
    analyst_dataset=ANALYST_VIEWS_DATASET,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        SESSION_INCARCERATION_POPULATION_TO_DATAFLOW_VIEW_BUILDER_DISAGGREGATED.build_and_print(
        )
Пример #8
0
      report_month.facetoface_percent,
      report_month.facetoface_percent - IFNULL(last_month.facetoface_percent, 0) as facetoface_percent_change
    FROM `{project_id}.{po_report_dataset}.po_report_recipients`
    LEFT JOIN report_data report_month
      USING (state_code, officer_external_id, district)
    LEFT JOIN (
      SELECT
        * EXCEPT (year, month),
        -- Project this year/month data onto the next month to calculate the MoM change
        EXTRACT(YEAR FROM DATE_ADD(DATE(year, month, 1), INTERVAL 1 MONTH)) AS year,
        EXTRACT(MONTH FROM DATE_ADD(DATE(year, month, 1), INTERVAL 1 MONTH)) AS month,
      FROM report_data
    ) last_month
      USING (state_code, year, month, officer_external_id, district)
    -- Only include output for the month before the current month
    WHERE DATE(year, month, 1) = DATE_SUB(DATE(EXTRACT(YEAR FROM CURRENT_DATE()), EXTRACT(MONTH FROM CURRENT_DATE()), 1), INTERVAL 1 MONTH)
    ORDER BY review_month, email_address
    """

PO_MONTHLY_REPORT_DATA_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.PO_REPORT_DATASET,
    view_id=PO_MONTHLY_REPORT_DATA_VIEW_NAME,
    materialized_view_table_id=MATERIALIZED_VIEW_TABLE_NAME,
    view_query_template=PO_MONTHLY_REPORT_DATA_QUERY_TEMPLATE,
    description=PO_MONTHLY_REPORT_DATA_DESCRIPTION,
    po_report_dataset=PO_REPORT_DATASET)

if __name__ == '__main__':
    with local_project_id_override(GAE_PROJECT_STAGING):
        PO_MONTHLY_REPORT_DATA_VIEW_BUILDER.build_and_print()
Пример #9
0
             ELSE most_severe_violation_type END
        ELSE most_severe_violation_type
        END AS violation_type,
      IF(response_count > 8, 8, response_count) AS reported_violations,
      metric_period_months
    FROM `{project_id}.{metrics_dataset}.supervision_revocation_analysis_metrics`
    JOIN `{project_id}.{reference_dataset}.most_recent_job_id_by_metric_and_state_code` job
      USING (state_code, job_id, year, month, metric_period_months)
    WHERE methodology = 'PERSON'
      AND revocation_type = 'REINCARCERATION'
      AND person_external_id IS NOT NULL
      AND month IS NOT NULL
      AND year = EXTRACT(YEAR FROM CURRENT_DATE('US/Pacific'))
      AND month = EXTRACT(MONTH FROM CURRENT_DATE('US/Pacific'))
      AND job.metric_type = 'SUPERVISION_REVOCATION_ANALYSIS'
    ORDER BY metric_period_months, violation_record
    """

REVOCATIONS_MATRIX_FILTERED_CASELOAD_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.DASHBOARD_VIEWS_DATASET,
    view_id=REVOCATIONS_MATRIX_FILTERED_CASELOAD_VIEW_NAME,
    view_query_template=REVOCATIONS_MATRIX_FILTERED_CASELOAD_QUERY_TEMPLATE,
    description=REVOCATIONS_MATRIX_FILTERED_CASELOAD_DESCRIPTION,
    metrics_dataset=dataset_config.DATAFLOW_METRICS_DATASET,
    reference_dataset=dataset_config.REFERENCE_TABLES_DATASET,
)

if __name__ == '__main__':
    with local_project_id_override(GAE_PROJECT_STAGING):
        REVOCATIONS_MATRIX_FILTERED_CASELOAD_VIEW_BUILDER.build_and_print()
Пример #10
0
  email AS email_address,
  phone_number
FROM
  `{project_id}.us_id_raw_data_up_to_date_views.cis_offender_latest` offenders
LEFT JOIN
  `{project_id}.us_id_raw_data_up_to_date_views.cis_personemailaddress_latest` emails
ON emails.personid = offenders.id
LEFT JOIN
  phone_numbers
ON offenders.offendernumber = phone_numbers.docno
WHERE
  iscurrent = 'T'
"""

CLIENT_CONTACT_INFO_DESCRIPTION = """
Provides an association between people on supervision and their contact info.
 
Currently only generates data for Idaho and only contains email addresses."""

CLIENT_CONTACT_INFO_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=VIEWS_DATASET,
    view_id="client_contact_info",
    description=CLIENT_CONTACT_INFO_DESCRIPTION,
    view_query_template=CLIENT_CONTACT_INFO_QUERY_TEMPLATE,
    should_materialize=True,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        CLIENT_CONTACT_INFO_VIEW_BUILDER.build_and_print()
Пример #11
0
      ((race_or_ethnicity != 'ALL' AND gender = 'ALL' AND age_bucket = 'ALL') -- Race breakdown
      OR (race_or_ethnicity = 'ALL' AND gender != 'ALL' AND age_bucket = 'ALL') -- Gender breakdown
      OR (race_or_ethnicity = 'ALL' AND gender = 'ALL' AND age_bucket != 'ALL') -- Age breakdown
      OR (race_or_ethnicity = 'ALL' AND gender = 'ALL' AND age_bucket = 'ALL')) -- Overall success rate
    ORDER BY state_code, supervision_type, metric_period_months, district, race_or_ethnicity, gender, age_bucket
    """

SUPERVISION_SUCCESS_BY_PERIOD_BY_DEMOGRAPHICS_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.PUBLIC_DASHBOARD_VIEWS_DATASET,
    view_id=SUPERVISION_SUCCESS_BY_PERIOD_BY_DEMOGRAPHICS_VIEW_NAME,
    view_query_template=
    SUPERVISION_SUCCESS_BY_PERIOD_BY_DEMOGRAPHICS_VIEW_QUERY_TEMPLATE,
    description=SUPERVISION_SUCCESS_BY_PERIOD_BY_DEMOGRAPHICS_VIEW_DESCRIPTION,
    metrics_dataset=dataset_config.DATAFLOW_METRICS_DATASET,
    reference_dataset=dataset_config.REFERENCE_TABLES_DATASET,
    grouped_districts=bq_utils.supervision_specific_district_groupings(
        'supervising_district_external_id', 'judicial_district_code'),
    race_or_ethnicity_dimension=bq_utils.unnest_race_and_ethnicity(),
    metric_period_condition=bq_utils.metric_period_condition(month_offset=1),
    unnested_race_or_ethnicity_dimension=bq_utils.unnest_column(
        'race_or_ethnicity', 'race_or_ethnicity'),
    gender_dimension=bq_utils.unnest_column('gender', 'gender'),
    age_dimension=bq_utils.unnest_column('age_bucket', 'age_bucket'),
    state_specific_race_or_ethnicity_groupings=bq_utils.
    state_specific_race_or_ethnicity_groupings())

if __name__ == '__main__':
    with local_project_id_override(GAE_PROJECT_STAGING):
        SUPERVISION_SUCCESS_BY_PERIOD_BY_DEMOGRAPHICS_VIEW_BUILDER.build_and_print(
        )
Пример #12
0
    MAX(external_id) AS external_id
  FROM
    latest_interaction_dates
  LEFT JOIN
    `{project_id}.state.state_assessment`
  USING (person_id, state_code, assessment_date)
  GROUP BY person_id, state_code, assessment_date
)
SELECT
    person_id,
    state_code,
    assessment_date AS most_recent_assessment_date,
    assessment_score
FROM
    latest_assessments
INNER JOIN
    `{project_id}.state.state_assessment`
USING (person_id, state_code, assessment_date, external_id)
"""

LATEST_ASSESSMENTS_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=VIEWS_DATASET,
    view_id="latest_assessments",
    view_query_template=LATEST_ASSESSMENTS_QUERY_VIEW,
    dataflow_metrics_materialized_dataset=DATAFLOW_METRICS_MATERIALIZED_DATASET,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        LATEST_ASSESSMENTS_VIEW_BUILDER.build_and_print()
/*{description}*/
SELECT BondAmounts.booking_id,
  -- We don't need to use IF statements for all of the below, but keep them for consistency.
  IF(BondAmounts.denied_count > 0, True, False) AS denied,
  IF(BondAmounts.denied_count > 0, NULL, BondAmounts.total_bond_dollars) AS total_bond_dollars,
  IF((BondAmounts.total_bond_dollars IS NULL AND BondAmounts.denied_count = 0), True, False) AS unknown
FROM (
  SELECT
    Bond.booking_id,
    SUM(Bond.amount_dollars) AS total_bond_dollars,
    COUNTIF(Bond.denied) AS denied_count,
    -- unknown_count is not used, but keep it for consistency.
    COUNTIF(Bond.unknown) AS unknown_count
  FROM `{project_id}.{views_dataset}.{bond_amounts_unknown_denied_view}` Bond
  GROUP BY booking_id
) BondAmounts
"""

BOND_AMOUNTS_BY_BOOKING_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=BOND_AMOUNTS_BY_BOOKING_VIEW_NAME,
    view_query_template=BOND_AMOUNTS_BY_BOOKING_QUERY_TEMPLATE,
    description=BOND_AMOUNTS_BY_BOOKING_DESCRIPTION,
    views_dataset=dataset_config.VIEWS_DATASET,
    bond_amounts_unknown_denied_view=BOND_AMOUNTS_UNKNOWN_DENIED_VIEW_BUILDER.
    view_id)

if __name__ == '__main__':
    with local_project_id_override(GAE_PROJECT_STAGING):
        BOND_AMOUNTS_BY_BOOKING_VIEW_BUILDER.build_and_print()
Пример #14
0
SUPERVISION_PERIOD_TO_AGENT_ASSOCIATION_QUERY_TEMPLATE = \
    """
    /*{description}*/
    SELECT 
      sup.state_code, 
      sup.supervision_period_id, 
      agents.agent_id, 
      CAST(agents.agent_external_id AS STRING) as agent_external_id, 
      CAST(agents.latest_district_external_id AS STRING) AS district_external_id
    FROM 
      `{project_id}.{base_dataset}.state_supervision_period` sup
    LEFT JOIN 
      `{project_id}.{reference_views_dataset}.augmented_agent_info` agents
    ON agents.state_code = sup.state_code AND agents.agent_id = sup.supervising_officer_id
    WHERE agents.external_id IS NOT NULL;
"""

SUPERVISION_PERIOD_TO_AGENT_ASSOCIATION_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.REFERENCE_VIEWS_DATASET,
    view_id=SUPERVISION_PERIOD_TO_AGENT_ASSOCIATION_VIEW_NAME,
    view_query_template=SUPERVISION_PERIOD_TO_AGENT_ASSOCIATION_QUERY_TEMPLATE,
    description=SUPERVISION_PERIOD_TO_AGENT_ASSOCIATION_DESCRIPTION,
    base_dataset=dataset_config.STATE_BASE_DATASET,
    reference_views_dataset=dataset_config.REFERENCE_VIEWS_DATASET,
)

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        SUPERVISION_PERIOD_TO_AGENT_ASSOCIATION_VIEW_BUILDER.build_and_print()
      IFNULL(public_dashboard_success.projected_completion_count, 0) as public_dashboard_projected_completion
    FROM 
      dashboard_success
    FULL OUTER JOIN
      public_dashboard_success
    USING (state_code, metric_period_months, district, supervision_type)
     -- We cannot compare district breakdowns for probation because the public dashboard uses judicial districts --
    WHERE  (supervision_type = 'PAROLE' OR district = 'ALL')
    -- Only compare metric periods for which both dashboards are producing output --
    AND metric_period_months IN 
    (SELECT * FROM dashboard_metric_periods)
    AND metric_period_months IN
    (SELECT * FROM public_dashboard_metric_periods)
    ORDER BY state_code, metric_period_months, district, supervision_type
"""

SUPERVISION_SUCCESS_BY_PERIOD_DASHBOARD_COMPARISON_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=SUPERVISION_SUCCESS_BY_PERIOD_DASHBOARD_COMPARISON_VIEW_NAME,
    view_query_template=
    SUPERVISION_SUCCESS_BY_PERIOD_DASHBOARD_COMPARISON_QUERY_TEMPLATE,
    description=SUPERVISION_SUCCESS_BY_PERIOD_DASHBOARD_COMPARISON_DESCRIPTION,
    dashboard_dataset=state_dataset_config.DASHBOARD_VIEWS_DATASET,
    public_dashboard_dataset=state_dataset_config.
    PUBLIC_DASHBOARD_VIEWS_DATASET)

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        SUPERVISION_SUCCESS_BY_PERIOD_DASHBOARD_COMPARISON_VIEW_BUILDER.build_and_print(
        )
Пример #16
0
PARTITION_COLUMNS = ["state_code", "metric_period_months"]
CALCULATED_COLUMNS_TO_VALIDATE = ["population_count"]
MUTUALLY_EXCLUSIVE_BREAKDOWN_COLUMNS = ["race_or_ethnicity"]

INCARCERATION_POPULATION_BY_PRIORITIZED_RACE_AND_ETHNICITY_BY_PERIOD_INTERNAL_CONSISTENCY_QUERY_TEMPLATE = f"""
/*{{description}}*/
{internal_consistency_query(partition_columns=PARTITION_COLUMNS,
                            mutually_exclusive_breakdown_columns=MUTUALLY_EXCLUSIVE_BREAKDOWN_COLUMNS,
                            calculated_columns_to_validate=CALCULATED_COLUMNS_TO_VALIDATE)}
"""

INCARCERATION_POPULATION_BY_PRIORITIZED_RACE_AND_ETHNICITY_BY_PERIOD_INTERNAL_CONSISTENCY_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=
    INCARCERATION_POPULATION_BY_PRIORITIZED_RACE_AND_ETHNICITY_BY_PERIOD_INTERNAL_CONSISTENCY_VIEW_NAME,
    view_query_template=
    INCARCERATION_POPULATION_BY_PRIORITIZED_RACE_AND_ETHNICITY_BY_PERIOD_INTERNAL_CONSISTENCY_QUERY_TEMPLATE,
    description=
    INCARCERATION_POPULATION_BY_PRIORITIZED_RACE_AND_ETHNICITY_BY_PERIOD_INTERNAL_CONSISTENCY_DESCRIPTION,
    validated_table_dataset_id=state_dataset_config.
    PUBLIC_DASHBOARD_VIEWS_DATASET,
    validated_table_id=
    INCARCERATION_POPULATION_BY_PRIORITIZED_RACE_AND_ETHNICITY_BY_PERIOD_VIEW_NAME,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        INCARCERATION_POPULATION_BY_PRIORITIZED_RACE_AND_ETHNICITY_BY_PERIOD_INTERNAL_CONSISTENCY_VIEW_BUILDER.build_and_print(
        )
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
# =============================================================================
"""Single count data used for stitch"""

import os
from recidiviz.big_query.big_query_view import SimpleBigQueryViewBuilder
from recidiviz.calculator.query.county import dataset_config
from recidiviz.utils.environment import GCP_PROJECT_STAGING
from recidiviz.utils.metadata import local_project_id_override

SINGLE_COUNT_AGGREGATE_VIEW_ID: str = 'single_count_aggregate'

_DESCRIPTION = """
Copy single count data to a format for stitching.
"""

with open(os.path.splitext(__file__)[0] + '.sql') as fp:
    _QUERY_TEMPLATE = fp.read()

SINGLE_COUNT_STITCH_SUBSET_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id='single_count_stitch_subset',
    view_query_template=_QUERY_TEMPLATE,
    base_dataset=dataset_config.COUNTY_BASE_DATASET,
    single_count_aggregate=SINGLE_COUNT_AGGREGATE_VIEW_ID,
    description=_DESCRIPTION)

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        SINGLE_COUNT_STITCH_SUBSET_VIEW_BUILDER.build_and_print()
    """
    /*{description}*/
    WITH cell_counts AS (
      SELECT state_code as region_code, SUM(total_revocations) as total_revocations
      FROM `{project_id}.{view_dataset}.revocations_matrix_cells`
      WHERE metric_period_months = 36
      GROUP BY state_code
    ),
    month_counts AS (
      SELECT state_code as region_code, SUM(total_revocations) as total_revocations
      FROM `{project_id}.{view_dataset}.revocations_matrix_by_month`
      WHERE DATE(year, month, 1) >= DATE_SUB(DATE_TRUNC(CURRENT_DATE('US/Pacific'), MONTH),
                                                      INTERVAL 36 - 1 MONTH)
      GROUP BY state_code
    )
    SELECT c.region_code, c.total_revocations as cell_sum, m.total_revocations as month_sum
    FROM cell_counts c JOIN month_counts m on c.region_code = m.region_code
"""

REVOCATION_MATRIX_COMPARISON_REVOCATION_CELL_VS_MONTH_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=REVOCATION_MATRIX_COMPARISON_REVOCATION_CELL_VS_MONTH_VIEW_NAME,
    view_query_template=REVOCATION_MATRIX_COMPARISON_REVOCATION_CELL_VS_MONTH_QUERY_TEMPLATE,
    description=REVOCATION_MATRIX_COMPARISON_REVOCATION_CELL_VS_MONTH_DESCRIPTION,
    view_dataset=state_dataset_config.DASHBOARD_VIEWS_DATASET,
)

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        REVOCATION_MATRIX_COMPARISON_REVOCATION_CELL_VS_MONTH_VIEW_BUILDER.build_and_print()
        correctional_level,
        correctional_level_priority,
        -- Indicator for whether supervision level can be assigned based on risk level/PO discretion, to determine inclusion in downgrade/upgrade counts
        correctional_level IN ('MAXIMUM', 'HIGH', 'MEDIUM', 'MINIMUM', 'LIMITED') AS is_discretionary_level
    FROM UNNEST([
        'INCARCERATED',
        'IN CUSTODY',
        'MAXIMUM',
        'HIGH',
        'MEDIUM',
        'MINIMUM',
        'LIMITED',
        'UNSUPERVISED',
        'DIVERSION',
        'INTERNAL_UNKNOWN',
        'EXTERNAL_UNKNOWN']) AS correctional_level
    WITH OFFSET AS correctional_level_priority 
    """

SUPERVISION_LEVEL_DEDUP_PRIORITY_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=ANALYST_VIEWS_DATASET,
    view_id=SUPERVISION_LEVEL_DEDUP_PRIORITY_VIEW_NAME,
    view_query_template=SUPERVISION_LEVEL_DEDUP_PRIORITY_QUERY_TEMPLATE,
    description=SUPERVISION_LEVEL_DEDUP_PRIORITY_VIEW_DESCRIPTION,
    should_materialize=False,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        SUPERVISION_LEVEL_DEDUP_PRIORITY_VIEW_BUILDER.build_and_print()
Пример #20
0
      state_code,
      outflow_to,
      compartment_duration,
      run_date,
      SUM(total_population)/total_pop AS total_population
    FROM parole_board_hold_union
    JOIN (
        SELECT
          compartment, gender, state_code, run_date,
          SUM(total_population) AS total_pop
        FROM parole_board_hold_union
        GROUP BY compartment, gender, state_code, run_date
    )
      USING (compartment, gender, state_code, run_date)
    GROUP BY compartment, gender, state_code, outflow_to, compartment_duration, run_date, total_pop
    """

US_ID_PAROLE_BOARD_HOLD_FULL_TRANSITIONS_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.POPULATION_PROJECTION_DATASET,
    view_id=US_ID_PAROLE_BOARD_HOLD_FULL_TRANSITIONS_VIEW_NAME,
    view_query_template=US_ID_PAROLE_BOARD_HOLD_POPULATION_TRANSITIONS_QUERY_TEMPLATE,
    description=US_ID_PAROLE_BOARD_HOLD_POPULATION_TRANSITIONS_VIEW_DESCRIPTION,
    analyst_dataset=dataset_config.ANALYST_VIEWS_DATASET,
    population_projection_dataset=dataset_config.POPULATION_PROJECTION_DATASET,
    should_materialize=True,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        US_ID_PAROLE_BOARD_HOLD_FULL_TRANSITIONS_VIEW_BUILDER.build_and_print()
      week_num, report_year, s.state_code, s.cohort, s.person_id,
      s.start_date, s.termination_date,
      i.admission_date, i.incarceration_type,
      DATE_DIFF(report_end_date, GREATEST(earliest_start_date, s.start_date), DAY) AS days_since_start,
      DATE_DIFF(i.admission_date, GREATEST(earliest_start_date, s.start_date), DAY) AS days_until_admission,
      DATE_DIFF(COALESCE(i.admission_date, report_end_date), GREATEST(earliest_start_date, s.start_date), DAY) AS survival_days,
      -- Indicate if this person should be counted as active during this report period
      CASE WHEN admission_date IS NOT NULL THEN admission_date >= report_start_date
           WHEN termination_date IS NOT NULL THEN termination_date >= report_start_date
           ELSE TRUE END AS report_week_cohort
    FROM unique_person_supervision s
    LEFT JOIN incarcerations i
      USING (state_code, person_id, week_num, report_year)
    JOIN report_dates r USING (week_num, report_year)
    WHERE supervision_rank = 1
"""

US_ID_SUPERVISION_COMMUNITY_PERFORMANCE_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.COVID_REPORT_DATASET,
    reference_dataset=dataset_config.REFERENCE_VIEWS_DATASET,
    state_dataset=dataset_config.STATE_BASE_DATASET,
    view_id=US_ID_SUPERVISION_COMMUNITY_PERFORMANCE_VIEW_NAME,
    view_query_template=US_ID_SUPERVISION_COMMUNITY_PERFORMANCE_QUERY_TEMPLATE,
    description=US_ID_SUPERVISION_COMMUNITY_PERFORMANCE_DESCRIPTION,
    covid_report_dataset=COVID_REPORT_DATASET,
)

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        US_ID_SUPERVISION_COMMUNITY_PERFORMANCE_VIEW_BUILDER.build_and_print()
        USING (state_code, job_id, year, month, metric_period_months),
      {district_dimension}
      WHERE methodology = 'PERSON'
        AND metric_period_months = 0
        AND person_id IS NOT NULL
        AND year >= EXTRACT(YEAR FROM DATE_SUB(CURRENT_DATE(), INTERVAL 4 YEAR))
        -- Get population count for the last day of the month
        AND date_of_stay = DATE_SUB(DATE_ADD(DATE(year, month, 1), INTERVAL 1 MONTH), INTERVAL 1 DAY)
        AND job.metric_type = 'INCARCERATION_POPULATION'
      GROUP BY state_code, year, month, district
    ) inc_pop
    USING (state_code, year, month, district)
    WHERE year >= EXTRACT(YEAR FROM DATE_SUB(CURRENT_DATE(), INTERVAL 3 YEAR))
      AND district IS NOT NULL
    ORDER BY state_code, district, year, month 
"""

ADMISSIONS_VERSUS_RELEASES_BY_MONTH_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.DASHBOARD_VIEWS_DATASET,
    view_id=ADMISSIONS_VERSUS_RELEASES_BY_MONTH_VIEW_NAME,
    view_query_template=ADMISSIONS_VERSUS_RELEASES_BY_MONTH_QUERY_TEMPLATE,
    description=ADMISSIONS_VERSUS_RELEASES_BY_MONTH_DESCRIPTION,
    reference_dataset=dataset_config.REFERENCE_TABLES_DATASET,
    metrics_dataset=dataset_config.DATAFLOW_METRICS_DATASET,
    district_dimension=bq_utils.unnest_district(
        district_column='county_of_residence'))

if __name__ == '__main__':
    with local_project_id_override(GAE_PROJECT_STAGING):
        ADMISSIONS_VERSUS_RELEASES_BY_MONTH_VIEW_BUILDER.build_and_print()
from recidiviz.calculator.query.state import dataset_config as state_dataset_config
from recidiviz.persistence.entity.state.entities import StateIncarcerationPeriod
from recidiviz.utils.environment import GCP_PROJECT_STAGING
from recidiviz.utils.metadata import local_project_id_override
from recidiviz.validation.views import dataset_config
from recidiviz.validation.views.state.overlapping_periods_template import (
    overlapping_periods_query,
)

OVERLAPPING_INCARCERATION_PERIODS_VIEW_NAME = "overlapping_incarceration_periods"

OVERLAPPING_INCARCERATION_PERIODS_DESCRIPTION = """ Incarceration periods with another incarceration
period with overlapping dates """

OVERLAPPING_INCARCERATION_PERIODS_QUERY_TEMPLATE = f"""
  /*{{description}}*/
  {overlapping_periods_query(StateIncarcerationPeriod)}
"""

OVERLAPPING_INCARCERATION_PERIODS_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=OVERLAPPING_INCARCERATION_PERIODS_VIEW_NAME,
    view_query_template=OVERLAPPING_INCARCERATION_PERIODS_QUERY_TEMPLATE,
    description=OVERLAPPING_INCARCERATION_PERIODS_DESCRIPTION,
    state_dataset=state_dataset_config.STATE_BASE_DATASET,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        OVERLAPPING_INCARCERATION_PERIODS_VIEW_BUILDER.build_and_print()
      {supervision_dimension}
      WHERE methodology = 'EVENT'
        AND metric_period_months = 1
        AND assessment_type = 'LSIR'
        AND assessment_score_change IS NOT NULL
        AND person_id IS NOT NULL
        AND month IS NOT NULL
        AND year >= EXTRACT(YEAR FROM DATE_SUB(CURRENT_DATE(), INTERVAL 3 YEAR))
        AND job.metric_type = 'SUPERVISION_TERMINATION'
    )
    WHERE supervision_type IN ('ALL', 'PAROLE', 'PROBATION')
      AND supervision_rank = 1
    GROUP BY state_code, termination_year, termination_month, supervision_type, district
    ORDER BY state_code, termination_year, termination_month, district, supervision_type
    """

AVERAGE_CHANGE_LSIR_SCORE_MONTH_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.DASHBOARD_VIEWS_DATASET,
    view_id=AVERAGE_CHANGE_LSIR_SCORE_MONTH_VIEW_NAME,
    view_query_template=AVERAGE_CHANGE_LSIR_SCORE_MONTH_QUERY_TEMPLATE,
    description=AVERAGE_CHANGE_LSIR_SCORE_MONTH_DESCRIPTION,
    metrics_dataset=dataset_config.DATAFLOW_METRICS_DATASET,
    reference_dataset=dataset_config.REFERENCE_TABLES_DATASET,
    district_dimension=bq_utils.unnest_district(),
    supervision_dimension=bq_utils.unnest_supervision_type(),
)

if __name__ == '__main__':
    with local_project_id_override(GAE_PROJECT_STAGING):
        AVERAGE_CHANGE_LSIR_SCORE_MONTH_VIEW_BUILDER.build_and_print()
  NULL AS female_black,
  NULL AS female_native_american,
  NULL AS female_latino,
  NULL AS female_white,
  NULL AS female_other,
  NULL AS female_unknown_race,

  NULL AS unknown_gender_asian,
  NULL AS unknown_gender_black,
  NULL AS unknown_gender_native_american,
  NULL AS unknown_gender_latino,
  NULL AS unknown_gender_white,
  NULL AS unknown_gender_other,
  NULL AS unknown_gender_unknown_race
FROM
  `{project_id}.{vera_dataset}.{incarceration_trends}`
"""

INCARCERATION_TRENDS_STITCH_SUBSET_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id="incarceration_trends_stitch_subset",
    view_query_template=_QUERY_TEMPLATE,
    vera_dataset=VERA_DATASET,
    incarceration_trends=INCARCERATION_TRENDS_TABLE,
    description=_DESCRIPTION,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        INCARCERATION_TRENDS_STITCH_SUBSET_VIEW_BUILDER.build_and_print()
      SELECT state_code as region_code, year, month, SUM(discharge_count) as discharge_count
      FROM `{project_id}.{view_dataset}.supervision_discharges_by_officer_by_month`
      WHERE district != 'ALL' AND officer_external_id != 'ALL'
      GROUP BY region_code, year, month
    )
    SELECT region_code, year, month,
       by_month.absconsion_count as absconsions_by_month,
       absconsions_by_officer.absconsion_count as absconsions_by_officer,

       by_month.discharge_count as discharges_by_month,
       discharges_by_officer.discharge_count as discharges_by_officer
    FROM by_month
    FULL OUTER JOIN absconsions_by_officer USING (region_code, year, month)
    FULL OUTER JOIN discharges_by_officer USING (region_code, year, month)
    WHERE by_month.absconsion_count != absconsions_by_officer.absconsion_count
      OR by_month.discharge_count != discharges_by_officer.discharge_count
    ORDER BY region_code, year, month
"""

CASE_TERMINATIONS_BY_TYPE_COMPARISON_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=CASE_TERMINATIONS_BY_TYPE_COMPARISON_VIEW_NAME,
    view_query_template=CASE_TERMINATIONS_BY_TYPE_COMPARISON_QUERY_TEMPLATE,
    description=CASE_TERMINATIONS_BY_TYPE_COMPARISON_DESCRIPTION,
    view_dataset=state_dataset_config.DASHBOARD_VIEWS_DATASET,
)

if __name__ == '__main__':
    with local_project_id_override(GAE_PROJECT_STAGING):
        CASE_TERMINATIONS_BY_TYPE_COMPARISON_VIEW_BUILDER.build_and_print()
Пример #27
0
            `{project_id}.{base_dataset}.state_person` 
            USING (state_code, person_id))
        GROUP BY state_code, facility, date_of_stay) 
    LEFT JOIN
      `{project_id}.{static_reference_dataset}.state_incarceration_facility_capacity`
    USING (state_code, facility)
    ORDER BY state_code, facility, date_of_stay
"""

FACILITY_POPULATION_BY_AGE_WITH_CAPACITY_BY_DAY_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.COVID_REPORT_DATASET,
    view_id=FACILITY_POPULATION_BY_AGE_WITH_CAPACITY_BY_DAY_VIEW_NAME,
    view_query_template=
    FACILITY_POPULATION_BY_AGE_WITH_CAPACITY_BY_DAY_QUERY_TEMPLATE,
    description=FACILITY_POPULATION_BY_AGE_WITH_CAPACITY_BY_DAY_DESCRIPTION,
    base_dataset=STATE_BASE_DATASET,
    metrics_dataset=DATAFLOW_METRICS_DATASET,
    static_reference_dataset=STATIC_REFERENCE_TABLES_DATASET,
    reference_views_dataset=dataset_config.REFERENCE_VIEWS_DATASET,
    facility_dimension=bq_utils.unnest_column('facility', 'facility'),
    state_specific_facility_exclusion=state_specific_query_strings.
    state_specific_facility_exclusion(),
    filter_to_most_recent_job_id_for_metric=bq_utils.
    filter_to_most_recent_job_id_for_metric(
        reference_dataset=dataset_config.REFERENCE_VIEWS_DATASET))

if __name__ == '__main__':
    with local_project_id_override(GCP_PROJECT_STAGING):
        FACILITY_POPULATION_BY_AGE_WITH_CAPACITY_BY_DAY_VIEW_BUILDER.build_and_print(
        )
Пример #28
0
            BW_SCD = FH_SCD
        WHERE
          BW_DOC IS NOT NULL AND
          BW_CYC IS NOT NULL AND
          BV_SEO IS NOT NULL AND
          BW_SSO IS NOT NULL
    ) all_statuses
    LEFT OUTER JOIN
      `{project_id}.{base_dataset}.state_supervision_sentence` supervision_sentences
    ON
        supervision_sentences.external_id = sentence_external_id
    LEFT OUTER JOIN
      `{project_id}.{base_dataset}.state_incarceration_sentence` incarceration_sentences
    ON
        incarceration_sentences.external_id = sentence_external_id
    WHERE (incarceration_sentences.person_id IS NOT NULL OR supervision_sentences.person_id IS NOT NULL);
"""

US_MO_SENTENCE_STATUSES_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.REFERENCE_VIEWS_DATASET,
    view_id=US_MO_SENTENCE_STATUSES_VIEW_NAME,
    view_query_template=US_MO_SENTENCE_STATUSES_QUERY_TEMPLATE,
    description=US_MO_SENTENCE_STATUSES_DESCRIPTION,
    base_dataset=dataset_config.STATE_BASE_DATASET,
    static_reference_dataset=dataset_config.STATIC_REFERENCE_TABLES_DATASET,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        US_MO_SENTENCE_STATUSES_VIEW_BUILDER.build_and_print()
Пример #29
0
    INNER JOIN `{project_id}.{vitals_views_dataset}.supervision_population_by_po_by_day_materialized` sup_pop
        ON sup_pop.state_code = overdue_contacts.state_code
        AND sup_pop.date_of_supervision = overdue_contacts.date_of_supervision
        AND sup_pop.supervising_officer_external_id = overdue_contacts.supervising_officer_external_id
        AND {vitals_state_specific_join_with_supervision_population}
    WHERE overdue_contacts.level_1_supervision_location_external_id = 'ALL' OR overdue_contacts.state_code IN {vitals_level_1_state_codes}
    """

TIMELY_CONTACT_BY_PO_BY_DAY_VIEW_BUILDER = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VITALS_REPORT_DATASET,
    view_id=TIMELY_CONTACT_BY_PO_BY_DAY_VIEW_NAME,
    view_query_template=TIMELY_CONTACT_BY_PO_BY_DAY_QUERY_TEMPLATE,
    description=TIMELY_CONTACT_BY_PO_BY_DAY_DESCRIPTION,
    materialized_metrics_dataset=dataset_config.
    DATAFLOW_METRICS_MATERIALIZED_DATASET,
    reference_views_dataset=dataset_config.REFERENCE_VIEWS_DATASET,
    vitals_views_dataset=dataset_config.VITALS_REPORT_DATASET,
    vitals_state_specific_join_with_supervision_location_ids=
    state_specific_query_strings.
    vitals_state_specific_join_with_supervision_location_ids(
        "overdue_contacts"),
    vitals_state_specific_join_with_supervision_population=
    state_specific_query_strings.
    vitals_state_specific_join_with_supervision_population("overdue_contacts"),
    vitals_level_1_state_codes=VITALS_LEVEL_1_SUPERVISION_LOCATION_OPTIONS,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        TIMELY_CONTACT_BY_PO_BY_DAY_VIEW_BUILDER.build_and_print()
Пример #30
0
        CASE WHEN dataflow.end_reason IN ('COMMUTED', 'COMPASSIONATE', 'CONDITIONAL_RELEASE', 'SENTENCE_SERVED') THEN 1 ELSE 0 END AS dataflow_release,
        CASE WHEN dataflow.end_reason IN ('COMMUTED', 'COMPASSIONATE', 'CONDITIONAL_RELEASE', 'SENTENCE_SERVED')
            AND sessions.person_id IS NOT NULL THEN 1 ELSE 0 END AS sub_session_release,
        CASE WHEN dataflow.end_reason IN ('COMMUTED', 'COMPASSIONATE', 'CONDITIONAL_RELEASE', 'SENTENCE_SERVED')
            AND sessions.last_sub_session_in_session = 1 THEN 1 ELSE 0 END AS session_release,
    FROM `{project_id}.{analyst_dataset}.compartment_sub_sessions_materialized` sessions
    FULL OUTER JOIN dataflow_session_ends dataflow
        USING(person_id, end_date, state_code, compartment_level_1)
    WHERE end_date IS NOT NULL
        AND compartment_level_1 = 'INCARCERATION'
        AND EXTRACT(YEAR FROM end_date) > EXTRACT(YEAR FROM DATE_SUB(CURRENT_DATE(), INTERVAL 20 YEAR))

    ORDER BY state_code, end_date
    """

SUB_SESSIONS_INCARCERATION_RELEASES_TO_DATAFLOW_VIEW_BUILDER_DISAGGREGATED = SimpleBigQueryViewBuilder(
    dataset_id=dataset_config.VIEWS_DATASET,
    view_id=
    SUB_SESSIONS_INCARCERATION_RELEASES_TO_DATAFLOW_DISAGGREGATED_VIEW_NAME,
    view_query_template=
    SUB_SESSIONS_INCARCERATION_RELEASES_TO_DATAFLOW_DISAGGREGATED_QUERY_TEMPLATE,
    description=
    SUB_SESSIONS_INCARCERATION_RELEASES_TO_DATAFLOW_DISAGGREGATED_DESCRIPTION,
    analyst_dataset=ANALYST_VIEWS_DATASET,
)

if __name__ == "__main__":
    with local_project_id_override(GCP_PROJECT_STAGING):
        SUB_SESSIONS_INCARCERATION_RELEASES_TO_DATAFLOW_VIEW_BUILDER_DISAGGREGATED.build_and_print(
        )