1 + 2Sales tool, page 3: kg or kpl on every row, and several rows per item
Right now only your own added rows can switch between kg and kpl. Rows picked from the price list are locked to their list unit, and the "Kilohinnat" rows can only ever be kg.
Now
B · Kilohinnat
Liinavaatteet kilohinnalla€/kg · 2.20–3.00
Lakanat kilohinnalla€/kg · 2.20–3.50
B · Kappalehinnat
Pussilakanat 150 x 200€/kpl · 1.20–2.00
Lakanat€/kpl · 0.95–1.50
Each list item can be picked only once, and its unit can't change.
Proposed (try the toggles)
B · Kilohinnat
B · Kappalehinnat
new: a kg/kpl toggle on every row, and a ⧉ button that adds another row for the same item
Every row in A and B, whether from the list or your own, gets the same kg | kpl toggle. The weekly rental fee stays €/vko.
When a row is switched away from its list unit, the list price range no longer applies, so the hint says "oma hinta", the same as on your own rows.
⧉ Toinen rivi adds another row for the same item, for example Lakanat once per kg and once per piece, or two sizes. Each copy has its own unit, price and size.
Own rows under Kilohinnat get the kg | kpl toggle too (today they're always kg).
The PDF prints whatever unit each row has. The 25-row limit per table stays.
This needs no database change. Offers are saved as one document, and old offers open unchanged.
Decided 19.10: (a), exactly as mocked. Being built now. The original question was: by "several rows per category", did you mean (a) what's shown here, the same item added more than once plus your own rows, or (b) new category headings inside B (e.g. Liinavaatteet / Vaatteet / Työasut), each holding its own rows? (a) is a small change. (b) changes the PDF layout of card B, so I'd mock that up separately first.
3Info icons on the deal-flow columns
Hover the i next to "Kartoitus". Move the mouse into the box and it stays open. On a phone, tap the icon. "Tulosta" prints only the box.
Liidit
4 kauppaa
12 400 €
Hotelli EsimerkkiPuhelu ti
Kartoitus
Kartoitus DRAFT 4
3 kauppaa
8 900 €
Palvelutalo AurinkoKartoitus to
Siivous OyEi seuraavaa toimenpidettä
Tarjous
2 kauppaa
15 000 €
Hostel TurkuTarjous lähetetty
Neuvottelu
1 kauppa
6 200 €
Kylpylä XHinta-neuvottelu
Kartoitus first. The other columns get their icon once you give me their text. Until then they show no icon (greyed here only to show where they'll go).
The box opens on hover, stays open while the mouse is inside it, and closes when the mouse leaves. Tap or keyboard opens it too, so it works on a phone and with Tab.
Tulosta lomake prints the 4-page A4 answer form in section 3b, not the pop-up itself.
The text is in Finnish and English, following the CRM's language setting.
The pop-up shows draft 4: a short cheat sheet for the call. See section 3b.
Decided 19.10: option (a), text in the code. The original question was: where should the text live? (a) In the code: fastest, ships today, and you send me changes and I update it. (b) Editable in the CRM by admins (a ✏️ in the box): no waiting on me, but it needs a small database table, and that goes live on the production database. I'd do (a) now and (b) later if you find you edit it often.
3bKartoitus question set, draft 4 DRAFT 4
Plain language, so it works for someone who has never heard of any sales method: a conversation (8 open questions, each with one follow-up) plus a fact list for the offer. Hover the i on Kartoitus above to see the pop-up, or print the form below. The → Tarjous tags appear on this page only.
A · Keskustelu: the conversation
B · Faktat: what the offer needs
Printed form (large font, A4): what "Tulosta lomake" produces
(print preview or Save as PDF shows the real page breaks)
For Varia: reword, cut or add anything. Reply by letter and number, e.g. "A3 reword to…", "drop F14". Once you're happy, I'll build it into the CRM.
4How a good kartoitus works (and what Chris Voss would do) FOR DISCUSSION
Nothing on this page changes yet. This section is the thinking behind draft 3 of the questions.
The problem with draft 2
Draft 2 is a good fact sheet but a poor conversation. Read top to bottom it's 20 questions, mostly closed ("how many kg?", "how often?"), and that feels like an interrogation. The customer answers politely, but never says what actually bothers them. Without that we can price the offer, but we can't win it.
Sales best practice for discovery
Listen more than you talk. Gong's call data: the best reps talk under half the time (~43 %). Good discovery calls have about 11–14 questions, spread through the conversation rather than fired in a row.
Go from situation to pain. The SPIN order: Situation (how it works now) → Problem (what's hard) → Implication (what that costs them) → Need-payoff (what good would look like). Most reps stop at situation, and the money is in implication.
Find out how the decision gets made, not just who makes it: who else has a say, what they compare against, and when the current contract ends.
Don't pitch or quote prices in kartoitus. The offer is the next step.
Always leave with a dated next step ("käydään tarjous läpi torstaina klo 10"), then recap it in writing the same day.
Qualifying a deal out is a win too. If they're happy and locked in for 3 years, log the re-tender date and move on.
What Chris Voss would do
Voss (Never Split the Difference, ex-FBI hostage negotiator) would treat kartoitus as finding out what's really going on, not as filling in a form. His tools, translated for a Turun Suurpesula call:
Tactical empathyShow you understand their situation before asking for anything."Kuulostaa siltä, että pyykkiasiat vievät teiltä enemmän aikaa kuin pitäisi."
Accusation auditSay their objection out loud before they do. It takes the sting out."Saatat ajatella, että tässä on taas yksi pesula, joka lupaa halvemman hinnan ja sitten myöhästelee."
Calibrated questionsOpen "mitä / miten" questions instead of yes/no or "miksi" (which sounds like blame)."Miten pyykkihuolto toimii teillä nyt?" · "Mikä siinä on hankalinta?"
LabelingName the feeling you hear, then stay quiet and let them fill the silence."Vaikuttaa siltä, että luotettavuus on teille hintaa tärkeämpää." … (hiljaisuus)
MirroringRepeat their last 1–3 key words as a question. They keep talking and explain more.Asiakas: "…ja sitten ne lakanat tuli taas myöhässä." → "Taas myöhässä?"
Aim for "juuri niin"Summarise their problem in your own words until they say "that's right". That's agreement. "Ihan totta" / "you're right" is only politeness."Eli jos ymmärsin oikein: …"
No-oriented questionsPeople say "no" more easily than "yes". Use that for the next step."Olisiko huono idea, että teen tarjouksen ja käydään se läpi torstaina?"
Black swansListen for the one unknown that changes everything: the real reason they're talking to us.e.g. the cleaner who quits if the laundry piles up, the resident's lost clothes that cause complaints
Team behind the tableAsk how the decision affects the people who aren't on the call, and you'll find who can block it."Miten tämä vaikuttaa siivoustiimiin?" · "Kuka muu tästä haluaa sanoa sanansa?"
VoiceCalm, warm, unhurried. The "late-night radio" voice for facts and prices, playful the rest of the time.
What this means for the questions (draft 3 proposal)
Split kartoitus into two layers and print them separately:
A · Keskustelu (the conversation)
About 8 calibrated questions in SPIN order, with a Voss phrase as a crib under each and a big answer space.
Miten pyykkihuolto toimii teillä tällä hetkellä?
Mikä siinä on hankalinta?
Mitä tapahtuu, kun jokin menee pieleen (myöhästyy, katoaa, likainen)?
Mitä se maksaa teille: aikaa, rahaa, asiakas- tai asukaskokemusta?
Miltä hyvin toimiva pyykkihuolto näyttäisi teille?
Mikä on teille tärkeintä, kun valitsette pesulaa?
Miten tällainen päätös tehdään, ja kuka muu siihen vaikuttaa?
Mikä voisi estää tämän etenemisen?
Then: summary → "juuri niin" → no-oriented next step with a date.
B · Faktat (for the offer)
Draft 2's tick boxes and numbers (textiles, kg/week, own vs rental, kg vs kpl, pickup rhythm, addresses, VAT payer…). Mostly ticked as they come up, and the rest asked at the end. It can also be emailed to the customer to fill in.
This layer keeps the link to the sales tool, so the offer still needs no callback.
Last box on the form
"Asiakkaan omin sanoin": the problem, what good looks like, and any black swan. Copied into the deal in CRM the same day, and it becomes page 2 of the offer.
The pop-up in CRM becomes a cheat sheet: the 8 conversation questions plus the 4 Voss tools reps will actually use (label, mirror, "juuri niin", no-oriented close). The full fact list stays on the printout.
For Varia: does this direction feel right? If yes, I'll mock up draft 3 (pop-up and the 3-page printout) here before touching anything in the CRM. Edit the 8 questions freely. They're the heart of it.
5Sales tool: a Swedish offer PLAN
Not difficult, but it's more translation than code. The CRM itself stays in Finnish and English; only the offer document gets Swedish.
The start screen of a new offer
Millä kielellä tarjous tehdään?
Kieli valitaan ennen täyttämistä, eikä sitä voi vaihtaa kesken tarjouksen. Toisenkielinen versio tehdään uutena tarjouksena kaupalta.
new: Svenska. Everything after it works the same as Suomi and English.
A few lines of the Swedish offer (sample)
Vuokratekstiileinä
Som hyrtextilier
Omien tekstiilien pesu ja huolto
Tvätt och skötsel av egna textilier
PUHTAUS · LAATU · LUOTETTAVUUS
RENHET · KVALITET · PÅLITLIGHET
Tarpeenne ja ehdotuksemme
Era behov och vårt förslag
OMA PALVELUJOHTAJANNE
ER SERVICEDIREKTÖR
Lakanat kilohinnalla
Lakan, kilopris
2,60 €/kg · 1,50 €/kpl
2,60 €/kg · 1,50 €/st
Hinnat eivät sisällä arvonlisäveroa (25,5 %)
Priserna exkluderar mervärdesskatt (25,5 %)
What gets translated: every printed text in the offer, about 150 lines. That covers pages 1–7, the price-list item names, the FAQ (page 4), how it works (page 5) and about us (page 6). Swedish text often runs longer than Finnish, so I check every line still fits its place on the page, the same check the Finnish version passes.
Turun Suurpesula stays as the brand name. Addresses use the Swedish place name (Åbo).
One small database change: today the database only accepts "fi" or "en" as an offer's language. It needs to accept "sv" too. Existing offers are copied over unchanged. This goes live on the production database when merged.
Work: a few hours, as one PR.
Decided 19.10: Mikke and Niklas proofread → proofreading list (109 rows). Database change OK. Built as PR #66, merged after the proofread.
For Varia: (1) Who can proofread the Swedish? My Swedish is good but not a native salesperson's. Someone at Melers or a Swedish-speaking customer contact would make it sound right. I'd post the full text as a list to check before it goes live. (2) OK to make the database change above?
How it ships
Two separate PRs: A the sales tool (1 + 2), B the info icons (3). Each goes through tests, merges to main and deploys automatically.
Neither needs a database migration, unless you pick (b) for the info text.
Once I have your answers to the two questions above, I start.