Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GOOGLE_API_KEY=AIzaSyBr1SJSG3RHKOTP-lymDuixN2-xcwPW0Gw
10 changes: 10 additions & 0 deletions data/Akshay.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"patient_first": "Akshay",
"patient_last": "Chaudhari",
"dob": "02/17/1987",
"diagnosis": "Crohn's disease",
"provider_name": "Timothy Adam, MD",
"npi": "1331124163",
"insurance_id": "1:5VA",
"medication": "Skyrizi"
}
Binary file added output/Akshay_filled.pdf
Binary file not shown.
34 changes: 34 additions & 0 deletions src/fill_form.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import fitz # PyMuPDF
import json
import os

# Load extracted JSON data
with open("data/Akshay.json") as f:
data = json.load(f)

# Open the PDF
pdf_path = "Input Data/Akshay/PA.pdf"
doc = fitz.open(pdf_path)

# Define field -> value mapping
field_values = {
"T11": data.get("patient_first", ""),
"T12": data.get("patient_last", ""),
"T13": data.get("dob", ""),
"T21F": data.get("diagnosis", ""),
"Request by T": data.get("medication", "")
}

# Fill the form
for page in doc:
for field_name, value in field_values.items():
for widget in page.widgets():
if widget.field_name == field_name:
widget.field_value = value
widget.update()

# Save output
os.makedirs("output", exist_ok=True)
output_path = "output/Akshay_filled.pdf"
doc.save(output_path)
print(f"✅ Filled form")
37 changes: 37 additions & 0 deletions src/gemini_analysis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import os
import pathlib
import json
from dotenv import load_dotenv
import google.generativeai as genai

load_dotenv()
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
model = genai.GenerativeModel("gemini-1.5-flash")

def extract_key_data(pdf_path, prompt):
pdf_bytes = pathlib.Path(pdf_path).read_bytes()
response = model.generate_content([
{"mime_type": "application/pdf", "data": pdf_bytes},
prompt
])
return response.text

pdf_path = "Input Data/Akshay/referral_package.pdf"
prompt = (
"Extract patient first name, last name, DOB, diagnosis, provider name, NPI, insurance ID, and medication. "
"Return result as JSON with keys: patient_first, patient_last, dob, diagnosis, provider_name, npi, insurance_id, medication."
)

result = extract_key_data(pdf_path, prompt)

# Clean up response
cleaned_result = result.strip()
if cleaned_result.startswith("```json"):
cleaned_result = cleaned_result.replace("```json", "").strip()
if cleaned_result.endswith("```"):
cleaned_result = cleaned_result[:-3].strip()

# Now parse
with open("data/Akshay.json", "w") as f:
json.dump(json.loads(cleaned_result), f, indent=2)