Work from another session, committed as found (tests green): - `plan` reads an intake into a plan.yaml (a model decides needs, stages, forms and budgets; a person reads the result before build). - Plans gain `doors` (a first question before the forms, when a front door would carry more than five needs), `groups` with labels that a select may draw its options from (`options_from: groups`), `private` fields kept off public pages, `multiple` selects, and `max_fields` as what the intake said the person will tolerate. - `card.rs`: an alternative as the visitor meets it, in text, so the answering visitor and `rate` read the served card, not the heading. - `rate` reads followup pages from the repo and reports "what happens next" as not measured rather than zero when it cannot. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L4jrCgLiKKHAEFuZUJjckH
95 lines
3.9 KiB
YAML
95 lines
3.9 KiB
YAML
# A machine hire yard: two doors (hiring, and an account for firms),
|
|
# one aggregate walked by two roles (the counter reserves, the yard
|
|
# hands out and takes back), and the yard's own damage report.
|
|
business: Fjellstad Hire
|
|
language: en
|
|
contact: { name: Ola Fjellstad, email: ola@fjellstadhire.example }
|
|
about: >
|
|
Machine hire: mini diggers, lifts, compactors, generators. A counter,
|
|
a yard that delivers, collects and fixes, and an office.
|
|
|
|
doors:
|
|
- id: hiring
|
|
who: someone who needs a machine, or has one of ours that has stopped
|
|
- id: firms
|
|
who: a firm that hires often and wants an account with us
|
|
|
|
needs:
|
|
- id: hire-request
|
|
who: a private person or a firm who needs a machine for a while
|
|
wants: the right machine, from a date, for as long as they need it
|
|
door: hiring
|
|
lands_in: hires
|
|
handled_by: counter
|
|
stages: [open, reserved, out, returned, cancelled]
|
|
done_when: [returned, cancelled]
|
|
success: [returned]
|
|
# The counter reserves; the yard hands it out and takes it back.
|
|
moves_by: { out: [yard], returned: [yard] }
|
|
max_fields: 5
|
|
collects:
|
|
- { name: name }
|
|
- { name: phone, type: tel }
|
|
- { name: what, type: textarea }
|
|
- { name: from, type: date }
|
|
- { name: until, type: date }
|
|
- { name: deliver_to, optional: true }
|
|
|
|
- id: breakdown
|
|
who: someone whose hired machine has stopped working
|
|
wants: it running again, or swapped, today
|
|
door: hiring
|
|
lands_in: breakdowns
|
|
handled_by: yard
|
|
stages: [open, in_hand, resolved]
|
|
done_when: [resolved]
|
|
success: [resolved]
|
|
max_fields: 3
|
|
collects:
|
|
- { name: phone, type: tel }
|
|
- { name: machine }
|
|
- { name: what_happened, type: textarea }
|
|
- { name: where, optional: true }
|
|
|
|
- id: account-request
|
|
who: a firm that hires often
|
|
wants: to send anyone to collect, and get one invoice a month
|
|
door: firms
|
|
lands_in: accounts
|
|
handled_by: office
|
|
stages: [open, checked, approved, declined]
|
|
done_when: [approved, declined]
|
|
success: [approved]
|
|
max_fields: 4
|
|
collects:
|
|
- { name: company }
|
|
- { name: registration_number }
|
|
- { name: contact }
|
|
- { name: phone, type: tel }
|
|
- { name: invoice_email, type: email, optional: true }
|
|
|
|
- id: damage-on-return
|
|
who: someone in the yard who finds damage when a machine comes back
|
|
wants: it written down before the customer has left
|
|
enters_as: yard
|
|
lands_in: damage_reports
|
|
handled_by: office
|
|
stages: [open, invoiced, written_off]
|
|
done_when: [invoiced, written_off]
|
|
success: [invoiced]
|
|
max_fields: 3
|
|
collects:
|
|
- { name: machine }
|
|
- { name: hire_or_customer }
|
|
- { name: damage, type: textarea }
|
|
|
|
# Held out from every model that writes words.
|
|
personas:
|
|
- { id: garden-wall, need: hire-request, text: "I'm building a stone wall in the garden and need a small digger for a weekend. I've never driven one." }
|
|
- { id: roofer-lift, need: hire-request, text: "We're a roofing crew and need a scissor lift on site in Dalen from Monday for about two weeks." }
|
|
- { id: stuck-compactor, need: breakdown, text: "The plate compactor I picked up this morning won't start. I've got a crew standing around." }
|
|
- { id: lift-error, need: breakdown, text: "The lift you delivered keeps showing an error and stops halfway up. It's on our site at the school." }
|
|
- { id: landscaper-account, need: account-request, text: "We're a landscaping firm hiring from you almost every month and I'm tired of paying by card each time. Can we get invoiced monthly?" }
|
|
- { id: builder-account, need: account-request, text: "Small building firm, six people. We'd like to be able to send whoever is nearest to pick things up and have it on our account." }
|
|
- { id: yard-window, need: damage-on-return, text: "The mini digger from the Berg job came back with a smashed rear window and hydraulic oil everywhere." }
|