Contract Obligation Extraction

SkillDocs & knowledge

Extract obligations from contract documents including deadlines, deliverables, payment terms, SLA commitments, and termination conditions with compliance tracking

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Contract Obligation Extraction skill

What this skill tells your AI

The instructions your AI receives, as published by happy-technologies-llc/happy-platform-skills in skills/legal/contract-obligation-extraction/SKILL.md and read by ahel’s review.

Overview

This skill provides a structured approach to extracting and tracking contractual obligations in ServiceNow Legal Service Delivery. It helps you:

  • Parse contract documents from ast_contract and linked sys_attachment records to identify all binding obligations
  • Categorize obligations by type: deliverables, payment terms, SLA commitments, reporting requirements, termination conditions, and compliance mandates
  • Extract specific deadlines, milestones, and recurring obligation schedules
  • Create trackable legal tasks in sn_legal_task for each obligation with due dates and owners
  • Build an obligation register for portfolio-wide compliance monitoring
  • Monitor obligation compliance status and generate variance reports

When to use: After contract execution to set up obligation tracking, during contract audits to verify compliance, when onboarding a new vendor relationship, or when preparing for contract renewal negotiations.

Plugin required: com.sn_legal_service_delivery

Prerequisites

  • Roles: sn_legal_case_user, sn_legal_case_manager, contract_manager, or sn_legal_admin
  • Access: Read/write access to ast_contract, sn_legal_task, sn_legal_case, and sys_attachment tables
  • Knowledge: Understanding of contract structures, obligation types, and your organization's compliance tracking requirements
  • Plugin: Legal Service Delivery (com.sn_legal_service_delivery) must be activated

Procedure

Step 1: Retrieve the Contract Record and Documents

Fetch the contract metadata and associated document attachments.

Using MCP (Claude Code/Desktop):

Tool: SN-Get-Record
Parameters:
  table_name: ast_contract
  sys_id: [contract_sys_id]
  fields: sys_id,number,short_description,contract_type,vendor,starts,ends,renewal_date,payment_amount,payment_terms,total_cost,state,terms_and_conditions,auto_renew,notice_period,assigned_to,department

Retrieve attachments:

Tool: SN-Query-Table
Parameters:
  table_name: sys_attachment
  query: table_name=ast_contract^table_sys_id=[contract_sys_id]
  fields: sys_id,file_name,content_type,size_bytes,sys_created_on
  limit: 20
  order_by: sys_created_on

Using REST API:

# Get contract record
GET /api/now/table/ast_contract/[contract_sys_id]?sysparm_fields=sys_id,number,short_description,contract_type,vendor,starts,ends,renewal_date,payment_amount,payment_terms,total_cost,state,terms_and_conditions,auto_renew,notice_period,assigned_to,department&sysparm_display_value=true

# Get attachments
GET /api/now/table/sys_attachment?sysparm_query=table_name=ast_contract^table_sys_id=[contract_sys_id]&sysparm_fields=sys_id,file_name,content_type,size_bytes,sys_created_on&sysparm_limit=20

# Download contract document
GET /api/now/attachment/[attachment_sys_id]/file

Step 2: Retrieve Existing Terms and Conditions

If Contract Lifecycle Management is active, query linked terms.

Using MCP:

Tool: SN-Query-Table
Parameters:
  table_name: clm_m2m_contract_and_terms
  query: contract=[contract_sys_id]
  fields: sys_id,contract,terms_and_conditions,state
  limit: 50

Then retrieve the term details:

Tool: SN-Query-Table
Parameters:
  table_name: clm_terms_and_conditions
  query: sys_idIN[terms_sys_ids]
  fields: sys_id,name,description,category,obligation_type,obligation_owner,due_date,frequency,status
  limit: 50

Using REST API:

GET /api/now/table/clm_m2m_contract_and_terms?sysparm_query=contract=[contract_sys_id]&sysparm_fields=sys_id,contract,terms_and_conditions,state&sysparm_limit=50

GET /api/now/table/clm_terms_and_conditions?sysparm_query=sys_idIN[terms_sys_ids]&sysparm_fields=sys_id,name,description,category,obligation_type,obligation_owner,due_date,frequency,status&sysparm_limit=50&sysparm_display_value=true

Step 3: Extract Obligations by Category

Parse the contract text and categorize each obligation:

