diff --git a/apps/Backend/src/services/pythonClient.ts b/apps/Backend/src/services/pythonClient.ts
index 5e279ef..1a02a2c 100644
--- a/apps/Backend/src/services/pythonClient.ts
+++ b/apps/Backend/src/services/pythonClient.ts
@@ -6,7 +6,7 @@ export interface ExtractedData {
name?: string;
memberId?: string;
dob?: string;
- [key: string]: any; // In case your extraction returns additional dynamic fields
+ [key: string]: any;
}
export default async function forwardToPythonService(
diff --git a/apps/Frontend/index.html b/apps/Frontend/index.html
index 7455d36..849e428 100644
--- a/apps/Frontend/index.html
+++ b/apps/Frontend/index.html
@@ -2,7 +2,7 @@
-
+
Dental Management
diff --git a/apps/Frontend/public/favicon.svg b/apps/Frontend/public/favicon.svg
new file mode 100644
index 0000000..17b818d
--- /dev/null
+++ b/apps/Frontend/public/favicon.svg
@@ -0,0 +1,6 @@
+
+
diff --git a/apps/Frontend/src/hooks/use-extractPdfData.ts b/apps/Frontend/src/hooks/use-extractPdfData.ts
index 8321620..02d07b9 100644
--- a/apps/Frontend/src/hooks/use-extractPdfData.ts
+++ b/apps/Frontend/src/hooks/use-extractPdfData.ts
@@ -16,17 +16,10 @@ export default function useExtractPdfData() {
const formData = new FormData();
formData.append("pdf", pdfFile);
- const res = await apiRequest("POST", "/api/pdfExtraction/", formData);
+ const res = await apiRequest("POST", "/api/pdfExtraction/extract", formData);
if (!res.ok) throw new Error("Failed to extract PDF");
return res.json();
},
- onSuccess: () => {
- toast({
- title: "Success",
- description: "PDF data extracted!",
- variant: "default",
- });
- },
onError: (error) => {
toast({
title: "Error",
@@ -34,5 +27,5 @@ export default function useExtractPdfData() {
variant: "destructive",
});
},
- });
+ });
}
diff --git a/apps/Frontend/src/lib/queryClient.ts b/apps/Frontend/src/lib/queryClient.ts
index 6bbb77a..098c02c 100644
--- a/apps/Frontend/src/lib/queryClient.ts
+++ b/apps/Frontend/src/lib/queryClient.ts
@@ -16,14 +16,18 @@ export async function apiRequest(
): Promise {
const token = localStorage.getItem("token");
+ const isFormData = typeof FormData !== "undefined" && data instanceof FormData;
+
+ const headers: Record = {
+ ...(token ? { Authorization: `Bearer ${token}` } : {}),
+ // Only set Content-Type if not using FormData
+ ...(isFormData ? {} : { "Content-Type": "application/json" }),
+ };
+
const res = await fetch(`${API_BASE_URL}${url}`, {
method,
- // headers: data ? { "Content-Type": "application/json" } : {},
- headers: {
- "Content-Type": "application/json",
- ...(token ? { Authorization: `Bearer ${token}` } : {}), // Include JWT token if available
- },
- body: data ? JSON.stringify(data) : undefined,
+ headers,
+ body: isFormData ? data as FormData : JSON.stringify(data),
credentials: "include",
});
diff --git a/apps/Frontend/src/pages/patients-page.tsx b/apps/Frontend/src/pages/patients-page.tsx
index 8bceed7..acb790f 100644
--- a/apps/Frontend/src/pages/patients-page.tsx
+++ b/apps/Frontend/src/pages/patients-page.tsx
@@ -87,7 +87,7 @@ export default function PatientsPage() {
const [isUploading, setIsUploading] = useState(false);
const [isExtracting, setIsExtracting] = useState(false);
const [formData, setFormData] = useState({ PatientName: "", PatientMemberId: "", PatientDob:"" });
- const { mutate: extractPdf, isPending } = useExtractPdfData();
+ const { mutate: extractPdf} = useExtractPdfData();
// Fetch patients
@@ -294,21 +294,39 @@ export default function PatientsPage() {
// File upload handling
const handleFileUpload = (file: File) => {
+ setIsUploading(true);
setUploadedFile(file);
- setIsUploading(false); // In a real implementation, this would be set to true during upload
toast({
title: "File Selected",
description: `${file.name} is ready for processing.`,
variant: "default",
});
+
+ setIsUploading(false);
};
// data extraction
- const handleExtract = () => {
- if (!uploadedFile) return alert("Please upload a PDF.");
+ const handleExtract = () =>{
+ setIsExtracting(true);
+
+ if (!uploadedFile){
+ return toast({
+ title: "Error",
+ description:"Please upload a PDF",
+ variant: "destructive",
+ });
+ }
extractPdf(uploadedFile, {
onSuccess: (data) => {
+ setIsExtracting(false);
+
+ toast({
+ title: "Success Pdf Data Extracted",
+ description: `Name: ${data.name}, Member ID: ${data.memberId}, DOB: ${data.dob}`,
+ variant: "default",
+ });
+
setFormData({ PatientName: data.name || "", PatientMemberId: data.memberId || "", PatientDob: data.dob || ""});
},
});
diff --git a/apps/PdfService/PDF_To_Test/sample1.pdf b/apps/PdfService/PDF_To_Test/sample1.pdf
new file mode 100644
index 0000000..417b45e
--- /dev/null
+++ b/apps/PdfService/PDF_To_Test/sample1.pdf
@@ -0,0 +1,618 @@
+%PDF-1.3
+%쏢
+1 0 obj
+<>
+endobj
+
+2 0 obj
+<>
+endobj
+
+3 0 obj
+<>
+endobj
+
+4 0 obj
+<>
+endobj
+
+5 0 obj
+<>
+endobj
+
+6 0 obj
+<>
+endobj
+
+7 0 obj
+<>
+endobj
+
+8 0 obj
+<>
+stream
+x `?\;3n6لl #""d%} 4g}R+T[Bj-Ѣ|-ylnv晙wfys;A!dFCܵk"^.BUV.\>iO!ɂY_lYZEnv8aϰ]huEV̝s$Ln]>gJ{z(r~!V؏"?G>r3.}F5zmË6
+z}
+yHxGhLs;_s=8:e/C7ȃ}эVm8V24MB+Нx\j4}ߌq*fݛ{
+=qu#\})1gθ=>w$ܥJBsiB
PGG!Gb^ύ<CJEa0+7>wyh|}rON!?Acy:o!.۽!-&@+Apdz1sBP:!)\{ 4j,y ѹ8kD"}
+(
+;-~{BrO/ĒG9+H߄##lc1#ywx+rt'z;<_x?c32L#KW"{SFo6ɀ
PУdQ|?Dc
+:ހOr?_sW$A%eUGr?8/W%\Zmw7W>sucs«)Qn2![Keoޟݙ
+ j?KmGoc.xluВӬ?:$$'mdtwYNdƹjb.pps-cw9e|OGOOY'E\.nIJRZ[#cjtF{QmFq]ߐ gyxH%adNqhcƍcTЯ&`³NT
+QA;1"p_r&zKO{I,7 P20EGO6|=MF!d9g8_ 0
o@`of>
=]Gg+Wբ,;w"?O1'-8=,~ECW{ jϟEף-]#"PH\ UfLܽpn<r.xA/))N#]h` uNA3sϠrU{Q_rϡO9|k:s Qat/ ]}6.h*jm]!t%p wg'JxܳRlArDt=- h>^)5bhZWoo6f+9o]zUW-_tE̿2=i'O6_xAӰClп_ߚDuxEy,)
qfl1$Q9QͨH&ޚK.Kcs`ǜݻL&ʊEzLB*K&%iBM}k"b̑H9ywD2'=[ QE##vQǨ֑peDl|K")V1#wTT&9*㏍5pL
#P.
]ٚP͙5#i'#3kz636
r|#tcS$uQlikbtkhfhıS#p7rkˌnOBJQtOH(cI+tM#\$>BQi3bLs02gdhuLf?>ҷffvՖ'_8(VRcZ 2Ɍ<?uӂ<m(OZ,/G=s{
+_'q$j
+i)B=o."CmFiѕDWF}};DDK##Hqpzk܉Θ?qZ44=cN9#25߶cҏ)S\)Q Ba1C'2PLJGFgKe%?ԕ;EbMkW*u촙^ j
Wx4mF42"gV_Wk fd#h+٫`0OohtcsrW"ZcyڱrT;ћ[}kbHGǼ$;0#%31\Ec3ó@tюm$m4In6c'dDE-;،}l/{Nh,IL|p_vvg;.>]Dߧ7%GFi}z|i4bؘ6#i4hk'eaB܌;S.ܾcX2]iJd;Xх~Oy3gJ\D?TB%y &31v* ZG̎ҧˤbDag,i
vC-ƠUfKzׄJ-+`gSSv):nn0nwgtXwB1v xfJMk]j fi.(/E1t`kF̓Jw tV42QpQ!H;aoۑY{sQas4RO,e%̲DC)e'_Lv.δϝU}3fnv\
+;"3[*j9͝V)sU%A&`Qp!8I֖H+<;, )6ʍIL9S\D-@-3?Fk]o}ZGjȠ`GG0U
CW23Zva7_79uՂb(B*X[B]Is;ݘnM@K;`4*>>7
+r-EFGXW 4+hA83;RE"62#"3("? )3^'TMliy?4:L?
+ 6X8N<
ۗ 9$qHBu|\CI'Hq&Q8NC%3MMM㻛P3yXG dGC:"!pZd*44!ski
#!4BYMNڥǬW N"ǽdfztڙpf
Nw!'|3nX'oklwֲ)UJ#fLdyðDqWX"42o:m6FTUF#iXtJ/9N;56Qsg*㣑
8(
g??=;ٯ&Z7#Ȃz@(vI8܄,
$Nx[ʏ?u;>}\;٤AѥvR>%S]k=XvRAtY] ȑ;s.]d Y%Yɑx