liiketoimintaprosessi tilaukset-laskutus luonnos metodi v2 päivitetty 2026-08-12 git 944016d
Lähteet (koodi)
  • backend/lambdas/generate/saas_onboarding.py
  • backend/lambdas/generate/feature_flags.py
  • backend/lambdas/stripe_webhook/handler.py
  • backend/lambdas/generate/handler_api.py
  • scripts/list-saas-tenant-lifecycle.py
  • scripts/delete-saas-tenant.py

Cloud-tilauksen elinkaari

Tarkoitus

Asiakas voi ostaa VeraFrame Cloudin itse verkosta, ottaa sen käyttöön ilman myyjän apua, hallinnoida laskutustaan ja lopettaa halutessaan — ja VeraFramen puolella jokainen näistä muuttaa automaattisesti sitä, mitä asiakas saa tehdä. Sama koneisto vastaa myös siitä, mitä tapahtuu asiakkaan datalle lopettamisen jälkeen.

Tämä on ainoa prosessi projektissa, joka tuottaa maksavan asiakkuuden ilman ihmisen työtä.

Toimijat ja laukaisin

Prosessin vaiheet

Vaihe Mitä tapahtuu (substanssi) Tekninen kohta Käytettävissä oleva data
1 Ostaja täyttää yrityksen nimen ja sähköpostin, valitsee paketin ja hyväksyy käyttöehdot Itsepalvelutilauksen aloitus #vaihe-1 (ei näytteessä) · handler_api.py:838 lomakkeen kentät
2 Järjestelmä varmistaa, että kyse on uudesta asiakkaasta — olemassa oleva tili ohjataan laskutusportaaliin Itsepalvelutilauksen aloitus #vaihe-3 (ei näytteessä) · saas_onboarding.py:696 Tenanttikonfiguraatio (ei näytteessä)
3 Ostaja siirtyy Stripen maksusivulle ja maksaa. Verot, laskutusosoite ja ALV-tunnus kerätään Stripessä Itsepalvelutilauksen aloitus #vaihe-5 (ei näytteessä) · saas_onboarding.py:736 Stripen Checkout-kuorma
4 Maksu onnistuu → tenantti syntyy: oma tietovarasto, konfiguraatio ja omistajan tunnistetiedot Tenantin provisiointi (ei näytteessä) · saas_onboarding.py:1133 Tenantin saas-lohko (ei näytteessä) · SaaS-käyttäjätietue (ei näytteessä)
5 Ostaja asettaa salasanan aktivointilinkistä ja saa admin-tunnuksen Tilin aktivointi (ei näytteessä) · saas_onboarding.py:458 SaaS-käyttäjätietue (ei näytteessä)
6 Admin kutsuu tenanttiin muita käyttäjiä ja antaa heille roolit Tenantin käyttäjähallinta (ei näytteessä) · saas_onboarding.py:374 SaaS-käyttäjätietue (ei näytteessä)
7 Käyttö: kirjautuminen tarkistaa laskutustilan Stripestä ja avaa vain ne toiminnot, jotka pakettiin kuuluvat Tuoteominaisuuksien ratkaisu (ei näytteessä) · Täsmäytys Tuoteominaisuudet ja compliance (ei näytteessä)
8 Maksu epäonnistuu → kaikki toiminnot sulkeutuvat, myös hallintapaneeli Stripe-tapahtuman käsittely #vaihe-4 · saas_onboarding.py:1253 Tenantin saas-lohko (ei näytteessä)
9 Asiakas hallinnoi maksutapaa tai peruu tilauksen Stripen laskutusportaalissa Laskutusportaali ja tilauksen lopetus #vaihe-1 (ei näytteessä) · saas_onboarding.py:789 Tenantin saas-lohko (ei näytteessä)
10 Peruutus voimaan kauden lopussa → tenantti siirtyy lukutilaan: raportit ja vienti toimivat, työkalut eivät Tilauksen tilan päivitys #vaihe-4 (ei näytteessä) · saas_onboarding.py:1244 Tuoteominaisuudet ja compliance (ei näytteessä)
11 60 vrk armonaika: asiakas voi palata (tila palautuu ja poistoaikataulu peruuntuu) tai data poistetaan Tilauksen tilan päivitys #vaihe-3 (ei näytteessä) · saas_onboarding.py:951 Tenantin saas-lohko, elinkaarikentät (ei näytteessä)
12 Lopullinen poisto: tilaus lopetetaan Stripessä ja tenantin data, käyttäjät ja tunnukset poistetaan Laskutusportaali ja tilauksen lopetus #vaihe-4 (ei näytteessä) · saas_onboarding.py:1338 Tenanttikonfiguraatio (ei näytteessä)

