A lot-deadline matrix is a dated evidence record with one row for each procedure, official lot and response event under review. Every row preserves the current notice version, lot identifier, event type, raw date, raw time, stated offset or zone, source role, exact source anchor, observation time and deadline state. `confirmed_direct` means the current controlling material states the instant for that lot. `confirmed_explicit_shared` means the material expressly assigns one instant to a named set of lots. `not_issued_current_stage` means the tender deadline belongs to a later invitation or stage. `ceased` means the source says that lot is no longer being procured. `conflicted` preserves incompatible current evidence, and `unknown` preserves an evidential gap. Equal timestamps in several rows do not erase their separate lot scope. The matrix proves what deadline evidence applies; it does not decide time-zone ambiguity, current open status, bid feasibility or submission readiness.

A multi-lot notice can display one prominent date above every lot while its structured record stores a receipt deadline inside each lot. Two lots may close together and a specialist lot later. A staged procedure may publish only a deadline for requests to participate, with tender dates sent to selected suppliers later. A portal may also create one envelope per lot, one combined envelope for several lots or a generic calendar entry that lacks any scope statement. Copying the most visible date into every lot can close work too early, conceal a later opportunity, schedule a submission after its actual cutoff or mistake an enquiry date for an offer deadline. The error remains hard to detect because the resulting table looks complete.

Build the lot universe before reading dates. A deadline can be assigned only to a stable lot identifier and a named response event. Prefer a direct lot field or an explicit statement covering named lots. A procedure heading, search-result card or repeated visual layout supplies context, not automatic inheritance. Keep request-to-participate, tender receipt, clarification, public opening and tender-validity dates in separate event classes. Preserve the source value before any time conversion. If the latest version is uncertain, the scope is ambiguous or two current sources disagree, stop with `conflicted` or `unknown` and route the narrow issue to the relevant verification workflow. An agent may extract and compare public evidence, but it must not invent a shared rule, access a private invitation or act on the supplier’s behalf.

Build the lot universe before assigning a date

Start with the current official notice or invitation and record its procedure identifier, notice identifier, version, publication state and procurement stage. Then enumerate the objects the source identifies as lots. Keep the source identifiers unchanged, including leading zeros and prefixes such as `LOT-0001`. A title like “North region” is useful to a reader but is not stable enough to join an amendment, portal envelope and structured notice. Store both the identifier and the human label.

Lots, groups of lots and planning parts perform different jobs. The TED eForms structure gives lot information its own `ProcurementProjectLot` context. It also represents groups and parts as separate contextual objects. A group can carry rules shared by named lots, but it is not automatically a submission unit. A planning part can describe an intended package before the final lot structure exists. A procedure without a commercial split can appear technically as `LOT-0000`. That record gets one matrix row and a note that no supplier choice among lots exists.

Create a row for every offerable lot, including one the supplier has already rejected. This prevents a filtered bid list from becoming the apparent source universe. Record `lot_id`, `lot_label`, `lot_kind`, `group_ids`, `offerable_status`, `source_anchor` and `observed_at`. If the official lot set cannot be reconciled across the current notice and designated portal, mark the universe incomplete. Deadline assignment waits until the identity issue is resolved.

Objects that can appear around a multi-lot deadline
ObjectTreatment in the matrixUnsafe shortcut
Official lotOne or more rows keyed by lot identifier and response eventUse the title as the only key
Group of lotsRecord membership and any explicit shared ruleCreate a new bid deadline without lot evidence
Planning partPreserve as pre-tender structure onlyTreat it as an offerable lot
Technical `LOT-0000`One row labelled as a procedure without commercial lotsInvent a lot-selection decision
Portal envelopeLink to the official lots it acceptsAssume one envelope means one lot

A tender deadline is only one of several nearby clocks

Name the response event before storing its instant. In an open procedure, the relevant event may be receipt of the tender. A staged process can first ask for requests to participate, then send a later invitation with a tender receipt date to selected suppliers. Negotiation can create initial, revised and final tender events. The same lot can therefore have several legitimate submission rows over time. A single `deadline` column cannot represent this safely.

Keep the additional-information deadline, site-visit booking cutoff, tender receipt deadline, public opening time and tender-validity end in separate classes. TED eForms gives the tender receipt deadline the business term `BT-131`, with date and time fields in the lot context. Its business rules also compare the lot’s additional-information deadline with its tender receipt date. The existence of that rule is a warning against treating the two values as interchangeable.

