npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@tania6303/azure-invoice-processor

v2.24.0

Published

Azure Invoice Processor with expanded structure mapping for vendor identification

Downloads

317

Readme

Azure Invoice Processor v2.0

📋 תפקיד

מעבד OCR מתקדם שמנתח חשבוניות באמצעות Azure Document Intelligence API ומחלץ מידע מובנה.


🎯 מה המודול עושה?

קלט: תוצאות Azure OCR גולמיות פלט: JSON מובנה עם שדות מזוהים + UnidentifiedNumbers

תהליך:

  1. קבלת OCR - מקבל analyzeResult מ-Azure
  2. חילוץ שדות - מזהה שדות ידועים (InvoiceId, InvoiceDate, וכו')
  3. זיהוי פריטים - מחלץ פריטים מטבלאות
  4. זיהוי ייחודי - מזהה מספרים ייחודיים (תעודות, רכבים, קודי חלקים)
  5. החזרת תוצאה - JSON מובנה לשימוש במודולים הבאים

✨ תכונות מיוחדות

🆕 חדש ב-v2.0 (31.10.25):

1. זיהוי מספרי תעודות

extractDocumentNumbers(content, existing)
  • זיהוי DOCNO (25XXXXXX - 8 ספרות)
  • זיהוי BOOKNUM (108XXXXXX - 9 ספרות)
  • מוסיף ל-UnidentifiedNumbers עם תווית מתאימה

2. סינון VIN מזויף

extractSpecialLengthNumbers(content, existing)
  • מסנן מספרים שמתחילים ב-"202" (תאריכים)
  • מונע זיהוי מוטעה של תאריכים כ-VIN

📥 קלט (Input)

{
  azureJsonInput: {
    analyzeResult: {
      content: "...",      // טקסט גולמי
      tables: [...],       // טבלאות
      documents: [...]     // מסמכים מזוהים
    }
  }
}

📤 פלט (Output)

{
  status: "success",

  structure: {
    docType: "invoice",
    fields: {...}
  },

  data: {
    docType: "invoice",
    fields: {
      InvoiceId: "...",
      InvoiceDate: "...",
      InvoiceTotal_amount: 1000,
      Items: [...],
      UnidentifiedNumbers: [
        {
          label: "מס׳ הקצאה (BOOKNUM)",
          value: "108379736",
          context: "..."
        },
        ...
      ]
    }
  },

  metadata: {
    modelId: "prebuilt-invoice",
    totalFields: 10,
    uniqueDataFound: 8
  }
}

🔧 פונקציות עיקריות

extractUniqueData()

זיהוי דינמי של מידע ייחודי:

  1. extractLabelValuePairs() - זוגות "כותרת: ערך"
  2. extractPartCodes() - קודי חלקים (ABC-12345)
  3. extractVehicleNumbers() - מספרי רכב (123-45-678)
  4. extractDocumentNumbers() - מספרי תעודות (DOCNO, BOOKNUM) ⭐ חדש!
  5. extractSpecialLengthNumbers() - מספרים באורכים מיוחדים (13, 17 ספרות)

extractRealItemsFromTable()

חילוץ פריטים מטבלאות:

  • מזהה טבלה ראשית
  • מזהה כותרות עמודות
  • מנקה פריטים לא רלוונטיים

detectNumbersByContext()

זיהוי מספרים לפי הקשר:

  • מספרי טלפון
  • תאריכים
  • פרטי בנק (IBAN, SWIFT)
  • כתובות אימייל

📂 קבצים

AzureInvoiceProcessor/
├── v2.0(30.10.25)                  ← הקוד הראשי (27KB)
├── test-document-detection.js      ← בדיקת זיהוי תעודות
├── test-extract-documents.js       ← בדיקת extractDocumentNumbers()
└── test-vin-filter.js              ← בדיקת סינון VIN מזויף

🧪 בדיקות

הרצת בדיקות:

# בדיקת זיהוי תעודות
node test-document-detection.js

# בדיקת פונקציית extractDocumentNumbers
node test-extract-documents.js

# בדיקת סינון VIN
node test-vin-filter.js

תוצאות מוצלחות:

✅ זיהוי 4 DOCNO + 4 BOOKNUM ✅ סינון תאריכים (202X) מרשימת VIN ✅ כל המספרים מסומנים עם context ו-label


🔄 שימוש במערכת

Azure OCR
    ↓
┌────────────────────────┐
│ AzureInvoiceProcessor  │ ← אתה כאן
│       v2.0             │
└───────────┬────────────┘
            ↓
    AZURE_RESULT + AZURE_TEXT
            ↓
┌────────────────────────┐
│ Processing Invoice     │ ← מודול 2
│      (Learning)        │
└───────────┬────────────┘
            ↓
┌────────────────────────┐
│ Production Invoice     │ ← מודול 3
│    (Execution)         │
└────────────────────────┘

📝 היסטוריית גרסאות

v2.3 - 9 נובמבר 2025 19:00

  • 🔄 חילוץ גנרי של UnidentifiedNumbers (ללא תבניות ספציפיות)
  • 📋 כל המספרים והקודים מהטקסט מועברים הלאה
  • 🎯 הקודים הבאים מחפשים מה שהם צריכים

v2.2 - 9 נובמבר 2025 16:15

  • ✅ תיקון כפילויות פריטים: הוספת deduplicateItems()
  • ✅ תיקון isRealItemRow() - דרישה ל-Amount/Quantity/UnitPrice
  • ✅ בדיקת ביטחון - שמירת פריטים עם ProductCode אם הכל סונן

v2.1 - 9 נובמבר 2025 14:30

  • 🔄 שינוי קלט: מ-azureJsonInput יחיד ל-5 קלטים נפרדים
  • 📊 הוספת pageCount למטה-דאטה

v2.0 - 31 אוקטובר 2025

  • ✅ הוספת extractDocumentNumbers() - זיהוי DOCNO/BOOKNUM
  • ✅ שיפור extractSpecialLengthNumbers() - סינון VIN מזויף
  • ✅ תיעוד מלא של כל הפונקציות

💡 טיפים

למה UnidentifiedNumbers חשובים?

מספרים אלה משמשים את המודולים הבאים למציאת:

  • תעודות (BOOKNUM → docs_list)
  • תיקי יבוא (IMPFNUM → import_files)
  • רכבים (מספר רכב → vehicles)

איך לשפר זיהוי?

  1. הוסף תבניות חדשות ל-extractUniqueData()
  2. שפר זיהוי תוויות (labels) בפונקציות
  3. הוסף context לזיהוי מדויק יותר

🐛 Troubleshooting

בעיה: מספרי תעודות לא מזוהים פתרון: בדוק שהתבנית 108\d{6} או 25\d{6} תואמת למספרים שלך

בעיה: VIN מזויף מזוהה פתרון: המסנן כבר מטפל במספרים שמתחילים ב-202

בעיה: פריטים לא מזוהים בטבלה פתרון: בדוק את זיהוי כותרות העמודות ב-guessFieldNameGeneric()


גרסה: 2.3 תאריך עדכון אחרון: 9 נובמבר 2025 מחבר: Claude Code (Anthropic)