dimesum

Etusivu / Blogi / Raha

Raha

Eritellyn laskun jakaminen reilusti

· 7 min lukuaika ·

Merkitse, kuka söi jakamattoman rivin, ja anna veron seurata kulutusta, niin kukaan ei maksa annoksesta, jota ei syönyt.

Jaa 525 euron illallinen tasan, ja yksi maksaa 70 euroa liikaa. Kolmesta kaksi söi 200 euron äyriäislautasen eikä kolmas syönyt, mutta tasajako veloittaa kaikilta kolmelta 175 euroa. Dimesum käsittelee laskun yhtenä menona: tasajako ylimmällä tasolla, ja 200 euron rivin kantavat vain ne kaksi, jotka sen tilasivat.

Lähes tasan jaettavat laskut, joissa on yksi jakamaton rivi, ovat yleisin asia, jota jakosovellukselta pyydetään, eikä Dimesumin ensimmäinen tietomalli osannut ilmaista sellaista. Aiempi rakenne teki ITEMIZED-tyypistä jakotyypin, joka sulki pois EQUAL-, PERCENT- ja SHARES-tyypit. Todellinen ravintolalasku on molempia yhtä aikaa.

Erittely on menon yksityiskohta, ei eri jakotapa

Eritelty meno Dimesumissa on tavallinen meno, joka sattuu kantamaan rivinsä. Meno säilyttää kaiken, mitä menoilla jo on: loppusumman, osallistujat, jakotyypin, yhden tai useamman maksajan. Tähän se lisää erät, eli laskun rivit, ja korjaukset, eli niiden alle painetut verot, tipit, maksut ja alennukset.

Kaksi tasoa ratkaisee sitten jokaisen sentin. Menon jakotyyppi jakaa jokaisen rivin, jolle ei ole nimetty ketään. Rivin, jolla on nimetyt henkilöt, kantavat täsmälleen he, eivät kukaan muu.

Kaksi tasoa, jotka ratkaisevat rivin jaon, lähteestä docs/tech/18-itemized-expenses.md §1.
TasoMitä se ratkaiseeMihin pätee
Menon jakotyyppiMiten jaettu kustannus jakautuu: tasan, prosentteina tai painotettuina osuuksinaJokainen erä, jolle ei ole nimetty henkilöitä
Erän nimetyt henkilötKuka kulutti tämän rivin ja missä suhteessaVain kyseinen rivi
Rivi, jolla ei ole nimettyjä henkilöitä, jakautuu menon jakotyypin mukaan; rivin, jolla on nimetyt henkilöt, kantavat vain sen nimeämät henkilöt TASO 1: RIVILLE EI OLE NIMETTY KETÄÄN Jaetut annokset 300 € ei nimettyjä EQUAL kolmelle Asha 100 € Bhavna 100 € Chetan 100 € TASO 2: RIVI NIMEÄÄ, KUKA SEN SÖI Liha-annos 200 € nimetyt: Asha, Bhavna sen 2 nimettyä Asha 100 € Bhavna 100 € Chetan 0 €
Kaksi tasoa 500 euron ruokaosuudessa. Jaetut annokset eivät nimeä ketään, joten EQUAL jakaa ne kolmeen osaan; äyriäisannos nimeää kaksi henkilöä, joten Chetanin ruoan välisumma pysähtyy 100 euroon.

525 euron illallinen, jossa vähiten syönyt maksaa 105 euroa

Asha, Bhavna ja Chetan syövät illallista, joka jaetaan ylimmällä tasolla tasan. Jaetut annokset ovat yhteensä 300 euroa. Äyriäisannos on 200 euroa, ja sen söivät vain Asha ja Bhavna. Palvelumaksu on 5 %, ja Chetan maksoi koko 525 euroa.

