Checks

A Check is a named group of constraints with a severity level. You build checks using the fluent CheckBuilder API.

Creating Checks

from qualink.checks import Check, Level

check = (
    Check.builder("My Check")
    .with_level(Level.ERROR)
    .with_description("Validates critical business rules")
    .is_complete("user_id")
    .is_unique("email")
    .has_size(Assertion.greater_than(0))
    .build()
)

CheckBuilder Methods

The CheckBuilder provides fluent methods for every built-in constraint type. Each method adds a constraint and returns the builder for chaining.

Structural Checks

Method Description
.has_column(column) Column exists in table
.has_size(assertion) Row count satisfies assertion
.has_column_count(assertion) Column count satisfies assertion

Completeness

Method Description
.is_complete(column) 100% non-null values
.has_completeness(column, assertion) Non-null fraction satisfies assertion

Uniqueness

Method Description
.is_unique(*columns) All values are unique
.is_primary_key(*columns) Alias for is_unique
.has_uniqueness(columns, assertion) Uniqueness fraction satisfies assertion
.has_distinctness(columns, assertion) Distinctness ratio satisfies assertion
.has_unique_value_ratio(columns, assertion) Unique-value ratio satisfies assertion

Statistics

Method Description
.has_min(column, assertion) Minimum value satisfies assertion
.has_max(column, assertion) Maximum value satisfies assertion
.has_mean(column, assertion) Mean value satisfies assertion
.has_sum(column, assertion) Sum satisfies assertion
.has_standard_deviation(column, assertion) Std dev satisfies assertion

String Lengths

Method Description
.has_min_length(column, assertion) Min string length satisfies assertion
.has_max_length(column, assertion) Max string length satisfies assertion

Approximate Statistics

Method Description
.has_approx_count_distinct(column, assertion) Approx distinct count satisfies assertion
.has_approx_quantile(column, quantile, assertion) Approx quantile satisfies assertion

Patterns & Formats

Method Description
.has_pattern(column, pattern, assertion?) Regex pattern match fraction
.contains_email(column) All values are valid emails
.contains_url(column) All values are valid URLs
.contains_credit_card(column) All values are credit card numbers
.contains_ssn(column) All values are SSN format

Business Rules

Method Description
.satisfies(predicate, name, assertion?) SQL predicate compliance
.custom_sql(expression) Raw SQL boolean expression

Correlation

Method Description
.has_correlation(col_a, col_b, assertion) Pearson correlation satisfies assertion

Cross-Table Comparisons

Method Description
.referential_integrity(child_table, child_col, parent_table, parent_col, assertion) FK integrity check
.row_count_match(table_a, table_b, assertion) Row count ratio between tables
.schema_match(table_a, table_b, assertion) Schema compatibility check

Example: Multiple Checks

from qualink.checks import Check, Level
from qualink.constraints import Assertion

critical = (
    Check.builder("Critical")
    .with_level(Level.ERROR)
    .is_complete("id")
    .is_unique("id")
    .has_size(Assertion.greater_than(0))
    .build()
)

quality = (
    Check.builder("Data Quality")
    .with_level(Level.WARNING)
    .has_completeness("email", Assertion.greater_than_or_equal(0.95))
    .has_min("age", Assertion.greater_than_or_equal(0))
    .has_max("age", Assertion.less_than_or_equal(150))
    .has_mean("age", Assertion.between(20, 60))
    .build()
)

informational = (
    Check.builder("Stats")
    .with_level(Level.INFO)
    .has_approx_count_distinct("city", Assertion.greater_than(10))
    .has_standard_deviation("salary", Assertion.less_than(50000))
    .build()
)