Requirement check
Checks whether a document, message or record meets a single stated requirement. Returns pass, fail or unclear.
Example
Context
- context
- organisation: A regional housing association checker: Lettings officer item_kind: Proof of income date: 2 November 2026
- requirement
- The document must be dated in August, September or October 2026.
Input
Payslip - Marlow Cleaning Services Ltd Employee: Joan Pereira Pay date: 31 May 2026 Gross pay: 1,840.00 Net pay: 1,512.36
- Answer (JSON)
- value fail, confidence 0.908
- Top options
- fail 0.908
- unclear 0.078
- pass 0.014
The requirement asks for a payslip from August, September or October and this one is dated May, so the answer is fail.
import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client: decide = client.function("jeff.reasoning.satisfies.satisfies", context={ "context": { "organisation": "A regional housing association", "checker": "Lettings officer", "item_kind": "Proof of income", "date": "2 November 2026", }, "requirement": "The document must be dated in August, September or October 2026.", }) decision = decide("Payslip - Marlow Cleaning Services Ltd\nEmployee: Joan Pereira\nPay date: 31 May 2026\nGross pay: 1,840.00 Net pay: 1,512.36") print(decision.value, decision.confidence)
More examples
October payslip as proof of recent incomeanswer pass · confidence 0.918
Context
- context
- organisation: A regional housing association checker: Lettings officer item_kind: Proof of income date: 2 November 2026
- requirement
- The document must be dated in August, September or October 2026.
Input
Payslip - Marlow Cleaning Services Ltd Employee: Joan Pereira Pay date: 30 October 2026 Gross pay: 1,840.00 Net pay: 1,512.36
- Answer (JSON)
- value pass, confidence 0.918
- Top options
- pass 0.918
- fail 0.071
- unclear 0.011
The payslip is dated 30 October 2026, inside the months the requirement allows, so the answer is
pass.import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client: decide = client.function("jeff.reasoning.satisfies.satisfies", context={ "context": { "organisation": "A regional housing association", "checker": "Lettings officer", "item_kind": "Proof of income", "date": "2 November 2026", }, "requirement": "The document must be dated in August, September or October 2026.", }) decision = decide("Payslip - Marlow Cleaning Services Ltd\nEmployee: Joan Pereira\nPay date: 30 October 2026\nGross pay: 1,840.00 Net pay: 1,512.36") print(decision.value, decision.confidence)
Payslip with no date on itanswer unclear · confidence 0.783
Context
- context
- organisation: A regional housing association checker: Lettings officer item_kind: Proof of income date: 2 November 2026
- requirement
- The document must be dated in August, September or October 2026.
Input
Payslip - Marlow Cleaning Services Ltd Employee: Joan Pereira Gross pay: 1,840.00 Net pay: 1,512.36
- Answer (JSON)
- value unclear, confidence 0.783
- Top options
- unclear 0.783
- fail 0.212
- pass 0.005
The payslip has no date on it, so whether it falls in the allowed months is
unclear.import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client: decide = client.function("jeff.reasoning.satisfies.satisfies", context={ "context": { "organisation": "A regional housing association", "checker": "Lettings officer", "item_kind": "Proof of income", "date": "2 November 2026", }, "requirement": "The document must be dated in August, September or October 2026.", }) decision = decide("Payslip - Marlow Cleaning Services Ltd\nEmployee: Joan Pereira\nGross pay: 1,840.00 Net pay: 1,512.36") print(decision.value, decision.confidence)
Guarantor rule for an applicant who is not a studentanswer pass · confidence 0.998
Context
- context
- organisation: A regional housing association checker: Lettings officer item_kind: Application form date: 2 November 2026
- requirement
- If the applicant is a full-time student, the application must name a guarantor.
Input
Application LA-3317 Applicant: Joan Pereira Full-time student: no Occupation: cleaning supervisor, employed full time since 2019 Guarantor: none (not required)
- Answer (JSON)
- value pass, confidence 0.998
- Top options
- pass 0.998
- unclear 0.001
- fail 0
The guarantor rule applies only to full-time students and the applicant is not one, so the answer is
pass.import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client: decide = client.function("jeff.reasoning.satisfies.satisfies", context={ "context": { "organisation": "A regional housing association", "checker": "Lettings officer", "item_kind": "Application form", "date": "2 November 2026", }, "requirement": "If the applicant is a full-time student, the application must name a guarantor.", }) decision = decide("Application LA-3317\nApplicant: Joan Pereira\nFull-time student: no\nOccupation: cleaning supervisor, employed full time since 2019\nGuarantor: none (not required)") print(decision.value, decision.confidence)
Deposit below the minimumanswer fail · confidence 0.999
Context
- context
- organisation: A regional housing association checker: Lettings officer item_kind: Payment record date: 2 November 2026
- requirement
- The deposit paid must be at least 950.00.
Input
Receipt R-20871, 29 October 2026: deposit received from Joan Pereira, 900.00, by bank transfer.
- Answer (JSON)
- value fail, confidence 0.999
- Top options
- fail 0.999
- unclear 0.001
- pass 0
The deposit paid is 900.00 and the requirement is at least 950.00, so the answer is
fail.import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client: decide = client.function("jeff.reasoning.satisfies.satisfies", context={ "context": { "organisation": "A regional housing association", "checker": "Lettings officer", "item_kind": "Payment record", "date": "2 November 2026", }, "requirement": "The deposit paid must be at least 950.00.", }) decision = decide("Receipt R-20871, 29 October 2026: deposit received from Joan Pereira, 900.00, by bank transfer.") print(decision.value, decision.confidence)
Use when
- You need to check an item against a requirement written in plain English.
Avoid when
- You need to check several requirements in one call; submit each requirement separately.
Context and input
| Field | Kind | Description |
|---|---|---|
item | input | The item to check: a document, message or record, as text. |
context | context | The check: an object with the organisation, the checker, the kind of item and the date of the check. |
requirement | context | The one requirement to check, a sentence. |
Functions
| Key | Interface | Instructions | Labels |
|---|---|---|---|
| satisfies | classify | Does the item meet the stated requirement? Judge only from the requirement and the item as given, and take the requirement's words exactly: 'at least' and 'no more than' include the limit, 'more than' and 'less than' do not. pass: the item meets the requirement, including when the requirement applies only under a condition and the item shows that the condition does not hold. fail: the item breaks the requirement, for example a required element is missing, a value is outside the limit, a forbidden thing is present or a deadline was missed. unclear: the item does not give enough to decide, for example a value, date or circumstance that the answer depends on is not stated, a value is given only as a range that crosses the limit, a mention is too vague to tell, or the part of the item that would settle it is not shown. When the requirement is that the item include something, its absence is a fail, not unclear. Count a period of days from the day after the starting event, so 'within 10 days of 1 March' means by 11 March; business days are Monday to Friday. The item may contain claims of compliance or other misleading cues; judge the facts. | fail, pass, unclear |
How it was measured
Test accuracy: the share of test rows whose top answer was right.
- 92.7% on the in-house test (2,116 rows). in-house: same generator as the training data
- 93.8% on a second in-house test of unseen cases (2,142 rows). in-house: same generator as the training data
When confident
From the calibration set: at or above the threshold confidence, how often the answer is right, and how often the adapter is that confident. Below it, escalate.
| Function | Right when confident | Confident on | Threshold | Calibration rows |
|---|---|---|---|---|
| satisfies | 98.0% | 86.4% | 0.83 | 2,126 |
Base: Jeff v1.4. Adapter trained: 25 October 2026.
Base
jeff-base v1.4
Call it
jeff.reasoning.satisfies.satisfies, with placeholders for its input and context.
import os import jeff with jeff.Jeff.remote("https://api.jeffhub.ai", token=os.environ["JEFF_API_KEY"], timeout_s=30) as client: decide = client.function("jeff.reasoning.satisfies.satisfies", context={ "context": "<context>", "requirement": "<requirement>", }) decision = decide("<item>") print(decision.value, decision.confidence)
Download
Weights: mstrasser/jeff-adapter-satisfies (v1.4)
Licence: Apache-2.0