Laskettu esimerkki: yksi lasku, kaksi riviä, yksi korjaus ja kunkin henkilön kantama osuus.
RiviSummaAshaBhavnaChetan
Jaetut annokset, ei nimettyjä300 €100 €100 €100 €
Äyriäislautanen, Asha ja Bhavna200 €100 €100 €0 €
Välisumma500 €200 €200 €100 €
Palvelumaksu 5 %, välisumman mukaan25 €10 €10 €5 €
Loppusumma525 €210 €210 €105 €

Chetan maksoi 525 euroa ja on velkaa 105 euroa, joten hänelle ollaan velkaa 420 euroa: 210 euroa Ashalta ja 210 euroa Bhavnalta. Se, kuka maksoi, on riippumaton siitä, kuka on velkaa. Vaikka maksaja on tuskin syönyt henkilö, se ei muuta yhtäkään osuutta, ja siksi Dimesum pitää maksajat menon tasolla ja nimetyt henkilöt rivin tasolla.

Vero seuraa sitä, mitä söit, ei sitä, kuinka monta teitä on

Chetanin osuus 25 euron palvelumaksusta on 5 euroa, ei 8,33 euroa. Jokainen korjaus jaetaan suhteessa kunkin henkilön erien välisummaan, joten ruoan jako suhteessa 200:200:100 ratkaisee myös palvelumaksun jaon. Henkilömäärän mukaan jakaminen veloittaisi Chetanilta huomaamatta veroa annoksesta, johon hän ei koskenut.

Se, joka ei tilannut mitään, ei siis maksa veroa eikä saa alennusta. Painot ovat korjauksia edeltävät välisummat eivätkä juokseva summa, mikä myös estää kunkin korjauksen pyöristystä kertautumasta seuraavan painoihin.

Korjaukset tehdään järjestyksessä, joten alennus siirtää ALV:n perustan

Lasku, jossa lukee "1 000 €, miinus 10 %, plus 5 % ALV", veloittaa ALV:n 900 eurosta, ja ALV-rivi on 45 euroa. Käännä nämä kaksi, niin ALV veloitetaan 1 000 eurosta, jolloin se on 50 euroa. Korjaukset ovat järjestetty lista, ja prosentti kohdistuu juoksevaan summaan omassa kohdassaan. Molemmat järjestykset ovat todellisia laskuja, joten lista on järjestetty eikä joukko.

Sama alennus ja ALV kahdessa järjestyksessä, näyttäen perustan, josta kumpikin veloitetaan, ja summan, jonka kumpikin tuottaa Alennus ensin ALV ensin Erien välisumma 1 000 € miinus 10 % 1 000 eurosta alennus 100 € 900 € plus 5 % ALV 900 eurosta ALV 45 € 945 € Laskun loppusumma 945 € Erien välisumma 1 000 € plus 5 % ALV 1 000 eurosta ALV 50 € 1 050 € miinus 10 % 1 050 eurosta alennus 105 € 945 € Laskun loppusumma 945 € SAMA LASKU, KIINTEÄ 100 € POIS 10 %:N SIJAAN 100 € pois, sitten ALV 945 € ALV, sitten 100 € pois 950 €
Kaksi prosenttia päätyy samaan 945 euroon, koska kertolasku on vaihdannainen, mutta ALV-rivi eroaa: 45 euroa vastaan 50 euroa. Vaihda prosenttialennus kiinteään 100 euroon, niin loppusummatkin eroavat, 945 euroa vastaan 950 euroa. Järjestys on tässä laskutoimitus, ei esitystapa.
Miksi järjestys tallennetaan erikseen

Jokaisella korjauksella on oma position-arvonsa. Järjestys, joka nojaisi lisäysjärjestykseen tai siihen, että id-generaattori pysyy monotonisena, muuttaisi huomaamatta sitä, mitä kukin on velkaa tietokannan palautuksen jälkeen.

