A generic AI extraction pass against a large tender document can surface requirements that are entirely irrelevant to the bidding company’s sector. A software firm submitting for an IT services contract does not need to be warned about construction material specifications — and a procurement auditor should not have to manually discard them. TenderCheck AI’s industry validation system addresses this by applying a sector-specific scope check immediately after requirement extraction, flagging out-of-scope tenders before you invest time in a full proposal validation.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/elecodes/TenderCheck-AI/llms.txt
Use this file to discover all available pages before exploring further.
How It Works
Industry validation runs as part of theCreateTender use case, after the AI extraction pipeline completes but before the analysis is persisted to the database. The pipeline has three components:
-
ValidationRuleFactory— queries theindustry_presetstable in Turso with theindustrystring provided by the user. It returns one or moreIRuleinstances configured for that sector. If the database query fails or the industry name is not found, a hardcoded fallback rule set for Digital Services is used. -
ValidationEngine— iterates over the rule set and callsrule.validate(analysis)on each rule, collecting any non-nullValidationResultobjects. -
ScopeValidationRule— the concrete rule that performs the keyword-based scope check. Its result is prepended to theTenderAnalysis.resultsarray withrequirementId = "SCOPE_CHECK"so it can be identified and filtered separately from proposal validation results in the frontend.
Supported Industries
Industry presets are stored in theindustry_presets database table with the following schema:
| Column | Type | Description |
|---|---|---|
id | text | UUID primary key |
name | text | Industry identifier used in API requests (e.g., "Digital Services") — must be unique |
positive_keywords | text (JSON array) | Keywords that confirm the tender is in scope (e.g., ["software", "digital", "cloud"]) |
negative_keywords | text (JSON array) | Keywords that confirm the tender is out of scope (e.g., ["limpieza", "construcción"]) |
ValidationRuleFactory queries this table by name using an exact match. The default fallback (used when no industry is specified or when the DB query fails) applies the Digital Services keyword set:
You can add custom industry presets by inserting rows directly into the
industry_presets table in Turso. Use the Turso CLI or dashboard to run an INSERT statement with a name, a positive_keywords JSON array, and a negative_keywords JSON array.The Scope Validation Rule
ScopeValidationRule combines the tender title and all extracted requirement texts into a single lowercase string, then applies a two-pass keyword check:
Pass 1 — Negative keywords (fail fast):
If any negative keyword is found in the combined text, the rule immediately returns a NOT_MET result with confidence 0.9 and an explanation identifying the offending keyword. This prevents false positives when a digital services tender mentions a construction sub-item.
Pass 2 — Positive keywords:
If no negative keyword triggered, the rule checks whether at least one positive keyword appears. If none are found, it returns an AMBIGUOUS result with confidence 0.6 (the tender may or may not be in scope). If at least one positive keyword is present, it returns a MET result with confidence 0.85.
SCOPE_CHECK result is filtered out of the main compliance statistics in ValidationSummary (it is excluded from the mandatory/optional requirement counts) so it does not skew the overall compliance score.
Using Industry Validation in the UI
When uploading a tender PDF from the dashboard, an optional industry dropdown appears in the upload form. Selecting an industry sends theindustry parameter to the backend along with the PDF file.
Upload your tender PDF
Drag and drop or click to select the tender document in the Pliego upload zone.
Select an industry (optional)
Choose the relevant sector from the industry dropdown. Available options are driven by the
industry_presets table. If no selection is made, the backend defaults to Digital Services.Submit the analysis
The backend runs requirement extraction followed immediately by the scope validation rule for the selected industry. The
SCOPE_CHECK result is saved as part of the analysis.Using Industry Validation via API
You can also trigger industry-scoped analysis directly via the REST API by sending amultipart/form-data request to the tender analysis endpoint.
| Field | Type | Required | Description |
|---|---|---|---|
file | PDF binary | ✅ Yes | The tender document to analyse |
industry | string | ❌ No | Industry name matching an industry_presets.name value |
curl:
industry field is omitted, the backend uses Digital Services as the default and applies the hardcoded fallback keyword set.
To add a new industry to the platform, insert a row into the
industry_presets table in your Turso database. The new industry will be available immediately — no code changes or redeployment are required. Use descriptive name values that match exactly what you will pass in the industry API field or select in the UI dropdown.