Liiketoimintasäännöt

  1. Vain uusi asiakas voi ostaa itse. Olemassa olevan tenantin laskutus aktivoidaan uudelleen Stripen portaalista, ei uudella ostolla. Syy on tekninen mutta seuraus liiketoiminnallinen: tenantti-identiteetti (ja siten asiakkaan data) säilyy peruutuksen yli.
  2. Käyttöehdot on hyväksyttävä ennen maksua. Hyväksyntä on pakollinen kenttä. Mutta hyväksytty ehtoversio ei jää talteen — selain lähettää accepted_terms_version-kentän, jota backend ei lue eikä tallenna (datavirta, vaihe 1→2 (ei näytteessä)). > TODO: substanssiosaajan vahvistus — onko ehtoversion todistaminen vaatimus? Jos on, tämä on korjattava.
  3. Kolme oikeustasoa, ei kaksi. Aktiivinen (kaikki), peruutettu (lukutila: hallintapaneeli, raportit ja pohjat), maksuhäiriö (ei mitään). Maksuhäiriö on siis ankarampi kuin peruutus.
  4. Maksuhäiriössä asiakas ei pääse korjaamaan maksutapaansa VeraFramessa. Laskutusportaali on hallintapaneelin takana, joka sulkeutuu past_due-tilassa. Korjaus tapahtuu Stripen omasta sähköpostista tai tuen kautta. > TODO: substanssiosaajan vahvistus — onko tämä haluttu käytös?
  5. Peruutus antaa 60 vrk aikaa saada data ulos. Vienti- ja raporttitoiminnot pidetään auki tarkoituksella juuri tästä syystä.
  6. Tenantin omistajaa ei voi poistaa. Admin ei voi poistaa omistajaa eikä itseään. Omistaja määräytyy ostohetken sähköpostista.
  7. Yksi sähköpostiosoite kuuluu yhteen tenanttiin. Osoitetta ei voi lisätä kahteen tenanttiin, ja käytetyllä osoitteella ei voi tehdä uutta itsepalveluostoa.
  8. REST API ei kuulu Cloud-pakettiin. Se on integration-paketin ominaisuus, jota ei myydä itsepalveluna lainkaan — vain operaattori voi luoda sellaisen tenantin.

Poikkeukset ja virhetilanteet substanssin kannalta

Aktivointilinkki vanhenee kolmessa vuorokaudessa. Aika lasketaan maksusivulle siirtymisestä, ei maksun hetkestä. Jos ostaja keskeyttää ja viimeistelee maksun päiviä myöhemmin, linkki voi olla jo vanhentunut. Silloin tenantti on olemassa ja laskutus käynnissä, mutta asiakas ei pääse sisään — eikä itsepalvelupolkua ulos ole. Tuen on luotava tunnus operaattoriskriptillä.

Aktivointi voi tulla ennen tenanttia. Maksun jälkeinen paluu selaimeen ja tenantin syntyminen ovat eri tapahtumia. Jos asiakas on nopeampi kuin Stripen webhook, hän näkee viestin "Maksun jälkeinen käyttöönotto on vielä kesken. Yritä hetken kuluttua uudelleen." Se on odotettu tilanne, ei virhe.

Laskutustila voi olla hetken vanha. Kirjautuminen tarkistaa tilan Stripestä, mutta enintään 15 minuutin välein. Juuri maksettu lasku voi siis näkyä oikeuksissa viiveellä; uudelleenkirjautuminen ei nopeuta sitä.

Armonajan päättyminen ei poista mitään itsestään. Ilmoitettu poistopäivä on merkintä, jonka toteuttaa vain operaattorin ajama skripti. Jos sitä ei ajeta, peruutetun asiakkaan data säilyy määräämättömän ajan. Tämä on ero asiakaslupauksen ja toteutuksen välillä, ja se on syytä tietää ennen kuin säilytysaikaa käytetään myynti- tai tietosuoja-argumenttina (havainto (ei näytteessä)).

Poisto voi jättää sähköpostiosoitteen varatuksi. Jos poiston aikana yksittäinen askel epäonnistuu, osoitteen tenanttiviittaus voi jäädä jäljelle. Käytännön seuraus: sama asiakas ei voi palata itsepalveluostolla samalla osoitteella. Vastaus näyttää onnistuneelta, joten vika havaitaan vasta kun asiakas yrittää uudelleen.

Liittyvät