Extracting obligations
What this page is — having the AI read a finished document and write its dated commitments into the obligation register, instead of a person re-reading forty pages and typing each one.
What it is for — so the register is filled on the day a contract is signed, while everyone still remembers what was promised, rather than on the day something is missed.
The problem it solves — registering a signed contract's commitments by hand is postponed, and a missed date is how the gap is discovered.
Route: /org/papers/obligations → Extract from document · Permissions:
Use AI drafting/extraction/Q&A for documents. to extract, Manage obligations and reminders. to push · Utility:
papers_term_extractor · Cost: 450 credits estimated, 1,800 maximum — a cached re-run costs nothing.
1. What it is
Extraction runs the same AI capability as Extract key terms: it reads the document and returns parties, contract value, key dates, governing law, renewal terms and — the part that matters here — every concrete obligation, each with who owes it, what it is, a due date and a type.
There are two ways to get those obligations into the register, and they are not the same thing:
| Path | What writes | Source recorded | Type | Reminder |
|---|---|---|---|---|
| The run itself | The AI executor, the moment the run succeeds | AI extracted | The model's own — payment, notice… (unknown → milestone) | None set — the sweep's default of 7 days applies |
| Push to obligation register | The page, when you press the button | Manual | The model's type for obligations; milestone for every key date | 7 days |
The drawer suggests nothing reaches the register until you press Push to obligation register, but it does. A successful extraction already writes its obligations to the
register as AI extracted. Pressing Push then writes them again as Manual, plus a milestone row
for every key date.
The result is each dated obligation twice, with two daily reminder emails. So: run the extraction, check the register, and push only if the rows you need are not already there.
| Extracting obligations | Adding an obligation by hand | |
|---|---|---|
| Best for | Everything the document says | What it does not — verbal agreements, internal deadlines |
| Speed | Seconds, for a whole agreement | A minute per obligation |
| Can be deleted | AI extracted rows: no — cancel them | Yes |
| Accuracy | As good as the document's wording | As good as the person typing |
2. Why you would use it
An empty register is the normal state of an obligation register, because typing fifteen commitments out of a distribution agreement is an hour nobody schedules. Extraction removes the reason registers stay empty.
- It happens at the right moment. Run right after finalising, and the obligations exist before the first one can be missed.
- It reads what a skim misses. A payment due "within thirty days of acceptance of the second milestone" is exactly the sentence a person reading for the big dates passes over.
- It never invents a date. A commitment with no absolute date comes back with an empty due date rather than a guessed one — so a date in the register is one the document actually states.
- It keeps the record honest.
AI extractedobligations cannot be deleted, so nobody can tidy away a commitment the contract really makes. Ones that no longer apply are cancelled, and stay visible.
3. Step by step
- Extract from document → pick the Document. Finalised documents give the cleanest result.
- Extract terms. A scanning animation runs, then a result card shows the terms and dated obligations.
- Close the drawer and check the register with the status filter cleared. The obligations the run
found are already there, marked
AI extracted(§1). - Correct what the AI cannot know: the owner, and any date expressed relatively.
- Push only if a key date you need is missing from the register — and delete the manual duplicates of anything already present.
Running Extract terms again on the same document returns the saved result with "Showing the previously computed extraction — no AI credits spent". A cached re-run writes nothing new to the register; only a fresh run does.
4. What you provide
| Input | Control | Required | Notes |
|---|---|---|---|
| Document | Searchable picker | Yes | Extract terms stays disabled until one is chosen |
Nothing else is typed. The quality lever is the document itself: a complete, finalised document with filled fields and settled clauses extracts cleanly; an early draft extracts half-formed obligations that you then have to cancel, because they cannot be deleted.
5. Field reference — what lands in the register
From the run (AI extracted)
| Register field | Comes from | Rule |
|---|---|---|
| Description | who: what | Truncated to 1,000 characters. An obligation with no what is skipped |
| Type | The model's obligation_type | Anything outside the six valid types becomes milestone |
| Due | due_date | Only a date in YYYY-MM-DD form is kept; anything else leaves Due empty |
| Source | — | Always AI extracted |
| Duplicates | — | Skipped when an AI extracted obligation with the same description already exists on the document |
From Push to obligation register (Manual)
| Pushed | As type | Description |
|---|---|---|
| Each obligation with a due date | Its own type, or milestone | who — what |
| Each key date | milestone | The key date's label |
| Undated obligations | Not pushed | — |
Note the two description formats — : from the run, — from the push. That is why the run's
duplicate check never catches pushed rows.
Messages you may see
| Message | Means |
|---|---|
| No terms were extracted | The run succeeded but found nothing — common on policies and certificates |
| Showing the previously computed extraction — no AI credits spent | A cached result; nothing new was written |
| No extracted terms carry a due date to push. | Nothing in the result has a date the page can parse |
| Pushed n obligations to the register | That many manual rows were created |
| only manual obligations can be deleted; cancel AI-extracted obligations instead | You tried to delete an AI extracted row |
6. Worked example
A commercial manager finalises "Distribution Agreement — Gatiro Retail" and opens Extract from document.
Extract terms returns five obligations. Among them:
who: Buyer (Gatiro Retail Pvt Ltd) · what: Pay the 30% advance against the pro-forma invoice · due_date: 2026-08-15 · obligation_type: payment
and one with no date: "Supplier: give notice of price revision at least 60 days before it takes effect".
The manager closes the drawer and clears the status filter. Five rows are already in the register,
each marked AI extracted: the advance is a payment due 15 August, the price-revision notice is a
notice with no due date.
They make two corrections. The price-revision notice has no date because the document expresses it
relative to an event, so they leave Due empty and set a reminder on the related delivery milestone
instead. And one extracted obligation — "Supplier: maintain insurance" — is a standing condition rather
than a dated commitment, so they cancel it; it stays in the register as grey cancelled.
They do not press Push. Everything the document dates is already registered, and pushing would have doubled it.
7. The admin contract
| Must be true | Where | What breaks without it |
|---|---|---|
| The role holds Use AI drafting/extraction/Q&A for documents. | Role editor | No Extract from document button |
| The role holds Manage obligations and reminders. | Role editor | Push to obligation register shows disabled with a note. The run still writes AI extracted rows |
papers_term_extractor is active and enabled for the organisation | Orbit AI Flow, /org/ai-utilities | "This utility is currently disabled", or the action is absent |
papers.ai_monthly_credit_cap is not reached | System Config | monthly AI credit cap reached… — nothing is charged for a failed run |
| The document has extractable text | The document | A scanned PDF with no OCR extracts nothing |
Manual extraction works on a confidential document, and routes on-prem where a local model key is
configured. Extraction configured to run automatically on finalize is default-denied for
confidential documents unless papers.ai_confidential_cloud is set to allow — silently, so the
register simply stays empty.
8. Downstream
| After extraction… | Happens |
|---|---|
| Rows exist in the register | They appear in Overdue, Upcoming, the calendar feed and any published Orbit calendar |
| Their reminder window opens | The document owner gets a daily email — see reminders |
You cancel an AI extracted row | Reminders stop; the row stays as a record |
| You re-run with a fresh extraction | Only obligations with a new description are added — your edits to existing rows are untouched |
9. Don't confuse this with…
| Extract key terms | The same capability run from the document's AI workspace — which also writes the register |
| Smart fields | Extracts the values your admin defined. It writes nothing to the register |
| Renewal risk (AI) | Ranks what may lapse. It reads obligations; it creates none |
| Adding one by hand | For commitments the document does not contain |
10. Troubleshooting
| Symptom | Cause |
|---|---|
Every obligation appears twice, AI extracted and Manual | Push was pressed after an extraction that had already written them (§1) |
| Obligations appeared though I never pressed Push | Expected: the run itself writes them (§1) |
| A re-run added nothing | It was cached — no AI credits spent — or every description already exists |
| An obligation has no due date | The document expresses it relatively. Only YYYY-MM-DD dates are kept (§5) |
Everything came in as milestone | The model returned types outside the six, or these were pushed key dates |
| Cannot delete a wrong extraction | AI extracted rows are cancel-only |
| No terms were extracted | The document has no commitments of that kind, or no readable text |
| Push is greyed out | Your role lacks Manage obligations and reminders. |