feat(inventory): photo-first drafts + on-device OCR (digitization R2+R4)
Lower the bulk-digitization cliff with two more routes on top of the already-landed CSV import and "save and add another": - Photo-first drafts (capture now, catalogue later): burst-capture photos (camera or multi-gallery) into unnamed draft varieties, shown in a "to catalogue" tray, hidden from the main list until named. Adds Variety.isDraft (schema), addDraftVariety/watchDrafts/nameDraft, the triage sheet and the inventory banner. - On-device OCR label suggestion (Tesseract, offline, no Google): a "Suggest name from photo" button in the naming dialog behind a LabelTextExtractor interface (Tesseract on Android/iOS, no-op elsewhere). Reads the largest print via hOCR bounding boxes, drops boilerplate/low-confidence noise, preprocesses (grayscale, contrast, upscale) and sweeps rotations (0-315 deg) so tilted packets still read. Bundles tessdata_fast eng+spa; validated on-device against real packets. The photo is written to a temp file deleted immediately in a finally block (the plugin needs a path) - a bounded, documented exception to no-plaintext-at-rest. This commit also carries the co-developed schema evolution v5 to v8 that shares these files (organic flag, species viability years, crop calendar, lot provenance/abundance/preservation format, condition checks) plus their exports/migrations and i18n. Tests: CSV/draft/OCR unit + widget + migration green in isolation. Note: the full widget suite currently hangs (>10 min) - under investigation.
This commit is contained in:
parent
12a2ee2d64
commit
6809dc6143
89 changed files with 17141 additions and 228 deletions
|
|
@ -27,6 +27,46 @@ enum Presentation { pot, tray, plug, bareRoot, rootBall }
|
|||
/// Per-lot visibility (data-model §2.3). Used by the future sharing layer.
|
||||
enum OfferStatus { private, shared, exchange, sell }
|
||||
|
||||
/// A coarse, offline-friendly "how much do I have" that fuses amount with
|
||||
/// shareability — the way a seed saver actually thinks, without weighing or
|
||||
/// counting. Modelled on the qualitative scale a real seed bank used
|
||||
/// (mucha/bastante/suficiente/poca), where each level is defined by what you
|
||||
/// can do with it. Optional alternative to a precise Quantity. Append-only by
|
||||
/// name.
|
||||
///
|
||||
/// - `plentyToShare` — surplus, free to give away (mucha).
|
||||
/// - `enoughToShare` — can share a little, sparingly (bastante).
|
||||
/// - `enoughForMe` — enough for my own use, not to share (suficiente).
|
||||
/// - `runningLow` — only enough to keep the variety alive (poca).
|
||||
enum Abundance { plentyToShare, enoughToShare, enoughForMe, runningLow }
|
||||
|
||||
/// How dry seed is physically conserved — affects longevity, kept separate from
|
||||
/// *where* it is stored. Optional attribute of a seed [Lot]. Append-only by name.
|
||||
///
|
||||
/// - `jarWithDesiccant` — sealed jar with a drying agent (bote con sílice).
|
||||
/// - `glassJar` — plain glass jar (bote de cristal).
|
||||
/// - `paperEnvelope` — paper envelope (sobre de papel).
|
||||
/// - `paperBag` — paper bag (bolsa de papel).
|
||||
/// - `plasticBag` — plastic bag (bolsa de plástico).
|
||||
enum PreservationFormat {
|
||||
jarWithDesiccant,
|
||||
glassJar,
|
||||
paperEnvelope,
|
||||
paperBag,
|
||||
plasticBag,
|
||||
}
|
||||
|
||||
/// State of the drying agent (silica gel) in a stored seed container, recorded
|
||||
/// at a periodic condition check. The colour is a proxy for moisture: a
|
||||
/// saturated agent means the seed is at risk. Append-only by name.
|
||||
///
|
||||
/// - `none` — no drying agent present (no tiene).
|
||||
/// - `add` — should add some (se pone).
|
||||
/// - `replace` — saturated, replace it (se cambia).
|
||||
/// - `dry` — indicating dry (azul/blue).
|
||||
/// - `fresh` — just renewed (lila/violet).
|
||||
enum DesiccantState { none, add, replace, dry, fresh }
|
||||
|
||||
/// Append-only event kinds on a Lot (data-model §2.4).
|
||||
enum MovementType {
|
||||
received,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue