Takaisin projekteihin
Lataa PDF

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 Puutarhan etusivun yläosa
Rannikon Puutarhan etusivu

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.

Rannikonin työntekijän kojelaudan yleisnäkymä
Kojelaudan yleisnäkymä

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:

Päivänäkymä tuntimerkeillä
Päivänäkymä tuntimerkeillä

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
Valkoisen lomakkeen työaikanäkymä
Valkoinen lomake

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
Oranssin lomakkeen työaikanäkymä
Oranssi lomake

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
Viikkoyhteenvetonäkymä
Viikkoyhteenveto, muodostuu automaattisesti päivämerkinnöistä

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

Työnjohtajan ryhmäkirjaussivu
Työnjohtajan ryhmäkirjaussivu
  • 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

Majoitusvastaavan päivittäinen työlokisivu
Majoitusvastaavan päivittäinen työlokisivu
  • 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 / Salo
    • 200–299: Karton Cambodia
    • 300–399: Karton International
    • 400–499: Vassila
    • 500–599: Suppala
    • 600+: Salo / Turku

Ylläpitäjä

Ylläpitopaneeli, jossa koko työntekijäluettelo
Ylläpitopaneeli: koko työntekijäluettelo
  • 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

Palkanlaskennan tarkistussivu, jossa verrataan työnjohtajan ja työntekijän tunteja
Palkanlaskennan tarkistus: työnjohtajan ja työntekijän tunnit
  • 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

Työntekijän arkisto, jossa työnjohtajien työlokit aikajärjestyksessä
Työntekijän arkisto, työlokien historia aikajärjestyksessä

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-näyttötaulu, joka näyttää reaaliaikaiset työlokit majoitusrakennuksen televisiossa
Reaaliaikainen työlokinäyttö majoitusryhmien televisioille

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,00 ja 1000

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

Etsitkö kehittäjää, joka osaa rakentaa oikeita ratkaisuja oikeisiin ongelmiin?

contact@victorabuchi.com