Rannikon: täyden pinon marjatilan työaikajärjestelmän rakentaminen tyhjästä
Näin suunnittelin, rakensin ja julkaisin kokonaisen työvoiman hallintajärjestelmän Rannikon Puutarhan marjatilalle Suomessa. Se palvelee yli 300 kausityöntekijää kuudessa majoitusryhmässä viidellä kielellä.
01 · Yleiskatsaus
Rannikon Puutarha on yksi Suomen suurimmista marjatiloista, ja se sijaitsee Halikossa Lounais-Suomessa. Joka kausi tila työllistää yli 300 kausityöntekijää Ukrainasta, Kambodžasta, Vietnamista, Nepalista ja muualta, ja jokaisen tulee seurata päivittäisiä työtuntejaan neljällä virallisella palkanlaskennan paperilomakkeella: valkoisella lomakkeella, oranssilla lomakkeella, viikkoyhteenvedolla ja vihreällä lomakkeella.
Ennen Rannikonia jokainen työntekijä täytti lomakkeet käsin. Kaikki laskutoimitukset tehtiin manuaalisesti. Työnjohtajat kirjasivat saapumisajat vihkoihin. Palkanlaskennan henkilöstö käytti päiväkausia satojen paperilomakkeiden tarkistamiseen kunkin kuukauden lopussa. Virheitä sattui usein. Riitoja tunneista syntyi säännöllisesti.
Rakensin Rannikonin ratkaisemaan kaiken tämän.
02 · Haaste
Tilalla ei ollut digitaalista järjestelmää työtuntien seurantaan. Aiempi prosessi:
- Työntekijät saapuivat tilalle, ja työnjohtajat kirjasivat heidän työnumeronsa ja aloitusaikansa vihkoihin
- Työntekijät laskivat omat tuntinsa käsin neljälle eri paperilomakkeelle
- Laskuvirheitä sattui usein: valkoisen lomakkeen, oranssin lomakkeen ja viikkoyhteenvedon kaava on monimutkainen
- Työnjohtajat lähettivät käsinkirjoitetut päivälokit majoitusvastaaville Facebook-ryhmien kautta
- Majoitusvastaavat lajittelivat lokit käsin majoitusryhmittäin ja välittivät ne palkanlaskentaan
- Palkanlaskenta sai kuukausittain satoja paperilomakkeita, joita ei voinut tarkistaa alkuperäisiä työnjohtajien merkintöjä vasten
Tilanjohtaja Lina Rannikolla ei ollut digitaalista näkymää päivittäiseen toimintaan. Palkanlaskentatiimillä, jota johtivat Aleksi ja Johanna, ei ollut automaattista tarkistusjärjestelmää.
03 · Ratkaisu
Lähestyin Lina Rannikkoa suoraan ja ehdotin kokonaisen digitaalisen työvoiman hallintajärjestelmän rakentamista. Hän hyväksyi projektin, ja rakensin koko järjestelmän yksin usean kuukauden aikana.
Rannikon on täyden pinon SaaS-sovellus, johon kuuluu:
- Verkkosovellus osoitteessa
rannikon.com - Natiivi Android-mobiilisovellus Google Play -kaupassa
- Fastify-REST-rajapinta osoitteessa
api.rannikon.com - PostgreSQL-tietokanta Supabasen EU-alueella
- Julkaistu Renderissä automaattisella julkaisulla GitHubista
04 · Laskentamoottori
Järjestelmän ydin on automaattinen tuntilaskentamoottori. Työntekijät syöttävät kolme arvoa: todellisen aloitusajan, todellisen lopetusajan ja taukojen kokonaiskeston. Moottori laskee automaattisesti:
Valkoinen lomake: tuntipalkalla maksettava työ
- Valkoinen alku = todellinen aloitusaika
- Valkoinen loppu = todellinen alku + 8 tuntia + ruokatauko (30 min, jos tauko on vähintään 30 min)
- Valkoiset tunnit = aina 8:00 (tai vähemmän, jos työntekijä lopetti aiemmin)
- Ylimääräiset tauot = taukojen kokonaisaika miinus 30 minuutin ruokatauko
Oranssi lomake: tuntipalkalla maksettava lisätyö
- Oranssi alku = valkoinen loppu
- Oranssi loppu = todellinen lopetusaika
- Oranssi tauko = sama kuin ylimääräinen tauko valkoisella lomakkeella
- Oranssit tunnit = oranssi loppu miinus oranssi alku miinus oranssi tauko
Viikkoyhteenveto: muodostuu automaattisesti kaikista merkinnöistä
- Työtuntirivi (enintään 8 päivässä)
- Lisätuntirivi (enintään 3 päivässä maanantaista perjantaihin, enintään 11 lauantaina)
- Marjanpoiminnan kilorivi
- Tunnit yhteensä päivässä ja viikossa
Vihreä lomake: marjanpoiminta, palkka maksetaan kilojen mukaan
- Erillään peltotyön merkinnöistä
- Työntekijät syöttävät aloitusajan, lopetusajan, poimitut kilot ja mitä poimittiin
- Ei laskentaa: näyttää täsmälleen sen, mitä työntekijä syötti
- Ruokataukosarake näyttää aina 1 tunnin
Tämä laskentamoottori toimii kokonaan taustajärjestelmässä (Fastify), joten kaikki työntekijät näkevät saman tarkan tuloksen laitteesta tai selaimesta riippumatta.
05 · Roolijärjestelmä
Rannikonissa on 6 käyttäjäroolia, joilla kullakin on oma sivunsa ja omat oikeutensa:
Työntekijä
- Kirjaa päivittäiset tunnit
- Katsoo ja lataa kaikki 4 lomaketta PDF- tai Excel-muodossa
- Muokkaa mitä tahansa solua suoraan lomakkeilla
- Lähettää kuukausilomakkeet palkanlaskentaan
Työnjohtaja
- Kirjaa työntekijäryhmät tilalla (useita työntekijöitä, yksi aloitusaika)
- Kirjaa tauot päivän mittaan (järjestelmä laskee kokonaisajan)
- Asettaa lopetusajan ryhmälle: täyttää kaikkien työntekijöiden työaikakirjaukset automaattisesti
- Lähettää päivittäisen työlokin ylläpitäjälle sähköpostitse
- Vie päivän työlokin PDF- ja Excel-muotoon
Majoitusvastaava
- Saa ylläpitäjältä päivittäiset työlokit lajiteltuina oman majoitusryhmänsä mukaan
- Lataa PDF-, Excel- tai kuvamuodossa
- Jakaa Facebook-ryhmään tai WhatsAppiin
-
Työntekijät lajitellaan automaattisesti työnumeron mukaan 6 majoitusryhmään:
100–199: Kivilinna / Salo200–299: Karton Cambodia300–399: Karton International400–499: Vassila500–599: Suppala600+: Salo / Turku
Ylläpitäjä
- Näkee kaikki yli 300 työntekijää
- Saa kaikki työnjohtajien päivälokit
- Lajittelee työlokit automaattisesti majoitusryhmän ja työnumeron mukaan
- Lähettää kunkin ryhmän työlokin oikealle majoitusvastaavalle
- Lähettää samanaikaisesti palkanlaskentaan tarkistettavaksi
- Kutsuu uudet käyttäjät sähköpostilla ja määrittää roolin
- Hallinnoi kaikkia rooleja: työntekijä, työnjohtaja, majoitusvastaava, palkanlaskenta, ylläpitäjä
Palkanlaskenta
- Saa ylläpitäjältä työnjohtajien päivittäiset työlokit tarkistettavaksi
- Saa työntekijöiden kuukausilomakkeet
- Älykäs tarkistusjärjestelmä vertaa työnjohtajan kirjaamia tunteja työntekijän lähettämiin tunteihin
- Näyttää päiväkohtaisesti täsmää, poikkeaa, puuttuu työntekijältä, puuttuu työnjohtajalta
- Hyväksyy, hylkää tai merkitsee tarkistusta tarvitsevat lähetykset
- Vie tarkistusraportit PDF-muodossa
Työntekijän arkisto: päivittäisten työlokien näkyvyys
Jokainen työntekijä voi kirjautua sisään ja katsoa arkistosivua, joka on aikajärjestyksessä oleva tallenne kaikista tilalla kirjatuista työnjohtajien työlokeista. Työntekijät tarkistavat sen avulla omat kirjatut tuntinsa ennen kuin lähettävät ne palkanlaskentaan. Työlokit tallennetaan päivämäärän mukaan ja ne ovat kaikkien työntekijöiden nähtävillä majoitusryhmästä riippumatta. Näin jokainen työntekijä näkee täysin läpinäkyvästi, mitä hänen työnjohtajansa on kirjannut pellolla, ja riidat tunneista poistuvat.
Rannikon-näyttötaulu: reaaliaikainen tilan näyttöjärjestelmä
Rannikon Puutarha asentaa televisiot jokaiseen majoitusryhmän rakennukseen. Nämä näytöt synkronoituvat suoraan työnjohtajien kirjausjärjestelmän kanssa reaaliajassa. Kun työnjohtajat kirjaavat työntekijöiden saapumisia, ryhmiä ja lopetusaikoja pellolla, tiedot näkyvät suorana kunkin majoitusrakennuksen televisioruuduilla.
Viikonloppuisin viikkotyölokit näytetään majoitusrakennusten televisioissa. Työntekijät voivat kävellä ruudun luo ja nähdä kirjatut tuntinsa, aloitus- ja lopetusaikansa sekä viikon kokonaistuntinsa ilman että heidän tarvitsee avata sovellusta.
Tämä ominaisuus poistaa tarpeen, että majoitusvastaavat julkaisevat työlokeja käsin Facebook-ryhmiin joka päivä. Tieto tavoittaa työntekijät automaattisesti heidän asuintiloihinsa asennettujen näyttöjen kautta.
06 · Tekninen toteutus
- Käyttöliittymä:
Next.js 16,React,jsPDF,jspdf-autotable,xlsx, DM Sans font - Taustajärjestelmä:
Fastify 5,PostgreSQL, JWT-tunnistautuminen, Google OAuth - Tietokanta: Supabase EU West (Irlanti)
- Sähköposti: Resend (
noreply@rannikon.com) - Mobiili:
React Native(Expo SDK 54),expo-print,expo-sharing,expo-secure-store - Hosting: Render (verkkopalvelu + staattinen sivusto)
- Kielet: englanti, ukraina, khmer (Kambodža), vietnam, nepali
- Versionhallinta: GitHub (
github.com/victorabuchi/rannikon)
Keskeiset tekniset ratkaisut
- Laskentamoottori toimii kokonaan taustajärjestelmässä: ei päällekkäistä logiikkaa käyttöliittymässä
- Päivämäärät tallennetaan klo 12 UTC:na, jotta vältetään aikavyöhykkeestä johtuvat yhden päivän virheet Suomessa (UTC+3)
- JWT-tunnisteet 30 päivän voimassaololla tallennetaan
localStorageen - CORS määritetty erikseen sallimaan
DELETE-metodi - Vihreän lomakkeen merkinnät ovat omassa taulussaan (
green_paper_entries) erillään peltotyön merkinnöistä (timesheet_entries) - Älykäs ajan syötteen jäsennys: hyväksyy muodot
10:00,10.00,10,00ja1000
07 · Vaikutus
- Yli 300 aktiivista työntekijää käyttää järjestelmää kuudessa majoitusryhmässä
- 5 kieltä tuettuna: työntekijät käyttävät sovellusta omalla äidinkielellään
- Ei yhtään manuaalista laskuvirhettä: moottori hoitaa kaiken laskennan automaattisesti
- Työnjohtajat säästävät tunteja päivittäin: ryhmäkirjaus korvaa käsin täytettävät vihkot
- Palkanlaskennan tarkistus lyheni päivistä minuutteihin
- Lina Rannikko (tilanjohtaja) hyväksyi ja suositteli järjestelmää virallisesti
- Julkaistu Google Play -kaupassa
- Tilanjohtaja yhdisti Victorin muihin yrityksiin mahdollisia projekteja varten
08 · Mitä opin
1. Puhu ensin oikeille käyttäjille
Laskentakaava muuttui useita kertoja oikeiden tilatyöntekijöiden ja palkanlaskennan henkilöstön palautteen perusteella. Sen saaminen oikeaksi vaati sellaisten fyysisten paperilomakkeiden ymmärtämistä, joita työntekijät olivat käyttäneet vuosia.
2. Pidä laskentalogiikka yhdessä paikassa
Alkuvaiheessa syntyi merkittävä virhe, koska käyttöliittymällä oli oma kopionsa laskentakaavasta, joka erkani taustajärjestelmän kaavasta. Pidä aina yksi totuuden lähde.
3. Rakenna todellista käyttöympäristöä varten
Työntekijät käyttävät sovellusta pelloilla heikon yhteyden varassa, halvoilla Android-puhelimilla ja muilla kielillä kuin englanniksi. Jokaisessa suunnitteluratkaisussa piti huomioida tämä.
4. Aloita yksinkertaisesta, lisää monimutkaisuutta vähitellen
Järjestelmä alkoi yksinkertaisena työaikalaskurina. Työnjohtajien ryhmäkirjaus, palkanlaskennan tarkistus ja marjanpoiminnan vihreä lomake lisättiin kaikki sidosryhmien suorien pyyntöjen perusteella.
5. Henkilökohtaiset suhteet ovat tärkeitä liiketoiminnassa
Projekti eteni, koska tapasin Linan, Aleksin ja Johannan kasvokkain, ei pelkästään sähköposteilla tai viesteillä.
09 · Tekniset linkit
- Käytössä oleva sovellus: rannikon.com
- GitHub: github.com/victorabuchi/rannikon
- Mobiili (GitHub): github.com/victorabuchi/rannikon-mobile
Etsitkö kehittäjää, joka osaa rakentaa oikeita ratkaisuja oikeisiin ongelmiin?
contact@victorabuchi.com