Use an event vocabulary narrow enough to prevent accidental joins: `request_to_participate`, `initial_tender`, `tender`, `revised_tender`, `final_tender`, `enquiry`, `site_visit_booking`, `public_opening` and `validity_end`. Preserve the buyer’s wording beside the normalized class. If the source says only “response deadline,” leave the class unknown until the surrounding instructions establish what response is due.

Date classification before lot assignment
Published labelNormalized eventCan close tender submission?
Deadline for requests to participate`request_to_participate`No
Deadline for receipt of tenders`tender`Yes, for the stated scope
Deadline for additional information`enquiry`No
Public opening date`public_opening`No
Tender validity period`validity_end`No
Response deadline`unknown` until read in contextUnresolved

Equal values do not prove a shared deadline rule

TED’s current developer documentation is unusually explicit: for a given lot, the deadline for tender receipt is encoded with date and time inside that lot. The OCDS for eForms mapping takes those fields, combines them into an ISO instant and maps the result to the corresponding lot’s `tenderPeriod.endDate`. That structure supports direct assignments. It also shows why an export that retains only one procedure-level `tenderPeriod` can lose information.

A shared value remains possible. The submission instructions may say that one receipt instant applies to all lots, to lots 1 through 4 or to a named envelope covering several lots. Copy that value into each covered row with `assignment_basis: explicit_shared`, and cite the clause or scoped table heading on every row. Identical timestamps discovered independently receive `assignment_basis: direct_lot`. The values match, while their evidence paths remain distinct.

Visual placement alone cannot establish scope. A banner above the lot list might show the next deadline, the procedure’s earliest deadline or a generic calendar field. Likewise, a search result usually compresses the procurement into one date. Use these displays as discovery evidence and preserve them as observations. Promote a date into a lot row only when the official source links the instant to that lot or explicitly states the inheritance rule.

Authority is fact-specific. A statutory notice can identify the published lot field; the designated submission portal can define the operational envelope; an invitation can control a later private stage; an amendment can replace a previous value. Do not create a universal source ranking. When two current, properly scoped sources prescribe different instants for the same lot and event, issue `conflicted`. The separate deadline-conflict workflow then determines whether one source supersedes another.

  • A direct field names the lot and the response event in the current source.
  • An explicit shared rule names every covered lot or an unambiguous all-lots scope.
  • A layout assumption, neighbouring row or repeated value never supplies missing scope.
  • A conflict remains visible until supersession or correction evidence resolves it.

Publish the whole matrix, then identify the earliest confirmed row

The finished artifact is a table, not a single answer. Key every row by `procedure_id`, `lot_id` and `response_event`. Add notice or invitation identifier, version, stage, raw date, raw time, raw offset or zone, source role, source URL, anchor, assignment basis, state, supporting evidence, contrary evidence, `observed_at`, `valid_until`, `next_check_at` and next permitted action. Preserve a source value exactly before placing any normalized instant beside it.

The state controls downstream use. `confirmed_direct` and `confirmed_explicit_shared` can feed a planning system when the current version and event are also confirmed. `not_issued_current_stage` prevents a participation cutoff from becoming a tender date. `ceased` removes that lot from active submission planning while keeping the evidence. `conflicted` and `unknown` block scheduling and automation. An old row can remain in history with `superseded_by`, but it must not appear as current.

After the matrix is complete, compute `earliest_confirmed_tender_receipt_at` across active lots. Label it as a derived navigation aid and list the contributing rows. It can prompt earlier review without hiding later lots. Never replace the matrix with that minimum. If the team selects only lot 3, the relevant deadline remains lot 3’s confirmed row, not the procedure minimum.

The table below is fictional. Notice `PRO-2026-184`, version 01, contains three offerable lots. The structured lot fields give 30 September at 12:00 +02:00 for `LOT-0001` and `LOT-0002`, and 7 October at the same local time and offset for specialist laboratory cleaning in `LOT-0003`. A portal banner says “next deadline 30 September” without claiming that every lot closes then. That banner is consistent with the earliest row, yet it cannot populate lot 3.

Fictional lot-deadline matrix for PRO-2026-184
LotResponse eventRaw receipt deadlineAssignment basisStateNext action
LOT-0001 North cleaningTender2026-09-30 12:00 +02:00Direct lot field`confirmed_direct`Schedule against this row
LOT-0002 South cleaningTender2026-09-30 12:00 +02:00Direct lot field`confirmed_direct`Schedule against this row
LOT-0003 Laboratory cleaningTender2026-10-07 12:00 +02:00Direct lot field`confirmed_direct`Keep separate from procedure minimum