3a. Payment Obligations
FieldWhat to ExtractExample
AmountDollar value per payment$25,000/month
FrequencyPayment scheduleMonthly, quarterly, annual
Net TermsDays until payment dueNet 30, Net 45, Net 60
Late FeesPenalty for late payment1.5% per month on overdue
EscalationAnnual price increase3% annual escalation
True-upUsage reconciliationQuarterly true-up for overages
Milestone PaymentsDeliverable-triggered30% at kickoff, 40% at UAT, 30% at go-live
3b. Deliverable Obligations
FieldWhat to ExtractExample
DeliverableWhat must be providedMonthly security audit report
OwnerParty responsibleVendor / Client
Due DateWhen due15th of each month
Acceptance CriteriaHow measuredPer Exhibit B specifications
Cure PeriodTime to fix deficiencies10 business days
3c. SLA Commitments
FieldWhat to ExtractExample
MetricSLA measurementSystem uptime
TargetRequired level99.95% monthly
Measurement PeriodWindowCalendar month
CreditRemedy for miss5% credit per 0.1% below target
ExclusionsWhat is excludedScheduled maintenance windows
Chronic FailureRepeated misses3 consecutive misses = termination right
3d. Compliance and Reporting
FieldWhat to ExtractExample
ReportRequired reportingSOC 2 Type II audit report
FrequencyHow oftenAnnually
DeadlineWhen dueWithin 90 days of audit period end
CertificationRequired certsISO 27001, SOC 2, HITRUST
Data HandlingPrivacy requirementsGDPR DPA, data residency in EU
Breach NotificationIncident reportingWithin 72 hours of discovery
3e. Termination Conditions
FieldWhat to ExtractExample
For CauseTriggersMaterial breach uncured after 30 days
For ConvenienceNotice required90 days written notice
Wind-downTransition period6-month transition assistance
Data ReturnPost-terminationReturn all data within 30 days
SurvivalSurviving clausesSections 7, 8, 12, 15 survive

Step 4: Create an Obligation Register

Build a consolidated obligation register by creating legal tasks for each extracted obligation.

Using MCP:

Tool: SN-Create-Record
Parameters:
  table_name: sn_legal_task
  fields:
    short_description: "Payment obligation - Monthly license fee $25,000"
    description: |
      Contract: [contract_number]
      Vendor: [vendor_name]
      Obligation Type: Payment
      Amount: $25,000
      Frequency: Monthly
      Due: 1st of each month
      Net Terms: Net 30
      Late Fee: 1.5% per month
      Contract Reference: Section 4.1
    legal_case: [case_sys_id]
    priority: 3
    task_type: obligation_tracking
    assigned_to: [finance_contact_sys_id]
    due_date: [next_payment_date]
    state: 1

Repeat for each obligation category. Example for SLA tracking:

Tool: SN-Create-Record
Parameters:
  table_name: sn_legal_task
  fields:
    short_description: "SLA monitoring - 99.95% uptime commitment"
    description: |
      Contract: [contract_number]
      Vendor: [vendor_name]
      Obligation Type: SLA
      Metric: System uptime
      Target: 99.95% monthly
      Credit: 5% per 0.1% below target
      Chronic Failure: 3 consecutive misses triggers termination right
      Contract Reference: Exhibit C, Section 2.1
    legal_case: [case_sys_id]
    priority: 2
    task_type: obligation_tracking
    assigned_to: [service_manager_sys_id]
    due_date: [month_end_date]
    state: 1

Using REST API:

POST /api/now/table/sn_legal_task
Content-Type: application/json

{
  "short_description": "Payment obligation - Monthly license fee $25,000",
  "description": "Contract: CON0045678\nObligation Type: Payment\nAmount: $25,000\nFrequency: Monthly\nDue: 1st of each month\nNet Terms: Net 30",
  "legal_case": "[case_sys_id]",
  "priority": "3",
  "task_type": "obligation_tracking",
  "assigned_to": "[finance_contact_sys_id]",
  "due_date": "[next_payment_date]",
  "state": "1"
}

Step 5: Set Up Obligation Compliance Monitoring

Query existing obligation tasks to track compliance status.

Using MCP:

Tool: SN-Query-Table
Parameters:
  table_name: sn_legal_task
  query: legal_case.legal_matter=[matter_sys_id]^task_type=obligation_tracking
  fields: sys_id,number,short_description,state,due_date,assigned_to,priority,work_notes
  limit: 100
  order_by: due_date

Using REST API:

GET /api/now/table/sn_legal_task?sysparm_query=legal_case.legal_matter=[matter_sys_id]^task_type=obligation_tracking^ORDERBYdue_date&sysparm_fields=sys_id,number,short_description,state,due_date,assigned_to,priority,work_notes&sysparm_limit=100&sysparm_display_value=true

