Skip to main content

🏛️ Verification guards for legal contracts - Date calculations, clause consistency, liability verification

Project description

🏛️ QWED-Legal

Verification Guards for Legal Contracts

Catch AI hallucinations before they become lawsuits.

Don't trust AI with legal analysis. Verify it.
Deadline math • Clause contradictions • Liability calculations

Verified by QWED GitHub Developer Program PyPI npm License Python 3.10+ Tests


🚨 The Problem

Lawyers are using AI to review contracts. AI makes mistakes.

Case What Happened Impact
Mata v. Avianca (2023) ChatGPT cited 6 fake legal cases $5,000 fine, sanctions
Contract Review Errors LLMs miss contradictory clauses Disputes, litigation
Date Calculation Bugs "30 business days" miscalculated Missed deadlines, defaults

⚡ Quick Start

Installation

pip install qwed-legal

Verify a Deadline Calculation

from qwed_legal import DeadlineGuard

guard = DeadlineGuard()
result = guard.verify(
    signing_date="2026-01-15",
    term="30 business days",
    claimed_deadline="2026-02-14"  # LLM claimed this
)

print(result.verified)   # False!
print(result.computed_deadline)  # 2026-02-27 (correct)
print(result.message)
# ❌ ERROR: Deadline mismatch. Expected 2026-02-27, but LLM claimed 2026-02-14.

Verify a Liability Cap

from qwed_legal import LiabilityGuard

guard = LiabilityGuard()
result = guard.verify_cap(
    contract_value=5_000_000,
    cap_percentage=200,
    claimed_cap=15_000_000  # LLM said 15M
)

print(result.verified)  # False!
print(result.computed_cap)  # 10,000,000 (200% of 5M)
# ❌ ERROR: 200% of $5M = $10M, not $15M

Detect Contradictory Clauses

from qwed_legal import ClauseGuard

guard = ClauseGuard()
result = guard.check_consistency([
    "Seller may terminate with 30 days notice",
    "Neither party may terminate before 90 days",
    "Seller may terminate immediately upon breach"
])

print(result.consistent)  # False!
# ⚠️ WARNING: Clauses 1 and 2 may conflict (days 30-90)

🛡️ The Six Guards

Guard What It Verifies
DeadlineGuard Date calculations, business days, leap years
LiabilityGuard Cap percentages, tiered liability, indemnity limits
ClauseGuard Clause contradictions, termination conflicts
CitationGuard Legal citations (Bluebook format, case names, reporters)
JurisdictionGuard Choice of law, forum selection, cross-border conflicts
StatuteOfLimitationsGuard Claim periods by jurisdiction and claim type

Verify Legal Citations

from qwed_legal import CitationGuard

guard = CitationGuard()
result = guard.verify("Brown v. Board of Education, 347 U.S. 483 (1954)")

print(result.valid)  # True
print(result.parsed_components)
# {'plaintiff': 'Brown', 'defendant': 'Board of Education', 'volume': 347, 'reporter': 'U.S.', 'page': 483, 'year': 1954}

Verify Jurisdiction (New in v0.2.0!)

from qwed_legal import JurisdictionGuard

guard = JurisdictionGuard()
result = guard.verify_choice_of_law(
    parties_countries=["US", "UK"],
    governing_law="Delaware",
    forum="London"
)

print(result.conflicts)  # ['Governing law Delaware (US state) but forum London is non-US...']

Check Statute of Limitations (New in v0.2.0!)

from qwed_legal import StatuteOfLimitationsGuard

guard = StatuteOfLimitationsGuard()
result = guard.verify(
    claim_type="breach_of_contract",
    jurisdiction="California",
    incident_date="2020-01-15",
    filing_date="2026-06-01"
)

print(result.verified)  # False - 4 year limit exceeded!
print(result.message)   # ❌ EXPIRED: Statute of limitations expired...

📦 TypeScript/JavaScript (npm)

npm install @qwed-ai/legal
import { DeadlineVerifier, JurisdictionVerifier } from '@qwed-ai/legal';

const deadline = new DeadlineVerifier();
const result = await deadline.verify("2026-01-15", "30 days", "2026-02-14");
console.log(result.verified);

📊 Audit Log: Real Hallucinations Caught

Contract Input LLM Claim QWED Verdict
"Net 30 Business Days from Dec 20" Jan 19 🛑 BLOCKED (Actual: Feb 2, 2026)
"Liability Cap: 2x Fees ($50k)" $200,000 🛑 BLOCKED (Actual: $100,000)
"Seller may terminate with 30 days notice" + "Neither party may terminate before 90 days" "Clauses are consistent" 🛑 BLOCKED (Conflict detected)
"Smith v. Jones, 999 FAKE 123" Valid citation 🛑 BLOCKED (Unknown reporter)

🏦 All-in-One Guard

from qwed_legal import LegalGuard

guard = LegalGuard()

# All verification methods in one object
guard.verify_deadline(...)
guard.verify_liability_cap(...)
guard.check_clause_consistency(...)

🌍 Jurisdiction Support

DeadlineGuard supports jurisdiction-specific holidays:

from qwed_legal import DeadlineGuard

# US holidays (default)
us_guard = DeadlineGuard(country="US")

# UK holidays
uk_guard = DeadlineGuard(country="GB")

# California-specific holidays
ca_guard = DeadlineGuard(country="US", state="CA")

🔗 Related QWED Packages

Package Purpose
qwed-verification Core verification engine
qwed-finance Banking & financial verification
qwed-ucp E-commerce transaction verification
qwed-mcp Claude Desktop integration

📄 License

Apache 2.0 - See LICENSE


⭐ Star us if you believe AI needs verification in legal domains

"In law, precision isn't optional. QWED makes it verifiable."

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qwed_legal-0.2.0.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qwed_legal-0.2.0-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page