Pharma intelligence, connected.
Transforming fragmented regulatory data into navigable intelligence for top pharmaceutical companies. Guidance documents, inspection reports, enforcement actions, and CFRs linked into one queryable graph — with GPT-4o handling extraction, summarization, translation, and conceptual link discovery.
On this page 10 sections
Connecting regulatory documents and inspection data
BRIEFINGAt Redica, we used GPT-4o and a knowledge graph to turn fragmented pharma regulatory data into navigable intelligence. We built a system that connected guidance documents, inspection reports, enforcement actions, and CFRs. Users could explore relationships between regulatory activity across different agencies and topics.
I worked with the team to use GPT-4o for extracting relationships, summarizing documents, translating non-English content, and surfacing connections that weren’t obvious through keyword search. The system allowed users to chat with any document, automatically generate site risk briefings, and explore complex regulatory topics. This made it much easier to find relevant context and make informed decisions.
62,418
Connected data points across sites, findings, documents, topics, regulators, manufacturers, and enforcement actions.
214,786
Extracted relationships, each carrying provenance and a confidence weight.
273ms
Median query response post-cache optimization. Fast enough to feel interactive.
The problem
SITUATIONRedica had excellent inspection data that was structured, clean, and trusted by top pharma companies. However, their regulatory intelligence product was still in early stages with limited structure and no connections to other data sources.
The challenge was taking a disorganized collection of guidance documents, warning letters, and enforcement actions and making it usable. Search alone wasn’t enough; users needed to navigate relationships and see context across regulatory activity, inspections, and risk patterns. QA, compliance, and strategy teams needed to spot trends before they became problems.
Customers didn’t want a list of 483s or a PDF dump of new guidance. They needed to answer questions like:
- What sites have been cited for data integrity in the last 12 months?
- What recent guidance touches on that topic?
- Are there patterns across regions, product types, or regulators?
- Which CDMOs are exposed based on those trends?
The individual pieces of data existed, but the meaningful relationships between them didn’t. Our goal was to build those connections systematically at scale.
What we built
OPERATIONSRedica already had the data. What it lacked was structure between the pieces, so the work was mine to do. Model the relationships, then decide which ones earned a place in the graph.
Schema design
We began by identifying the core entities that regulatory teams care about:
- Sites. Manufacturing facilities tracked across regions and authorities.
- Inspections. Authority visits to a site, with dates and outcomes.
- Findings. Observations, 483s, and warning letters tied to an inspection.
- Documents. Guidance, Q&As, draft rules, technical notes.
- Regulatory topics. Data integrity, sterility, CAPA, supply chain, etc.
- Regulatory bodies. FDA, EMA, Health Canada, PMDA, MHRA, ANVISA.
- Manufacturers. Sponsors and CDMOs operating the sites.
- Enforcement actions. Import alerts, consent decrees, debarments.
I owned the data model. Working from the questions customers brought us, I defined the core entities, the metadata each one carried, and the relationships worth storing, then iterated the schema with engineering and data science until it held up under real queries. Every connection carried provenance and a confidence weight. Engineering built the pipeline around it. GPT-4o proposed relationships, LangChain processed and chunked documents, Neo4j stored and traversed the graph. I worked on the user experience of exploring it.
Graph schema (excerpt)
Rendered in Cypher-style notation and trimmed to entities and relationships; the full property set is longer. Engineering’s guidance shaped what stayed in, mostly around what would hold up at query time.
# Cypher-style sketch — illustrative, not full schema (:Site {id, name, country, manufacturer_id}) (:Inspection {id, date, authority, site_id}) (:Finding {id, severity, topic_id, citation}) (:Document {id, type, title, language, authority, published}) (:Topic {id, slug, label}) (:Authority {code, name, region}) (:Manufacturer {id, name, parent_id}) (:Enforcement {id, type, date, severity}) // relationships (Site)-[:OPERATED_BY]->(Manufacturer) (Inspection)-[:AT]->(Site) (Finding)-[:FROM]->(Inspection) (Finding)-[:CONCERNS]->(Topic) (Document)-[:ISSUED_BY]->(Authority) (Document)-[:COVERS]->(Topic) (Document)-[:RELATED_TO {confidence, source}]->(Document) (Enforcement)-[:AGAINST]->(Manufacturer) (Enforcement)-[:CITES]->(Document)
Technology
- GPT-4o. Relationship extraction, summarization, translation.
- LangChain. Document processing and chunking.
- Neo4j. Graph storage and traversal.
- Redis. Caching for traversal-heavy queries.
How we used GPT-4o at Redica
METHODSThe graph provided the underlying structure, while GPT-4o helped us extract meaningful insights from inspections, enforcement actions, and regulatory documents. We focused on reducing noise, minimizing manual work, and helping users find relevant answers more efficiently.
Chat with an inspection or a document
Redica’s users show up with questions like these:
- What was the root cause in this 483?
- How does this compare to similar findings across sites?
- What does current EMA guidance say about this issue?
We added chat to any node in the graph. You could open an inspection or guidance doc and ask a real question. The model answered from the graph context and the source text, with references back to the documents it used.
Summaries and translation for regulatory docs
A lot of documents in Redica had no summaries. Many weren’t in English. That slowed everything down. We used GPT-4o to fix both.
Every document that came through the pipeline got a clear, scoped summary that regulatory teams could scan quickly. If the original language wasn’t English, we translated it. If metadata was missing, we filled in topic and geography. The point was to give users a reason to open a document instead of skipping it.
AI-assisted link discovery
Regulatory documents often have genuine relationships that aren’t obvious from their titles or surface content.
We used GPT-4o to propose connections that keyword matching missed. An FDA observation about inadequate process control could relate to EMA guidance on aseptic processing, which covers the same regulatory ground in different vocabulary. I built the review loop that decided which proposals survived. SMEs reviewed candidate links directly, and when a whole class of link didn’t hold up, we stopped shipping that type instead of picking off links one at a time.
These connections appeared as “related guidance” or “related inspections” in the interface, providing users with relevant context without requiring them to know specific search terms.
Auto-generated site risk briefings
Customers spend hours compiling reports before audits or internal reviews. They pull citations manually, summarize findings, and guess what context to include. We built a tool that does most of that for them.
You enter a site or manufacturer. It pulls in relevant inspections, observations, enforcement actions, and linked guidance, then assembles a structured draft briefing the team can review, edit, and send.
It doesn’t replace judgment. It just saves the team from doing the same work over and over.
Sample briefing JSON
{
"site_id": "SITE_8421",
"manufacturer": "Acme Pharma (CDMO)",
"window": "last_24_months",
"summary": "Two FDA inspections, one EU GMP cert.
Recurring theme: data integrity in QC labs.",
"events": [
{ "type": "FDA_483", "date": "2024-03-12",
"topics": ["data_integrity", "audit_trails"],
"severity": "high" },
{ "type": "EMA_NCR", "date": "2023-11-04",
"topics": ["aseptic_processing"],
"severity": "medium" }
],
"linked_guidance": [
"FDA 21 CFR 211 audit trails",
"EMA Annex 1 aseptic processing (2023)"
],
"open_questions": [
"Has CAPA closed observations from 2024-03-12?",
"Are similar topics flagged at sister sites?"
]
}
My role
PERSONNELDefined schema alongside engineering and data science teams.
Mapped product requirements to user-facing features and model evaluation.
Set evaluation metrics: recall of relevant nodes, user task completion, query latency.
Prioritized development based on customer interviews and feedback.
Built feedback loop with SMEs to validate edge accuracy and reduce false positives.
Scoped and reviewed API contracts for frontend graph exploration tooling.
Timeline of linked events
SIGNAL TRACERegulatory teams can now see when new documents signal changes in inspection behavior. The graph makes the lead time visible.
- A spike in new FDA warning letters
- EU guidance updates landing in the same window
- A run of EMA document publications
- Sterility-related findings turning up across inspections
46 days
Median delta: guidance publication → first matching observation in the field.
Multiplier on observation rate within a 90-day window after publication.
Results
AFTER-ACTIONFaster answers, deeper context, and a measurable lift in SME task completion. Three enterprise deals closed in the six weeks that followed. The graph didn’t close them on its own.
Search vs. graph query
Same task, two retrieval modes. I set the measures we judged it on (recall of relevant nodes, task completion, query latency) and we ran them with our SME group.
| Metric | Keyword search | Graph query |
|---|---|---|
| Avg. relevant docs found | 5.7 | 11.2 |
| Time to first insight | 3m12s | 38s |
| Tasks completed (SMEs) | 54% | 92% |
| Avg. hops to full context | N/A | 2.3 |
Regulatory complexity analysis
INTELCross-jurisdictional intelligence reveals hidden regulatory patterns and precedent connections.
73% of documents reference multiple jurisdictions — surfacing harmonization signals and ICH alignment patterns that single-authority search would miss.
Counted by inbound + outbound edges per topic node.
| Topic | Links | Tier |
|---|---|---|
| Data integrity | 847 | high |
| CAPA systems | 692 | high |
| Supply chain | 578 | high |
| Sterility | 434 | medium |
| Process validation | 389 | medium |
| Cleaning validation | 356 | medium |
| Labeling | 267 | lower |
| Facilities | 234 | lower |
| Equipment | 198 | lower |
Query and traversal metrics
TELEMETRYLatency, traversal depth, and the query shapes people used most.
273ms
Post-cache optimization, end-to-end query.
2.3 hops
Average hops to reach full context for a typical question, which is what let us cap default traversal depth without flattening answers.
38s
Time to first insight across benchmark tasks, vs 3m12s with keyword search.
# Most-used traversal shapes (illustrative, approximate shares, read as undirected) Site → Topic → Document // 85% Manufacturer → Enforcement → Topic // 70% Topic → Document → Authority // 60%
Frequently asked questions
FAQLatency was one of the three metrics I set for the product, alongside recall of relevant nodes and user task completion. Queries had to feel interactive or the graph wouldn’t get used. The engineering team hit that target by limiting default traversal depth on common queries, precomputing paths for the most-used node types, and caching with Redis.
We had regulatory experts from top pharma companies on staff, and they reviewed relationships directly. When a link type didn’t hold up in review, it came out of the graph. I preferred a smaller graph that held up in review over a bigger one that didn’t.
We also built feedback tools into the product. Early on, we weighted input from a trusted group of power users. They knew the space and gave direct, actionable feedback. It helped us catch weak connections and keep the signal clean.
Plugging the graph into dynamic monitoring. Trigger alerts when new documents strengthen risk signals for a known site. We already started work on query-driven workflows and narrative explanations on top of the graph engine.
Ship a knowledge graph that reduces time to insight.
I’ll help you define objects and relationships, set evaluation, and use LLMs where it adds value. If you have volume and messy text, we can scope a pilot in roughly 4–8 weeks and measure time to insight and task completion.