             OR
             ((job_type = 'deterministic')
              AND (include_subduction_fault_source IS NULL))),
+    interest_rate float
+        CONSTRAINT interest_rate_is_set
+        CHECK (
+            ((job_type IN ('classical_bcr', 'event_based_bcr'))
+             AND interest_rate IS NOT NULL)
+            OR
+            ((job_type NOT IN ('classical_bcr', 'event_based_bcr'))
+             AND interest_rate IS NULL)
     loss_curves_output_prefix VARCHAR,
     maximum_distance VARCHAR
         CONSTRAINT maximum_distance_is_set
         CHECK(
-            ((job_type IN ('classical', 'disaggregation', 'uhs'))
+            ((job_type IN ('classical', 'disaggregation', 'uhs',
+                           'classical_bcr', 'event_based_bcr'))
              AND (maximum_distance IS NOT NULL))
             OR
             ((job_type IN ('deterministic', 'event_based'))

    --      deterministic (Deterministic)
    --      disaggregation (Hazard only)
    --      uhs (Uniform Hazard Spectra; Hazard only)
    -- Note: 'classical' and 'event_based' are both probabilistic methods
    job_type VARCHAR NOT NULL CONSTRAINT job_type_value
        CHECK(job_type IN ('classical', 'event_based', 'deterministic',
                           'disaggregation', 'uhs')),
    -- One of: pending, running, failed, succeeded
    status VARCHAR NOT NULL DEFAULT 'pending' CONSTRAINT job_status_value
        CHECK(status IN ('pending', 'running', 'failed', 'succeeded')),

    -- ground motion correlation flag
    gm_correlated boolean CONSTRAINT gm_correlated_is_set
        CHECK(
            ((job_type IN ('classical', 'disaggregation', 'uhs',
                           'classical_bcr', 'event_based_bcr')) AND (gm_correlated IS NULL))
            OR ((job_type IN ('event_based', 'deterministic')) AND (gm_correlated IS NOT NULL))),
    gmf_calculation_number integer CONSTRAINT gmf_calculation_number_is_set
        CHECK(
