/// Receipt parsing entry point: spatial OCR pipeline with text fallback. library; import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart'; import '../models/line_item.dart'; import '../models/ocr_element.dart'; import 'receipt_ocr.dart'; import 'receipt_parse_config.dart'; export 'receipt_parse_config.dart' show loadReceiptParseConfig; export 'receipt_text_parser.dart' show ReceiptParseResult; import 'receipt_spatial_parser.dart'; import 'receipt_text_parser.dart'; class ReceiptParser { ReceiptParser._(); static Future loadConfig() => loadReceiptParseConfig(); static List parse(String rawText) => parseReceipt(rawText).items; /// Fallback when only flattened OCR text is available (tests, re-parse). static ReceiptParseResult parseReceipt(String rawText) => ReceiptTextParser.parseReceipt(rawText); /// Primary path: positioned ML Kit elements → row clustering → lookahead. static ReceiptParseResult parseReceiptFromOcr(OcrDocument document) => ReceiptSpatialParser.parse(document); static ReceiptParseResult parseRecognizedText( RecognizedText recognized, { required double imageWidth, required double imageHeight, }) { final document = ReceiptOcr.fromRecognizedText( recognized, imageWidth: imageWidth, imageHeight: imageHeight, ); return parseReceiptFromOcr(document); } }