- Extract city/state/zip in location field - Customer address now split across 3 fields: - customer-identifier: customer name - account-number: street address - location: city, state zip - All components verified in test 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
33 lines
1.6 KiB
Clojure
33 lines
1.6 KiB
Clojure
(ns auto-ap.parse.templates-test
|
|
(:require [auto-ap.parse :as sut]
|
|
[clojure.test :refer [deftest is testing]]
|
|
[clojure.java.io :as io]
|
|
[clojure.string :as str]
|
|
[clj-time.core :as time]))
|
|
|
|
(deftest parse-bonanza-produce-invoice-03881260
|
|
(testing "Should parse Bonanza Produce invoice 03881260 with customer identifier including address"
|
|
(let [pdf-file (io/file "dev-resources/INVOICE - 03881260.pdf")
|
|
;; Extract text same way parse-file does
|
|
pdf-text (:out (clojure.java.shell/sh "pdftotext" "-layout" (str pdf-file) "-"))
|
|
results (sut/parse pdf-text)
|
|
result (first results)]
|
|
(is (some? results) "parse should return a result")
|
|
(is (some? result) "Template should match and return a result")
|
|
(when result
|
|
(println "DEBUG: customer-identifier =" (pr-str (:customer-identifier result)))
|
|
(println "DEBUG: account-number =" (pr-str (:account-number result)))
|
|
(is (= "Bonanza Produce" (:vendor-code result)))
|
|
(is (= "03881260" (:invoice-number result)))
|
|
;; Date is parsed as org.joda.time.DateTime - compare year/month/day
|
|
(let [d (:date result)]
|
|
(is (= 2026 (time/year d)))
|
|
(is (= 1 (time/month d)))
|
|
(is (= 20 (time/day d))))
|
|
;; Customer identifier components
|
|
(is (= "NICK THE GREEK" (:customer-identifier result)))
|
|
(is (= "600 VISTA WAY" (str/trim (:account-number result))))
|
|
(is (= "MILPITAS, CA 95035" (str/trim (:location result))))
|
|
;; Total is parsed as string, not number (per current behavior)
|
|
(is (= "23.22" (:total result)))))))
|