Skip to content

Extracting Force Majeure Trigger Events From a Contract Clause

10 min read · updated August 11, 2026

Every force majeure clause answers the same question — which events excuse performance — and almost all of them answer it the same structural way: a list of named events, then a phrase intended to catch what the list missed. The list is easy to extract. The phrase decides the hard cases.

The shape of the clause

A representative clause enumerates acts of God, fire, flood, earthquake, war, terrorism, riot, civil commotion, strikes and labour disputes, epidemic or pandemic, and acts of government, then closes with something like “or any other event beyond the reasonable control of the affected party”. Around that sit conditions: notice within a stated number of days, an obligation to mitigate, a statement that payment obligations are not excused, and a right for either party to terminate if the event continues past a stated period.

The enumerated events are the part everyone extracts, and normalising them to tags is genuinely useful — it is what lets you answer “how many of our supply agreements name epidemic?” across a corpus. Do it as a second field, though, never in place of the source text. Keep both an events_verbatim array holding each item as written and an events_normalised array of your tags, because the normalisation is your interpretation and the text is the document. When your tag vocabulary changes — and it will, the first time someone asks whether “cyber attack” and “failure of telecommunications” are the same tag — you can re-derive tags from stored text, and you cannot re-derive text from tags.

Why the catch-all wording is load-bearing

Where a general phrase follows a list of specific items, courts in common-law jurisdictions commonly read the general phrase as limited to things of the same kind as the listed ones — the interpretive canon usually named ejusdem generis. Applied here, a catch-all reading “or any other similar cause” after a list of physical catastrophes tends to be read as covering other physical catastrophes, not a downturn in demand.

Which means the exact words change the answer. Consider three catch-alls that a summariser would render identically as “other events beyond the party’s control”:

  • “or any other similar event beyond the reasonable control of the affected party” — similar pulls the phrase tightly back to the list.
  • “or any other event beyond the reasonable control of the affected party” — no similarity word, but the canon may still operate on the structure.
  • “or any other event beyond the reasonable control of the affected party, whether or not similar to the foregoing” — drafted specifically to displace the canon.

Nine words distinguish the first from the third and they point in opposite directions. This page takes no position on how any given clause would be construed — that is a question for a lawyer looking at a governing law and a fact pattern. The extraction point is narrower and unarguable: a field containing a paraphrase cannot support the analysis, and a field containing the sentence can. Store catchall_verbatim, plus cheap derived booleans over it that record what was actually present: has_similarity_word, has_whether_or_not_similar, has_beyond_reasonable_control, has_foreseeability_qualifier.

The conditions around the list

A clause whose trigger is satisfied still does nothing if the conditions are not met, so the conditions belong in the same extraction:

  • Notice. A period, a unit, a start trigger (“within 10 days of becoming aware” is different from “within 10 days of the event”), a required form, and whether notice is a condition precedent to relief or merely an obligation. That last distinction is the difference between late notice costing you the protection and costing you nothing.
  • Mitigation and resumption. An obligation to use reasonable or best endeavours to overcome the event and to resume performance promptly.
  • Payment carve-out. Almost universally, an inability to pay is not excused. Extract it as a boolean because its absence is unusual and interesting.
  • Termination right. “If the event continues for more than 60 consecutive days, either party may terminate” — a duration, a consecutive-versus-aggregate flag, and which party holds the right.
  • Consequences during the event. Suspension of obligations, extension of deadlines, whether fees continue to accrue.

The dates arithmetic in the notice and termination fields is the same problem as in a deemed-acceptance period: a number, a unit that may be business days, and an anchor event whose own date has to come from somewhere else.

Getting the verbatim span out intact

Force majeure clauses are long. A single clause with a full enumeration, notice conditions and a termination right runs to several hundred words, and asking a model to return several such spans verbatim inside a JSON object is one of the reliable ways to hit an output limit. What happens then is worse than an error: the response stops mid-string, the JSON is unterminated, and depending on your parser you get an exception, a partial object, or — if something upstream repairs the JSON — a plausible-looking clause with its last clause silently missing.

Three things reduce it. Return character offsets into the source document rather than the text itself, and slice the text yourself; the model then emits two integers instead of four hundred words, the offsets are what later lets a reviewer see the clause in place — see source highlighting in a review queue — and the text you store is provably the document’s. Where offsets are not available because the source went through a layout pipeline, split the task: one call to locate and label the clause, a second to interpret the span you already hold. And check finishReason on every response, because a truncated generation reports it, and treating length-truncated output as valid is exactly the failure the published page on testing max-token truncation of JSON output exists to catch.

Where it goes wrong

  • Semicolons inside list items. Enumerations are frequently delimited by semicolons while individual items contain commas and parentheses. Splitting on the wrong character produces items like “or other similar events” standing alone.
  • The list runs over a page break, and a page-at-a-time pipeline returns a clause that ends at “strikes,”. Detect clause boundaries from numbering and reassemble before extracting.
  • “Including without limitation” versus “including only”. The first makes the list illustrative, the second exhaustive. Capture the introducing phrase as its own field; it governs the entire enumeration.
  • Definitions again. Some agreements define “Force Majeure Event” in the definitions section and leave the operative clause saying only that neither party is liable for delay caused by one. Extracting the operative clause alone returns a clause with no events in it.
  • Exclusions hiding in the list. “excluding any strike involving the affected party’s own workforce” sits inside the enumeration and reverses one item. An extractor tagging tokens will emit strike as a covered event.