Monitor overdue obligations:

Tool: SN-Query-Table
Parameters:
  table_name: sn_legal_task
  query: task_type=obligation_tracking^due_date<javascript:gs.beginningOfToday()^state!=3^state!=7
  fields: sys_id,number,short_description,due_date,assigned_to,legal_case,priority
  limit: 50
  order_by: due_date

Step 6: Generate Obligation Compliance Report

Document the full obligation register and compliance status.

Using MCP:

Tool: SN-Add-Work-Notes
Parameters:
  table_name: sn_legal_case
  sys_id: [case_sys_id]
  work_notes: |
    === OBLIGATION EXTRACTION REPORT ===
    Contract: [contract_number] - [short_description]
    Vendor: [vendor_name]
    Effective: [start_date] to [end_date]
    Analyst: AI Obligation Analyst
    Date: [current_date]

    OBLIGATION SUMMARY:
    Total Obligations Extracted: [total_count]
    - Payment: [payment_count]
    - Deliverables: [deliverable_count]
    - SLA Commitments: [sla_count]
    - Compliance/Reporting: [compliance_count]
    - Termination Conditions: [termination_count]

    PAYMENT OBLIGATIONS:
    1. Monthly license fee: $25,000 due 1st of month (Net 30)
    2. Annual support fee: $50,000 due January 15
    3. Quarterly true-up: Variable, due 15th after quarter end
    Total Annual Financial Commitment: $350,000 + overages

    DELIVERABLE OBLIGATIONS:
    1. Monthly security report: Due 15th of each month (Vendor)
    2. Quarterly business review: Due within 30 days of quarter end (Mutual)
    3. Annual SOC 2 report: Due within 90 days of audit period (Vendor)

    SLA COMMITMENTS:
    1. System uptime: 99.95% monthly (5% credit per 0.1% miss)
    2. Support response: P1 within 1 hour, P2 within 4 hours
    3. Data backup: Daily with 4-hour RPO

    KEY DEADLINES:
    | Date | Obligation | Owner | Task # |
    |------|-----------|-------|--------|
    | Monthly 1st | License payment | Client | LT0012345 |
    | Monthly 15th | Security report | Vendor | LT0012346 |
    | Quarterly | Business review | Mutual | LT0012347 |
    | 2026-12-01 | Renewal notice deadline | Client | LT0012348 |

    COMPLIANCE STATUS:
    - On Track: [on_track_count] obligations
    - At Risk: [at_risk_count] obligations
    - Overdue: [overdue_count] obligations

    RECOMMENDED ACTIONS:
    1. Configure automated reminders for payment due dates
    2. Assign SLA monitoring to service delivery team
    3. Calendar renewal notice deadline 90 days before expiration
    4. Schedule quarterly obligation compliance review

Step 7: Update Contract with Obligation Metadata

Record obligation extraction results on the contract record.

Using MCP:

Tool: SN-Update-Record
Parameters:
  table_name: ast_contract
  sys_id: [contract_sys_id]
  data:
    work_notes: "Obligation extraction completed. [total_count] obligations identified and tracked. See legal case [case_number] for full register. Next review: [next_review_date]."

Using REST API:

PATCH /api/now/table/ast_contract/[contract_sys_id]
Content-Type: application/json

{
  "work_notes": "Obligation extraction completed. 14 obligations identified and tracked across 5 categories."
}

Tool Usage

MCP Tools Reference

ToolWhen to Use
SN-Natural-Language-SearchFind contracts by vendor, type, or obligation keywords
SN-Query-TableQuery contracts, tasks, terms, and attachments
SN-Get-RecordRetrieve a specific contract record
SN-Create-RecordCreate obligation tracking tasks
SN-Update-RecordUpdate contract metadata and task status
SN-Add-Work-NotesDocument the obligation register and compliance reports

REST API Reference

EndpointMethodPurpose
/api/now/table/ast_contractGETQuery contract records
/api/now/table/ast_contract/{sys_id}GET/PATCHRead or update a contract
/api/now/table/sn_legal_taskGET/POSTQuery or create obligation tasks
/api/now/table/sn_legal_caseGETQuery associated legal cases
/api/now/table/sys_attachmentGETRetrieve contract attachments
/api/now/attachment/{sys_id}/fileGETDownload contract documents
/api/now/table/clm_terms_and_conditionsGETQuery CLM terms records