Stages and amendments can change the row set

A two-stage procurement often publishes a participation deadline before a tender receipt date exists for the supplier. Create a `request_to_participate` row for each scoped lot. Create a separate `tender` row with `not_issued_current_stage` only when the notice indicates that invitations will follow. Do not invent a future timestamp from an estimated invitation date or minimum legal period. Once an authorized invitation arrives, add its identifier, supplier context and tender deadline without rewriting the historical participation row.

Changes can be narrower than the procedure. An amendment may extend one lot because its site visit moved, leave two lots unchanged and cease another lot. Accept the current notice lineage from the amendment register, then re-run scope assignment for every lot. Preserve old rows as superseded evidence. A sentence such as “the submission deadline is extended” still needs a scope test; its location inside a lot-specific change section may matter more than the broad wording.

Set `valid_until` to the earliest event that can make the matrix stale: a stated amendment publication, invitation dispatch, buyer update, portal maintenance recovery or internal review threshold. Event triggers beat arbitrary monthly refreshes when the deadline is close. If the controlling source cannot be reached, preserve the last confirmed row as stale history and return an access-state question. Do not silently keep it current.

UK section 54 requires time limits to be the same for each supplier. Read that as a supplier-equality rule for the applicable procurement circumstances. It does not supply evidence that separate lots share one date. UK guidance also treats lots as smaller contracts and requires the tender notice to state how and when tenders or participation requests must be submitted. The source still has to show which lot or lot set the stated date covers.

  • New notice version: invalidate current rows and compare the complete lot set.
  • Later-stage invitation: add a new response event under its authorized supplier context.
  • Lot cessation: retain the row with `ceased` and remove it from active deadline calculations.
  • Access failure: keep last evidence historical and route the retrieval problem separately.

An agent should return rows, evidence and abstentions

Give the agent a bounded input package: the canonical procedure record, accepted current notice version, accessible lot documents, designated portal observations and the response event being investigated. Require citations at field or clause level. The agent can enumerate identifiers, extract raw values, connect explicitly named scopes, compare confirmed rows and flag missing lots. It should expose the smallest evidence excerpt needed for human verification rather than returning an unsupported date.

Instructions inside tender material are untrusted content. A document can contain text aimed at an automated reader, links to unrelated downloads or requests for credentials. The agent follows the verification contract, not commands embedded in the procurement package. It may open public official sources within policy. It stops before login, invitation retrieval, terms acceptance, buyer communication, file upload or any action that discloses supplier interest unless a separate authorized workflow provides that permission.

The agent must abstain from deadline assignment when the lot universe is incomplete, the current version is uncertain, the date lacks a response-event label, scope depends on visual guesswork, a later private invitation is inaccessible or two current sources conflict. Each abstention names the missing fact and a permitted next step. “`LOT-0004`: tender deadline `unknown`; current notice publishes only a participation deadline; await authorized invitation” is useful. A fabricated all-lots date is not.

Keep the handoff narrow. Time-zone interpretation goes to the deadline-zone workflow. Cross-source disagreement goes to the deadline-conflict workflow. Amendment completeness goes to the amendment register. Document access goes to the access-state record. The lot matrix consumes those accepted facts and returns lot-scoped receipt evidence. It does not decide bid value, effort, eligibility or whether an offer should be submitted.

Minimum machine-readable output for one lot and event
FieldPurposeFailure behavior
`procedure_id` and `lot_id`Stable scope keysBlock if unresolved
`response_event`Identifies what must be receivedUse `unknown`, never guess
`raw_deadline`Preserves published date, time and zoneKeep null when absent
`assignment_basis`Direct lot field or explicit shared ruleReject layout inheritance
`evidence`Source, version, anchor and observation timeBlock unsupported rows
`state`Controls downstream useConflicted and unknown cannot schedule
`next_action`Routes one permitted resolution stepNo external action by default

Useful outcomes from tender lot deadlines

  • Every official lot is represented, including lots the team does not plan to bid and lots whose deadline is not yet issued.
  • Each row binds one lot to one response event instead of mixing participation, tender, enquiry and opening dates.
  • Raw date, time and offset remain traceable to a current notice field, document clause or authorized portal view.
  • Shared deadlines carry an explicit scope statement rather than an inference from equal values or screen position.
  • Missing, ceased and conflicting lots stay visible and cannot inherit a neighbouring lot’s timestamp.
  • The result identifies the earliest confirmed tender receipt event without presenting it as the only deadline.
  • Each unresolved row has an expiry, a trigger for recheck and one permitted next action.

