Laskutus (myyntilaskut)#
ELT laskuttaa pääosin kahdesta lähteestä:
- Field Service tehtävät — kun työ on valmis, tehtävän tunnit + kulut + tuotteet siirtyvät laskulle
- Suorat laskut — esim. kausilasku sopimusasiakkaalle, ennakkomaksu, ei tehtäväpohjaista
Tyypillinen flow: tehtävästä laskuksi#
- Asentaja kuittaa tehtävän valmiiksi (state = “Valmis”).
- Työnjohtaja hyväksyy tunnit ja kulut viikoittain (Hyväksynnät).
- Toimisto luo laskun:
- Avaa tehtävä → Action → “Create Invoice”.
- Odoo luo
account.move-rivin (Draft-tilassa). - Asentajan kirjaamat tunnit × asentajan tuntihinta, kulut ja tuoterivit siirtyvät automaattisesti.
- Tarkistus: avaa Draft-lasku.
- Tarkista että rivit, hinnat, ALV-luokat ovat oikein.
- Resolution-teksti (asentajan kirjoittama yhteenveto) näkyy laskun otsikossa / muistiossa — asiakas näkee tämän.
- Confirm: Action → Post.
- Lähetys asiakkaalle ja Netvisoriin:
- Lähetys asiakkaalle: Action → Send & Print (PDF + sähköposti).
- Netvisoriin: katso Netvisor-integraatio.
Laskun rakenne#
Odoon account.move:n osat:
| Osa | Sisältö |
|---|---|
| Customer | Asiakas (asiakas, ei kohde) |
| Invoice Date | Laskutuspäivä, oletuksena tänään |
| Due Date | Eräpäivä, oletuksena +30 päivää |
| Invoice Lines | Tunnit (palvelu), kulut (palvelu), tuotteet (varasto) |
| Total | Yhteissumma ALV mukaan |
Tehtävän kytkös#
account.move.line.fsm_order_ids on Many2many kenttä joka
kertoo mistä tehtävistä rivi tulee. Yksi rivi voi (harvinaisesti)
liittyä useaan tehtävään, ja yksi tehtävä voi (yleisesti) tuottaa
useita rivejä.
**OCA:n kenttä on monikko: `fsm_order_ids`, ei `fsm_order_id`!** Domain-haut joissa käytetään väärää nimeä kaatuvat "Invalid field … in leaf" -virheellä. (200.x korjattu).
Hintojen tarkistus#
Asentajan PWA:han näkyy tukkuhinta. Mutta laskutushinta on myyntihinta = tukku + ELT:n marginaali. Marginaalin laskenta:
- Tyypillinen marginaali asetetaan tuotteen
list_price-kenttään Inventory:ssa. - Asiakaskohtaiset poikkeukset hoidetaan Pricelisteillä.
- Tarkistus laskunteon yhteydessä ennen Post:ia.
Hour-for-hour vs. arvio#
Hour-for-hour -toggle on tehtäväformissa. Jos päällä: laskutetaan ne tunnit jotka asentaja oikeasti kirjasi. Jos pois: voidaan käyttää ennakkoarviota (esim. urakka-asiakkaalle).
ELT:llä useimmiten hour-for-hour päällä — tuntikalkulaatio on läpinäkyvämpää.
Credit notes (hyvityslaskut)#
Jos asiakas valittaa tai virhe huomataan jälkikäteen:
- Avaa Posted-tilan lasku.
- Action → “Reverse” → Reverse Entry.
- Odoo luo “credit note” -rivin samalla summalla, miinusmerkillä.
- Tarvittaessa luo uusi lasku korjatulla sisällöllä.
Älä yritä muokata postattua laskua — eheys rikkoutuu, audit- chain katoaa.
ALV-käytäntö#
- Suomeen yleisesti: 25,5 % (alv-laki muutos 1.9.2024 jälkeen, poikkeuksellisia tuotekategorioita)
- Lääkinnälliset: 14 %, 10 %
- Vienti: 0 %
- Ulkomaa EU: käännetty verovelvollisuus (laskutus 0 %, asiakas maksaa omassaan)
ALV-luokat määritetään Inventory → Configuration → Taxes. Tuotetasolla pakollinen tieto.