diff --git a/src/modules/pdf-parse.ts b/src/modules/pdf-parse.ts index ec63171..c1490fd 100644 --- a/src/modules/pdf-parse.ts +++ b/src/modules/pdf-parse.ts @@ -9,11 +9,23 @@ function pdf_parse(travel: string){ let fournisseur = ''; let date = ''; - interface tab_res { - marque : string; - date_achats : string; + interface DetailProduit { + quantité: number; + prixHT: number; + TVA: string; } + const productsList: { [key: string]: DetailProduit } = {}; + + interface tab_res { + marque: string; + date_achats: string; + products: { + [nomProduit: string]: DetailProduit; + }; + } + + const dataBuffer = fs.readFileSync(travel); pdfParse(dataBuffer) @@ -31,6 +43,30 @@ function pdf_parse(travel: string){ } else { date = "non trouvé" } + + // on prend la liste des produits et leurs detail pour auchan + const lignes = data.text.split('\n'); + + // Expressions régulières pour détecter les lignes de produits Auchan + const regexLigneProduit = /^(\d{13})(?!\d)(.+?)(\d+,\d+)\s+(\d+)\s+(\d+,\d+)\s+(\d+,\d+)\s+(\d+,\d+)$/; + + lignes.forEach((ligne: string) => { + const match = ligne.trim().match(regexLigneProduit); + + if (match) { + const nomProduit = match[1].trim(); + const quantite = parseInt(match[4], 10); + const prixHT = parseFloat(match[2].replace(',', '.')); + const tva = match[6].replace(',', '.') + "%"; + + productsList[nomProduit] = { + quantité: quantite, + prixHT: prixHT, + TVA: tva + }; + } + }); + } else { fournisseur = "Metro" @@ -48,8 +84,9 @@ function pdf_parse(travel: string){ // on renvoie les valeur avec un seul objet const res : tab_res = { - marque: fournisseur, - date_achats: date + marque: fournisseur, + date_achats: date, + products: productsList } console.log(res);