Product 03 · Built by Vikgol

DocuLens AI

400 pages. One clause. Under three seconds.

A UCITS prospectus runs to 400 pages. A private equity memorandum can exceed 600. DocuLens finds the specific clause you need, returns the value, the section heading, the page number, and the verbatim passage it came from — so a human can verify it in ten seconds rather than trusting a model.

Prospectuses · KIID/KID · Offering memoranda · Loan agreements · Compliance filings

doculens — hybrid retrieval
QUERY: "NATURE OF SECURITY"
BM25 — exact keyword match on inverted index
Vector RAG — semantic similarity on embeddings
↓ merge ↓
Reciprocal Rank Fusion — unified re-rank
Opus 5 — extraction and synthesis
STRUCTURED OUTPUT

Transferable securities in the form of equity and debt instruments listed on Regulated Markets within the EEA, as defined under Article 50(1)(a) of the UCITS Directive.

Part III — Investment Restrictions, Clause 3.1(a)
Page 87 · Confidence 0.97

The problem
Manual review doesn't scale, and plain RAG isn't precise enough

Compliance officers and fund analysts read documents of extraordinary length to find single clauses. Pure vector search paraphrases well but misses exact regulatory terminology. Pure keyword search finds defined terms but misses anything phrased differently. Neither is good enough alone when the answer feeds a regulatory filing.

ChallengeHow DocuLens handles it
400-page document, need one clausePinpoints the exact page and paragraph in under three seconds
Inconsistent terminology across documentsSemantic embeddings bridge synonyms and variant phrasing automatically
Tables and structured data inside PDFsTable-aware chunking preserves rows, columns and nested headers
Cross-document queriesEntity resolution links related sections and defined terms across files
Ambiguous regulatory languageOpus 5 interprets context and qualifies the extracted value rather than flattening it
Architecture
Two retrievers, fused

BM25 gives high recall on technical terms and defined phrases. Dense vector search catches paraphrase and concept. Reciprocal Rank Fusion merges both into one relevance ranking — which is why hybrid beats either method used alone.

INGESTION

Layout-preserving parse

PDF parsing that maintains reading order, column flow, headers, footers and page numbers — so a returned page number actually corresponds to the printed document a reviewer is holding.

INGESTION

Semantic chunk boundaries

Haiku 4.5 identifies natural section breaks — clauses, definitions, schedules — instead of splitting at a fixed token count that cuts a definition in half.

INGESTION

Table serialisation

Tabular data is detected and serialised into structured JSON before chunking, so a fee schedule stays a fee schedule rather than becoming a run of disconnected numbers.

INGESTION

Dual index

Every chunk is written to both a dense vector index and a BM25 inverted index, and tagged with page number, section heading, chapter, entity types and document date.

Output
Structured objects, never raw text

Every response is auditable. In a regulated workflow, an answer without a source is not an answer.

extracted_value
The precise answer — text, number, date or table cell — as it appears in the document.
section_heading
The exact section or clause heading the value was found within.
page_number
Page reference in the source document, for human verification against the original.
sub_values
Nested subheadings, table rows or enumerated items inside the section.
confidence_score
Model-assigned score from 0 to 1. Anything below 0.75 raises a human-review flag automatically.
source_excerpt
The verbatim passage supporting the value — the audit trail a reviewer actually needs.
Model routing
Heavy reasoning only where it earns its cost
StageModelWhy this one
Semantic chunk boundary detectionHaiku 4.5Thousands of classifications per document during ingestion — speed and cost dominate here
Query intent and entity typeHaiku 4.5Classifies the query as definition lookup, value extraction, table query or cross-reference
Answer synthesis and extractionOpus 5Dense legal and financial language needs the strongest reasoning available — this is where accuracy is won
Cross-document entity resolutionOpus 5Linking defined terms and cross-references across multi-hundred-page documents is genuinely hard
Confidence scoring and flaggingSonnet 5Evaluates extraction quality against source text and surfaces borderline cases for review
Measured results
What we track

Figures from our own benchmark set. We'll walk you through the method — and where the numbers are weakest — on a call.

97.8%
Extraction precision on named financial entities, benchmark dataset
+23%
Recall improvement from hybrid retrieval over pure vector RAG on exact regulatory terminology
<3.2s
Query to result on a 400-page document, P95
<90s
Ingestion and indexing time for a 400-page PDF
94.1%
Row and column fidelity on complex nested tables
6–8 hrs
Analyst review time per document, reduced to under 15 minutes
Built by Vikgol

Designed for a workflow where a wrong answer is a filing error.

DocuLens was built by our own engineering team for financial and legal institutions, where the cost of a confidently wrong extraction is not a bad user experience — it is a compliance failure.

That constraint shaped every design decision: hybrid retrieval instead of vector-only, verbatim source excerpts on every response, and an automatic human-review flag below a confidence threshold. The system is built to be checked, not trusted.

Work with the team that built it →
MODELSClaude Opus 5 · Sonnet 5 · Haiku 4.5
RETRIEVALBM25 · dense vectors · Reciprocal Rank Fusion
VECTOR STOREpgvector · Pinecone
ORCHESTRATIONLlamaIndex
PDF PARSINGPyMuPDF · pdfplumber
BACKENDFastAPI · Celery
STORAGEAWS S3 · Azure Blob
INFRADocker · Kubernetes
FAQ
Common questions
Why hybrid retrieval rather than just RAG?
Because regulatory language is precise in a way vector search handles poorly. A defined term like "Regulated Market" has a specific legal meaning, and semantic similarity will happily return a paraphrase that means something materially different. BM25 catches the exact term. Vector search catches the paraphrase you also need. Reciprocal Rank Fusion merges both — in our benchmarks that adds about 23% recall over vector-only on exact terminology queries.
How do we know the extraction is correct?
You verify it. Every response includes the section heading, the page number, and the verbatim passage the value came from — so a reviewer can check the original in seconds. Confidence scores below 0.75 raise a human-review flag automatically. The design assumption is that a human checks anything consequential, and the system's job is to make that check fast rather than to remove it.
What document types does it handle?
Regulatory: UCITS and AIFMD prospectuses, KIID and KID documents, Basel III/IV reports, Solvency II filings. Fund documents: offering memoranda, fact sheets, NAV reports, audit reports. Legal: loan agreements, ISDA master agreements, SPV documentation, AML policy documents. Other structured long-form documents usually work — worth testing on a sample.
How does it handle tables?
Tables are detected during ingestion and serialised into structured JSON before chunking, so rows, columns and nested headers survive. A fee schedule stays intact rather than becoming disconnected numbers. Row and column fidelity on complex nested tables runs around 94% in our benchmark — genuinely difficult layouts are where it is weakest, and we will show you failures as well as successes on a call.
Where does our data go?
Wherever you require it to. Storage and inference can be confined to a specific region, with encryption at rest and in transit and per-tenant isolation. For institutions that cannot route documents through third-party infrastructure at all, we have deployed within client environments — this is a common requirement in this sector and the architecture accommodates it.

Test it on a document you already know

Pick a prospectus your team has reviewed manually. Book a call and we'll run DocuLens against it — the useful test is whether it finds what you already found.