Kolme tarkistusta on kirjoitusvirheen ja laskutoimituksen välissä. Pooli ilmoittaa joko kiinteän summan tai koron peruspisteinä, ei koskaan molempia, koska molempien tallentaminen tallentaa luvun ja sen oman johdannaisen. Negatiivinen summa hylätään, ja virhe nimeää DISCOUNT-tyypin tapana kirjoittaa vähennys. Yli 100 000 peruspisteen korko hylätään myös, ja tämä katto on asetettu paljon korkeammalle kuin 10 000 peruspistettä, jotka tarkoittavat 100 %, koska sadan prosentin alennus on todellinen alennus.

Neljä korjaustyyppiä lähteessä internal/platform/splitcalc ja se, mitä kukin tekee juoksevalle summalle.
TyyppiVaikutus juoksevaan summaanMiksi se on oma tyyppinsä
TAXLisääVain sanamuoto; laskennallisesti sama
TIPLisääVain sanamuoto; laskennallisesti sama
FEELisääVain sanamuoto; laskennallisesti sama
DISCOUNTVähentääAinoa tyyppi, joka muuttaa laskutoimitusta, joten suunta tulee tyypistä eikä koskaan etumerkistä

Loppusumma tulee riveistä, ja kirjoitettu loppusumma on vain tarkistussumma

Eritelty loppusumma johdetaan: erien summa plus korjausten summa. Rivit kertovat jo, mitä lasku maksaa, joten erikseen ilmoitettu loppusumma olisi toinen totuuden lähde, joka voi olla ristiriidassa ensimmäisen kanssa. Se, joka syöttää laskun väärin, korjaa rivin, jossa virhe todella on, ja loppusumma seuraa perässä. Jo kirjatun laskun korjaaminen tapahtuu muokkauksella, joka esittää jaon uudelleen, joten korjaus tulee uutena versiona eikä ylikirjoituksena.

Asiakas voi silti lähettää amount_minor-arvon, ja Dimesum kohtelee sitä silloin tarkistussummana eikä vastauksena. Yhtäpitävyys tarkoittaa, että asiakas luki saman laskun. Ristiriita pysäyttää menon ennen kuin yhtään rahaa liikkuu.

Aiempi versio lisäsi automaattisesti "Muut"-rivin sille, mitä ilmoitettu loppusumma ei kattanut, ja poisti rivin, kun ero sulkeutui. Rivi toimi, ja se on poissa. Loppusumman johtaminen poisti ongelman, jota "Muut"-rivi oli olemassa hallitsemaan ja joka syntyi vain siksi, että loppusumma ilmoitettiin kahdesti.

Miksi EXACT ja erät hylätään yhdessä

EXACT nimeää kunkin jäsenen lopullisen summan. Erät johtavat kunkin jäsenen summan. Molemmat yhtä aikaa on ylimääritelty: joko ne ovat yhtäpitävät, jolloin toinen on tarpeeton, tai ne ovat ristiriidassa, jolloin menolla on kaksi vastausta eikä mikään sääntö kerro, kumpi voittaa. Dimesum hylkää yhdistelmän jo ovella sen sijaan, että ratkaisisi sen etusijasäännöllä, jota kukaan ei muistaisi.

EQUAL, PERCENT ja SHARES yhdistyvät kaikki eriin, koska kukin on sääntö jaetun kustannuksen jakamiseen eikä joukko lopullisia summia.

Missä alennus ennen hävitti sentin

Jokainen jako käyttää suurimman jäännöksen menetelmää, ja kukin säilyttää oman summansa täsmälleen. Tasatilanteet menivät tässä menetelmässä ennen pienimmälle jäsen-id:lle, mikä antoi ryhmän vanhimmalle jäsenelle ylimääräisen sentin jokaisessa tasan jaetussa menossa; tasatilanne kiertää nyt menon id:n tiivisteen mukaan. Jaetut rivit kootaan yhteen ja jaetaan kerran eikä rivi kerrallaan, joten pariton sentti ei osu samalle jäsenelle laskun jokaisella rivillä.

Meidän apportion-funktiossamme oli tässä todellinen vika. Go:n kokonaislukujako katkaisee kohti nollaa, joten negatiivinen summa pyöristyi väärään suuntaan eikä jäännöstä koskaan jaettu: −10,00 € painoilla 100, 200 ja 300 palautui muodossa −9,99 €. Kadonnut sentti olisi saanut oikean alennetun laskun epäonnistumaan omassa summatarkistuksessaan, ja käyttäjälle olisi kerrottu, että hänen laskutoimituksensa oli väärä. Negatiiviset summat jaetaan nyt suuruuden mukaan ja muutetaan takaisin negatiivisiksi.

Syötä lasku sellaisena kuin se on painettu

Kirjoita näkemäsi rivit, nimeä ne, jotka söivät jakamattomat rivit, ja lisää vero, tippi, maksu ja alennus siinä järjestyksessä, jossa kuitti ne painaa. Dimesum johtaa loppusumman, jakaa kunkin korjauksen sen mukaan, mitä kukin kulutti, ja jättää maksajan sen ulkopuolelle. Ensi kerralla, kun yksi annos maksaa kaksi kertaa enemmän kuin muiden tilaama, lisää se omana rivinään kahdella nimellä.

Usein kysytyt kysymykset

Miten lasku jaetaan, jos yksi tilasi jotain kallista?

Laita se annos omalle rivilleen ja nimeä ne, jotka sen söivät. Dimesumissa muu lasku jakautuu edelleen menon oman säännön mukaan, yleensä tasan, kun taas nimetyn rivin kantavat vain sen nimetyt henkilöt. Vero ja palvelumaksu jakautuvat sitten kunkin välisumman mukaan, joten se, joka jätti annoksen väliin, maksaa molempia vähemmän.

Jaetaanko vero ja tippi tasan vai sen mukaan, mitä kukin tilasi?

Sen mukaan, mitä kukin tilasi. Dimesum jakaa jokaisen korjauksen suhteessa kunkin henkilön erien välisummaan eikä henkilömäärän mukaan. 525 euron illallisella, jossa yksi söi 100 euron edestä ruokaa, tämä henkilö kantaa 25 euron palvelumaksusta 5 euroa 8,33 euron sijaan. Se, joka ei tilannut mitään, ei maksa lainkaan veroa.

Vaikuttaako alennuksen ja veron järjestys laskun loppusummaan?

Kyllä. Korjaukset tehdään järjestyksessä juoksevaa summaa vasten, joten lasku, jossa lukee "1 000 €, miinus 10 %, plus 5 % ALV", veloittaa ALV:n 900 eurosta ja ALV-rivi on 45 euroa. Laita ALV ensin, niin se veloitetaan 1 000 eurosta, jolloin se on 50 euroa. Kiinteällä 100 euron alennuksella loppusummatkin eroavat, 945 euroa vastaan 950 euroa.

Miksi eritellyllä laskulla ei voi käyttää tarkkoja summia?

EXACT nimeää kunkin henkilön lopullisen summan ja erät johtavat sen, joten nämä kaksi yhdessä antavat yhdelle menolle kaksi vastausta. Dimesum hylkää yhdistelmän sen sijaan, että valitsisi voittajan etusijasäännöllä, jota kukaan ei muistaisi. EQUAL, PERCENT ja SHARES toimivat kaikki erien rinnalla, koska kukin on sääntö jaettujen rivien jakamiseen eikä joukko lopullisia summia.

Pitääkö eritellyn laskun loppusumma syöttää itse?

Ei. Dimesum johtaa eritellyn loppusumman erien summana plus korjausten summana, koska rivit kertovat jo, mitä lasku maksaa. Asiakkaan lähettämä loppusumma tarkistetaan tarkistussummana, ja ristiriita pysäyttää menon ennen kuin raha liikkuu. Väärän luvun korjaaminen tarkoittaa sen rivin korjaamista, josta se tuli.