Best Practices

  • Be exhaustive: Extract every obligation, not just the obvious ones; minor reporting obligations often cause compliance failures
  • Assign owners: Every obligation must have a named responsible party, not just a department
  • Lead time: Set task due dates with sufficient lead time before the actual contractual deadline (e.g., 5 business days before)
  • Recurring obligations: For monthly or quarterly obligations, create a master task and use ServiceNow scheduled jobs to generate recurring child tasks
  • Two-way obligations: Track obligations that bind your organization separately from those that bind the vendor
  • Version awareness: Re-extract obligations whenever a contract amendment or change order is executed
  • Link to source: Always reference the specific contract section number in the obligation description for traceability
  • Financial impact: Tag each obligation with its financial impact to support budgeting and accruals

Troubleshooting

"Cannot find obligation-related fields on ast_contract"

Cause: Standard ast_contract may not have obligation-specific fields; these may be in CLM extension tables Solution: Check clm_terms_and_conditions and clm_m2m_contract_and_terms for structured obligation data. Query sys_dictionary with nameLIKEclm^elementLIKEobligation to find relevant fields.

"Duplicate obligations detected"

Cause: The same obligation may appear in multiple contract sections or amendments Solution: Before creating a new obligation task, query existing tasks: sn_legal_task with legal_case=[case_sys_id]^short_descriptionLIKE[obligation_keyword] to check for duplicates.

"Recurring obligation tasks not generating"

Cause: Scheduled job for recurring task creation is not configured Solution: Create a scheduled script execution on sn_legal_task that clones recurring obligation tasks based on frequency field. Check sysauto_script for existing obligation-related jobs.

"Unable to parse contract attachment"

Cause: Contract document is in a scanned PDF or image format without OCR Solution: Use ServiceNow Document Intelligence (com.sn_doc_intelligence) to perform OCR extraction. See the document/document-extraction skill for configuration steps.

Examples

Example 1: SaaS Agreement Obligation Extraction

Input: Contract CON0045678 - "Enterprise CRM Platform - CloudCo"

Obligations extracted:

  1. Payment: $150,000 annual license, due January 1, Net 45
  2. Payment: Overage at $2/user/month above 500 users, quarterly true-up
  3. SLA: 99.9% uptime, measured monthly, 10% credit per 0.5% miss
  4. Deliverable: Monthly usage report by 10th of month
  5. Compliance: SOC 2 Type II report annually within 90 days of audit
  6. Data: Breach notification within 48 hours
  7. Termination: 90 days written notice for convenience; 30 days cure for cause
  8. Data return: All data exported within 30 days of termination

Tasks created: 8 obligation tracking tasks in sn_legal_task

Example 2: Professional Services Contract

Input: Contract CON0046789 - "IT Consulting Services - TechPartners Inc"

Obligations extracted:

Tool: SN-Create-Record
Parameters:
  table_name: sn_legal_task
  fields:
    short_description: "Milestone payment - Phase 1 completion $75,000"
    description: |
      Contract: CON0046789
      Obligation Type: Milestone Payment
      Amount: $75,000
      Trigger: Phase 1 UAT sign-off
      Net Terms: Net 30 from acceptance
      Contract Reference: Exhibit A, Milestone 2
    legal_case: [case_sys_id]
    priority: 2
    task_type: obligation_tracking
    assigned_to: [project_manager_sys_id]
    due_date: 2026-06-30
    state: 1

Example 3: Obligation Compliance Audit

Input: "Show all overdue obligations across active contracts"

Query:

Tool: SN-Query-Table
Parameters:
  table_name: sn_legal_task
  query: task_type=obligation_tracking^active=true^due_date<javascript:gs.beginningOfToday()^stateNOT IN3,4,7
  fields: sys_id,number,short_description,due_date,assigned_to,legal_case.short_description,priority,state
  limit: 50
  order_by: due_date

Result: 6 overdue obligations found:

  • 2 vendor reporting obligations (SOC 2 report 15 days late)
  • 1 payment obligation (quarterly true-up 5 days past due)
  • 3 internal deliverables (business review meeting scheduling)

Action: Escalate vendor obligations; update internal task owners; document compliance gaps.

Related Skills

  • legal/contract-analysis - Analyze contracts for key terms and risk assessment
  • legal/legal-request-triage - Triage incoming contract review requests
  • legal/legal-matter-summarization - Summarize legal matters linked to contracts
  • document/document-extraction - Extract structured data from contract documents using OCR
  • catalog/approval-workflows - Configure approval workflows for obligation sign-offs

Signals

GitHub stars
37
Forks
13
Last commit
Jul 2026
Advanced
Catalog kind
skill
Gateway key
contract-obligation-extraction
Source
github.com/happy-technologies-llc/happy-platform-skills