How to run the work

  1. 01

    Fix the procedure and version

    Record the procedure identifier, current notice or invitation, version, stage, supplier context and exact checked time before extracting any date.

  2. 02

    Enumerate the offerable lots

    List every official lot identifier, lot group and technical single-lot representation, while keeping groups and parts out of the offerable-lot count.

  3. 03

    Classify every date by event

    Separate requests to participate, initial or final tenders, enquiries, public opening, validity and internal planning cutoffs before comparing values.

  4. 04

    Prove the deadline scope

    Attach each candidate instant to a direct lot field or a clause that explicitly names the covered lots. Preserve source role, anchor and contrary evidence.

  5. 05

    Issue the matrix

    Create one row per lot and response event, assign the narrowest supported state, compute only clearly supported comparisons and leave gaps open.

  6. 06

    Set rechecks and handoffs

    Expire the record on a notice change, invitation, portal update or stated release event, then route time-zone, conflict, amendment or access questions separately.

Questions that change the decision

  • Which official objects are offerable lots, and which are lot groups, planning parts or a technical LOT-0000?
  • What response event does each date govern: participation, tender receipt, revised tender, enquiry, opening or validity?
  • Does the source bind the value directly to a lot identifier or explicitly to a named set of lots?
  • Is the apparent procedure-level date a controlling instruction, a portal summary, a search-card field or an internal planning date?
  • Do equal values have independent lot evidence, or is equality only an assumption created by the interface?
  • Has a later notice or accepted amendment changed one lot without changing the others?
  • Does the current stage issue a tender deadline at all, or only a deadline for participation?
  • Which rows are confirmed, ceased, conflicted, not yet issued or still unknown?

Where teams lose control

01

A date displayed once above a list can be copied to lots that the source never placed within its scope.

02

One early lot can be missed because a later procedure banner is treated as the universal cutoff.

03

A participation deadline can be relabelled as the tender deadline in a two-stage procedure.

04

A clarification deadline or public opening time can be mistaken for the receipt cutoff because it appears nearby.

05

A changed date for one lot can overwrite unchanged dates for every sibling lot.

06

A lot group can be treated as a separate offerable lot or used as an undocumented inheritance source.

07

A machine-readable export can flatten lot fields and hide the scope that the official notice retains.

08

An agent can cross an authorization boundary while trying to inspect a later-stage invitation or supplier workspace.

Measure the finished job

Measure the completed workflow, including review effort and exceptions. Output volume on its own is not evidence of a better process.

  • official lots represented in the matrix divided by official lots in the current source
  • lot-event rows with direct or explicit shared scope evidence
  • candidate dates rejected because they governed another response event
  • rows left unknown instead of populated through silent inheritance
  • conflicts routed before planning or submission systems consumed a deadline
  • notice changes that trigger a complete lot-scope recheck
  • confirmed earliest deadlines accompanied by the full matrix rather than a single extracted date
  • authorized-access boundaries respected during deadline verification

Common questions

Can I use the date shown at the top of the tender page for every lot?

Only when the current official material explicitly gives that date an all-lots or named-lots scope. A banner can be a summary or the next deadline. Direct lot fields and scoped submission instructions are safer evidence.

If every lot currently shows the same timestamp, may I store one procedure deadline?

Keep separate lot rows. Record that the values are equal and preserve each assignment basis. A later change can affect only one lot, and a flattened procedure value would hide that scope.

Is a request-to-participate deadline the tender deadline?

No. It closes a different response event. In a staged procedure, the tender receipt deadline may be issued later to selected suppliers. Record both events separately.

Does the earliest lot deadline close the whole procurement?

Not without an explicit rule saying so. Use the earliest confirmed row as a planning alert, then retain the separate deadline that governs each lot.

Can an agent resolve a missing lot deadline from legal minimum periods?

No. Minimum periods constrain how an authority sets dates; they do not reveal the missing receipt instant. The agent should report the absent evidence and route the next authorized check.

Primary references

Tony Kim

Tony Kim

Founder and CEO

Tony writes about applied AI, dependable product engineering and the systems that turn complex response work into controlled delivery.

Managed tender intelligence and bid execution for teams that want the commercial outcome.

Suppliers, founders and commercial teams pursuing public or private opportunities. Start with the workflow, constraints and evidence you already have.