Files
Odoo-Modules/fusion_accounting_ocr/graphify-out/GRAPH_REPORT.md
gsinghpal 41d0908ade changes
2026-04-24 21:04:38 -04:00

9.2 KiB

Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr (2026-04-22)

Corpus Check

  • 20 files · ~5,118 words
  • Verdict: corpus is large enough that graph structure adds value.

Summary

  • 77 nodes · 113 edges · 17 communities detected
  • Extraction: 66% EXTRACTED · 34% INFERRED · 0% AMBIGUOUS · INFERRED: 38 edges (avg confidence: 0.67)
  • Token cost: 0 input · 0 output

Community Hubs (Navigation)

God Nodes (most connected - your core abstractions)

  1. TesseractAdapter - 12 edges
  2. parse_invoice_fields() - 11 edges
  3. ManualAdapter - 10 edges
  4. TestInvoiceOcrFlow - 8 edges
  5. TestFieldParser - 8 edges
  6. AccountMove - 7 edges
  7. OCRResult - 7 edges
  8. OCRProvider - 7 edges
  9. TestTesseractAdapter - 5 edges
  10. account.move OCR extension. Adds an OCR pipeline triggered manually (or, option - 3 edges

Surprising Connections (you probably didn't know these)

  • TestTesseractAdapter --uses--> TesseractAdapter [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/tests/test_tesseract_adapter.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/services/ocr_providers/tesseract_adapter.py
  • Run OCR on the most recent supported attachment of each move. --uses--> TesseractAdapter [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/models/account_move.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/services/ocr_providers/tesseract_adapter.py
  • Run OCR on the most recent supported attachment of each move. --uses--> ManualAdapter [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/models/account_move.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/services/ocr_providers/manual_adapter.py
  • TesseractAdapter --uses--> OCRProvider [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/services/ocr_providers/tesseract_adapter.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/services/ocr_providers/base.py
  • Tesseract OCR adapter. Uses the system tesseract binary via pytesseract, with p --uses--> OCRResult [INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/services/ocr_providers/tesseract_adapter.py → /Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ocr/services/ocr_providers/base.py

Communities

Community 0 - "Community 0"

Cohesion: 0.2 Nodes (7): _empty_result(), _get_provider(), parse_invoice_fields(), Stage-2 of the OCR pipeline: parse raw OCR text into structured invoice fields v, Look up the LLM adapter via ir.config_parameter. Honours a feature-specific, Use the configured LLM provider to extract structured invoice fields. Retur, TestFieldParser

Community 1 - "Community 1"

Cohesion: 0.28 Nodes (8): AccountMove, account.move OCR extension. Adds an OCR pipeline triggered manually (or, option, Apply parsed fields to a draft invoice without overwriting any user-ente, OCRResult, ManualAdapter, Manual fallback adapter - no real OCR, just marks the document as 'awaiting manu, OCRProvider, TesseractAdapter

Community 2 - "Community 2"

Cohesion: 0.15 Nodes (8): ABC, is_available(), OCRProvider, OCRProvider contract - every backend must conform. Mirrors the LLMProvider patt, Abstract OCR backend. Subclasses implement extract()., Tesseract OCR adapter. Uses the system tesseract binary via pytesseract, with p, TestTesseractAdapter, TransactionCase

Community 3 - "Community 3"

Cohesion: 0.19 Nodes (4): Run OCR on the most recent supported attachment of each move., FusionOcrController, request_for_invoice(), TestInvoiceOcrFlow

Community 4 - "Community 4"

Cohesion: 0.5 Nodes (3): attachment_to_pages(), Helper: turn an ir.attachment into a list of PIL.Image pages. Kept separate fro, Decode an ir.attachment into a list of PIL.Image pages. Returns [] on f

Community 5 - "Community 5"

Cohesion: 1.0 Nodes (1): FusionOcrLog

Community 6 - "Community 6"

Cohesion: 1.0 Nodes (1): ResCompany

Community 7 - "Community 7"

Cohesion: 1.0 Nodes (1): ResConfigSettings

Community 8 - "Community 8"

Cohesion: 1.0 Nodes (0):

Community 9 - "Community 9"

Cohesion: 1.0 Nodes (0):

Community 10 - "Community 10"

Cohesion: 1.0 Nodes (0):

Community 11 - "Community 11"

Cohesion: 1.0 Nodes (0):

Community 12 - "Community 12"

Cohesion: 1.0 Nodes (0):

Community 13 - "Community 13"

Cohesion: 1.0 Nodes (0):

Community 14 - "Community 14"

Cohesion: 1.0 Nodes (0):

Community 15 - "Community 15"

Cohesion: 1.0 Nodes (1): Extract text from raw bytes. mimetype hints whether to PDF-render (

Community 16 - "Community 16"

Cohesion: 1.0 Nodes (1): Return True if the backend's runtime deps are present.

Knowledge Gaps

  • 13 isolated node(s): FusionOcrLog, ResCompany, ResConfigSettings, FusionOcrController, Stage-2 of the OCR pipeline: parse raw OCR text into structured invoice fields v (+8 more) These have ≤1 connection - possible missing edges or undocumented components.
  • Thin community Community 5 (2 nodes): FusionOcrLog, fusion_ocr_log.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 6 (2 nodes): ResCompany, res_company.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 7 (2 nodes): ResConfigSettings, res_config_settings.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 8 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 9 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 10 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 11 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 12 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 13 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 14 (1 nodes): __manifest__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 15 (1 nodes): Extract text from raw bytes. ``mimetype`` hints whether to PDF-render ( Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 16 (1 nodes): Return True if the backend's runtime deps are present. Too small to be a meaningful cluster - may be noise or needs more connections extracted.

Suggested Questions

Questions this graph is uniquely positioned to answer:

  • Why does parse_invoice_fields() connect Community 0 to Community 1? High betweenness centrality (0.147) - this node is a cross-community bridge.
  • Why does TesseractAdapter connect Community 1 to Community 2, Community 3? High betweenness centrality (0.130) - this node is a cross-community bridge.
  • Why does TestTesseractAdapter connect Community 2 to Community 1? High betweenness centrality (0.084) - this node is a cross-community bridge.
  • Are the 9 inferred relationships involving TesseractAdapter (e.g. with TestTesseractAdapter and AccountMove) actually correct? TesseractAdapter has 9 INFERRED edges - model-reasoned connections that need verification.
  • Are the 7 inferred relationships involving parse_invoice_fields() (e.g. with .test_parser_handles_empty_text() and .test_parser_handles_no_provider_gracefully()) actually correct? parse_invoice_fields() has 7 INFERRED edges - model-reasoned connections that need verification.
  • Are the 7 inferred relationships involving ManualAdapter (e.g. with AccountMove and account.move OCR extension. Adds an OCR pipeline triggered manually (or, option) actually correct? ManualAdapter has 7 INFERRED edges - model-reasoned connections that need verification.
  • What connects FusionOcrLog, ResCompany, ResConfigSettings to the rest of the system? 13 weakly-connected nodes found - possible documentation gaps or missing edges.