Resumen
Legal teams reviewing contracts manualmente miss industry-standard terms porque they rely on static plantillas. Este flujo de trabajo toma un newly uploaded contract, extrae key clauses (indemnification, liability caps, termination), searches for actual mercado precedents y estandar idioma for cada clause tipo, compiles un context brief con que similares companies typically agree to, y flags cualquier clauses ese deviate significativamente de mercado norms. El search layer asegura your resena reflects 2026 mercado estandares, no outdated boilerplate.
Desencadenador
Nuevo contract uploaded to resena queue
Programación
On contract subir (event-driven)
Pasos del flujo de trabajo
Extraer key clauses
Analizar el uploaded contract to identificar indemnification, liability, termination, IP assignment, y payment clauses.
Search for precedents
For cada clause tipo, search Google for actual estandar idioma y reciente legal commentary on mercado norms.
Compile context brief
Agregar resultados de busqueda en un per-clause context document showing que comparable deals typically incluye.
Marcar deviations
Comparar extraido clauses contra el precedent context. Marcar terms ese fall outside el typical rango.
Implementacion en Python
import requests, os, json
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
CLAUSES = [
{"type": "indemnification", "text": "Vendor shall indemnify up to 1x annual contract value"},
{"type": "liability_cap", "text": "Total liability capped at $500,000"},
{"type": "termination", "text": "Either party may terminate with 30 days notice"},
{"type": "payment_terms", "text": "Net 60 payment terms"},
]
def search_precedents(clause_type):
"""Search for current market standards for a clause type."""
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google",
"query": f"{clause_type.replace('_', ' ')} standard contract terms 2026",
"ai_overview": True}, timeout=10).json()
snippets = [o.get("snippet", "") for o in r.get("organic", [])[:5]]
aio = r.get("ai_overview", {})
return {
"clause_type": clause_type,
"precedents": snippets,
"ai_summary": aio.get("text", "")[:300] if aio else "",
"sources": [o.get("link", "") for o in r.get("organic", [])[:3]]
}
for clause in CLAUSES:
precedent = search_precedents(clause["type"])
print(f"\n--- {clause['type'].upper()} ---")
print(f"Current text: {clause['text']}")
print(f"Market context: {precedent['ai_summary'][:200] if precedent['ai_summary'] else precedent['precedents'][0][:200]}")
print(f"Sources: {', '.join(precedent['sources'][:2])}")Implementacion en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
const CLAUSES = [
{type: "indemnification", text: "Vendor shall indemnify up to 1x annual contract value"},
{type: "liability_cap", text: "Total liability capped at $500,000"},
{type: "termination", text: "Either party may terminate with 30 days notice"},
{type: "payment_terms", text: "Net 60 payment terms"},
];
async function searchPrecedents(clauseType) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({
platform: "google",
query: `${clauseType.replace(/_/g, " ")} standard contract terms 2026`,
ai_overview: true
})
}).then(r => r.json());
const snippets = (r.organic || []).slice(0, 5).map(o => o.snippet || "");
const aio = r.ai_overview || {};
return {
clauseType,
precedents: snippets,
aiSummary: (aio.text || "").slice(0, 300),
sources: (r.organic || []).slice(0, 3).map(o => o.link || "")
};
}
(async () => {
for (const clause of CLAUSES) {
const p = await searchPrecedents(clause.type);
console.log(`\n--- ${clause.type.toUpperCase()} ---`);
console.log(`Current: ${clause.text}`);
console.log(`Context: ${p.aiSummary.slice(0, 200) || p.precedents[0]?.slice(0, 200)}`);
console.log(`Sources: ${p.sources.slice(0, 2).join(", ")}`);
}
})();Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA