Declare reject rules and quality gates so sync and enrichment surface bad records before they reach search, Content Review, or Role Assistant context.
Prerequisites
- Configure metadata and identity with indexed fields referenced by rules
- Configure business vocabulary materializing rule fields
Where it lives
| Layer | Location |
|---|---|
| Quality band | <datasourceKey>.json → quality.rejectIf[] |
| UI | Business Entity Quality tab (?tab=quality) |
Manifest section: datasource.dataQuality.
Builder MCP
| Manifest section | datasource.dataQuality |
| UI tab | Quality (?tab=quality) |
| Help topics | section, goldenExample |
| Repair hooks | — |
Quality rules reference normalized field names from metadataSchema, not vendor JSON paths.
How to set
- Validate metadata bands — rules must target mapped, indexed fields:
aifabrix repair <systemKey> --dry-run
aifabrix datasource validate <datasourceKey>
- Add reject rules for empty or invalid governed fields:
{
"quality": {
"rejectIf": [
{
"field": "externalId",
"operator": "empty",
"message": "External id cannot be empty"
},
{
"field": "name",
"operator": "empty",
"message": "Display name cannot be empty"
},
{
"field": "country",
"operator": "empty",
"message": "Country required for regional policy"
}
]
}
}
- Align operators with platform-supported set for your schema version.
- Validate system after rule changes:
aifabrix validate <systemKey>
aifabrix test-integration <systemKey>
Defaults and examples
| Element | Purpose | Example |
|---|---|---|
field |
Normalized metadata key | externalId, name |
operator |
Reject condition | empty, supported comparators |
message |
Operator-facing reason | Plain language — not vendor codes |
Example quality band on document storage:
{
"quality": {
"rejectIf": [
{
"field": "externalId",
"operator": "empty",
"message": "Document external id required"
},
{
"field": "title",
"operator": "empty",
"message": "Document title required for review queues"
}
]
}
}
Illustrative quality goals:
- reject before bad rows enter search indexes
- messages reference business field names operators recognize
- rules align with Content Review dimensions — not a substitute for human approval
Validate
aifabrix datasource validate <datasourceKey>
aifabrix validate <systemKey>
aifabrix test-integration <systemKey>
See CLI workflow for full ladder. Failed quality during sync surfaces in integration test evidence. Add rules incrementally — start with required identity fields, then domain-specific checks once vocabulary mapping is stable.
Common mistakes
| Mistake | Fix |
|---|---|
| Rule on unmapped vendor field | Map in fieldMappings.attributes first |
| Quality without indexed schema property | Add property to metadataSchema |
| Using quality instead of Content Review | Human approval uses documentStorage + dimensions |
| Over-broad reject rules | Target fields that block governance only |
| Reject on optional marketing fields | Gate only identity and policy-critical attributes |
Limits
Quality operators vary by schema version — validate after platform upgrades. Reject rules do not replace ABAC or protection; they filter ingest only. Complex validation logic may require CIP transform steps in Configure data flow. Start with externalId and display-name rules before adding domain-specific checks — most certification failures trace to missing join identity rather than optional attribute gaps. Pair quality rules with integration test evidence so reject messages are visible before production sync schedules activate. When adding country or region rules, confirm the field is indexed in metadataSchema and bound in top-level dimensions for policy consistency. Quality rejections appear in sync logs and integration test output — treat them as early signals before records reach search indexes or Role Assistant context windows.