dimesum

Ana sayfa / Blog / Para

Para

Paylaşılmayan bir yemek olduğunda hesap nasıl bölünür

· 7 dakika okuma ·

₺525'lik bir akşam yemeğini eşit bölerseniz biri hiç dokunmadığı bir yemek için sessizce ₺70 öder; çözüm, tek bir harcamada iki kural belirlemektir: paylaşılmayan satırı kimin yediğini yazın ve verginin tüketimi izlemesine izin verin.

₺525'lik bir akşam yemeğini eşit bölerseniz biri ₺70 fazla öder. Üç kişiden ikisi ₺200'lük deniz mahsulleri tabağını yedi, üçüncüsü yemedi, yine de eşit bölüşüm üçüne de ₺175 yükler. Dimesum bu hesabı tek bir harcama olarak ele alır: üstte eşit, ₺200'lük satır ise yalnızca onu sipariş eden ikisi tarafından taşınır.

Tek bir paylaşılmayan satırı olan büyük ölçüde eşit hesaplar, bir bölüşme uygulamasından istenen en yaygın şeydir ve Dimesum'un ilk veri modeli bunu ifade edemiyordu. Önceki tasarım ITEMIZEDEQUAL, PERCENT ve SHARES ile karşılıklı olarak dışlayan bir bölüşme türü yapıyordu. Gerçek bir restoran hesabı aynı anda her ikisidir.

Kalemlere ayırmak, harcamaya ait bir ayrıntıdır, farklı bir bölüşme türü değildir

Dimesum'da kalemli bir harcama, satırlarını taşıyan sıradan bir harcamadır. Harcama, harcamaların halihazırda sahip olduğu her şeyi korur: bir toplam, katılımcılar, bir bölüşme türü, bir ya da birkaç ödeyen. Buna ürünleri, yani hesabın satırlarını ve düzeltmeleri, yani onların altına yazılan vergi, bahşiş, ücret ve indirimleri ekler.

Sonra her kuruşu iki düzey belirler. Harcamanın bölüşme türü, üzerinde hiç kimsenin adı olmayan her satırı böler. Atananları olan bir satır tam olarak o kişiler tarafından taşınır, başka kimse tarafından değil.

Bir satırın bölüşmesini belirleyen iki düzey, docs/tech/18-itemized-expenses.md §1'den.
DüzeyNeyi belirlerNeye uygulanır
Harcama bölüşme türüPaylaşılan bir maliyetin nasıl bölündüğü: eşit, yüzdeyle ya da ağırlıklı paylarlaAtananı belirtilmemiş her ürün
Ürün atananlarıBu satırı kimin, hangi oranda tükettiğiYalnızca o satır
Atananı olmayan bir satır harcama bölüşme türüne göre bölünür; atananları olan bir satır yalnızca adını yazdığı kişiler tarafından taşınır DÜZEY 1: SATIRDA KİMSENİN ADI YOK Paylaşılan tabaklar ₺300 atanan yok 3 kişiye EQUAL Asha ₺100 Bhavna ₺100 Chetan ₺100 DÜZEY 2: SATIR ONU KİMİN YEDİĞİNİ YAZAR Etli yemek ₺200 atananlar: Asha, Bhavna kendi 2 atananı Asha ₺100 Bhavna ₺100 Chetan ₺0
₺500'lük yemek üzerindeki iki düzey. Paylaşılan tabaklar kimseyi yazmaz, bu yüzden EQUAL onları üçe böler; deniz mahsulleri yemeği iki kişiyi yazar, bu yüzden Chetan'ın yemek ara toplamı ₺100'de durur.

En az yiyenin ₺105 ödediği ₺525'lik bir akşam yemeği

Asha, Bhavna ve Chetan akşam yemeği yer, üstte eşit bölüşülür. Paylaşılan tabaklar ₺300 tutar. Bir deniz mahsulleri yemeği ₺200 tutar ve onu yalnızca Asha ile Bhavna yedi. Servis %5'tir ve tüm ₺525'i Chetan ödedi.

Çözümlü örnek: bir hesap, iki satır, bir düzeltme ve her kişinin taşıdığı pay.
SatırTutarAshaBhavnaChetan
Paylaşılan tabaklar, atanan yok₺300₺100₺100₺100
Deniz mahsulleri tabağı, Asha ve Bhavna₺200₺100₺100₺0
Ara toplam₺500₺200₺200₺100
Servis %5, ara toplama göre₺25₺10₺10₺5
Toplam₺525₺210₺210₺105

Chetan ₺525 ödedi ve ₺105 borçlu, bu yüzden kendisine ₺420 borçlu kalınır: Asha'dan ₺210 ve Bhavna'dan ₺210. Kimin ödediği, kimin borçlu olduğundan bağımsızdır. Ödeyenin neredeyse hiç yemeyen kişi olması payların hiçbirini değiştirmez, Dimesum'un ödeyenleri harcama düzeyinde ve atananları satır düzeyinde tutmasının nedeni de budur.

Vergi kaç kişi olduğunuzu değil, ne yediğinizi izler

Chetan'ın ₺25'lik servis ücretindeki payı ₺8,33 değil, ₺5'tir. Her düzeltme, herkesin ürün ara toplamına orantılı olarak dağıtılır, bu yüzden yemeğin 200:200:100 bölüşümü servis ücretinin bölüşümünü de belirler. Kişi sayısına göre dağıtmak, Chetan'a hiç dokunmadığı bir yemek için sessizce vergi yüklerdi.

Bu yüzden hiçbir şey sipariş etmeyen kişi vergi ödemez ve indirim almaz. Ağırlıklar, yürüyen toplam değil, düzeltme öncesi ara toplamlardır, bu da her düzeltmenin yuvarlamasının bir sonrakinin ağırlıklarına birikmesini de engeller.

Düzeltmeler sırayla uygulanır, bu yüzden bir indirim KDV tabanını kaydırır

'₺1.000, %10 indirim, %5 KDV' şeklinde okunan bir hesap KDV'yi ₺900 üzerinden alır ve KDV satırı ₺45 olur. İkisinin sırasını ters çevirin, KDV ₺1.000 üzerinden alınır ve ₺50 olur. Düzeltmeler sıralı bir listedir ve bir yüzde, kendi konumundaki yürüyen toplama uygulanır. Her iki sıralama da gerçek hesaplardır, bu yüzden liste bir küme değil, sıralıdır.

Aynı indirim ve KDV iki sırayla, her birinin hangi taban üzerinden alındığını ve ürettiği toplamı gösteriyor Önce indirim Önce KDV Ürün ara toplamı ₺1.000 ₺1.000'in %10'u düşülür ₺100 indirim ₺900 ₺900'ün %5'i KDV eklenir ₺45 KDV ₺945 Hesap toplamı ₺945 Ürün ara toplamı ₺1.000 ₺1.000'in %5'i KDV eklenir ₺50 KDV ₺1.050 ₺1.050'nin %10'u düşülür ₺105 indirim ₺945 Hesap toplamı ₺945 AYNI HESAP, %10 YERİNE SABİT ₺100 İNDİRİM ₺100 indirim, sonra KDV ₺945 KDV, sonra ₺100 indirim ₺950
İki yüzde aynı ₺945'te buluşur çünkü çarpma değişme özelliğine sahiptir, yine de KDV satırı farklıdır: ₺45'e karşı ₺50. Yüzdelik indirimi sabit ₺100 ile değiştirin, toplamlar da ayrışır, ₺945'e karşı ₺950. Burada sıra bir sunum değil, aritmetiktir.
Sıranın neden açıkça saklandığı

Her düzeltme kendi position'ını taşır. Ekleme sırasına ya da bir id üretecinin tekdüze kalmasına dayanan bir sıralama, bir veritabanı geri yüklemesinden sonra herkesin borcunu sessizce değiştirirdi.

Bir yazım hatası ile aritmetik arasında üç doğrulama durur. Bir havuz ya sabit bir tutar ya da baz puan cinsinden bir oran belirtir, asla ikisini birden değil, çünkü ikisini birden saklamak bir sayıyı ve onun kendi türetimini saklar. Negatif bir tutar reddedilir, indirimi yazmanın yolu olarak DISCOUNT'u belirten bir hatayla. 100.000 baz puanın üzerindeki bir oran da reddedilir, %100 anlamına gelen 10.000 baz puanın çok üzerinde belirlenmiş bir üst sınır, çünkü yüzde yüz indirim gerçek bir indirimdir.

internal/platform/splitcalc içindeki dört düzeltme türü ve her birinin yürüyen toplama ne yaptığı.
TürYürüyen toplama etkisiNeden kendi türü olduğu
TAXEklerYalnızca ifade; hesaplamayla aynı
TIPEklerYalnızca ifade; hesaplamayla aynı
FEEEklerYalnızca ifade; hesaplamayla aynı
DISCOUNTÇıkarırAritmetiği değiştiren tek tür, bu yüzden yön bir işaretten değil, türden gelir

Toplam satırlardan gelir ve elle yazılan bir toplam yalnızca bir sağlamadır

Kalemli bir toplam türetilir: ürünlerin toplamı artı düzeltmelerin toplamı. Satırlar hesabın tutarını zaten söyler, bu yüzden ayrıca belirtilen bir toplam, ilkiyle çelişebilecek ikinci bir doğruluk kaynağı olurdu. Bir hesabı yanlış giren kişi bir satırı düzeltir, hatanın gerçekte olduğu yer orasıdır ve toplam onu izler. Zaten kaydedilmiş bir hesabı düzeltmek, bölüşmesini yeniden ifade eden bir düzenleme üzerinden gerçekleşir, böylece düzeltme bir üzerine yazma olarak değil, yeni bir sürüm olarak yerleşir.

Bir istemci yine de amount_minor gönderebilir ve Dimesum bunu yanıt olarak değil, bir sağlama olarak ele alır. Uyuşma, istemcinin aynı hesabı okuduğu anlamına gelir. Uyuşmazlık, herhangi bir para hareket etmeden harcamayı durdurur.

Önceki bir sürüm, belirtilen bir toplamın hesaba katmadığı her şey için otomatik olarak bir "Diğer" satırı ekler ve fark kapandığında satırı kaldırırdı. O satır işe yarıyordu ve artık yok. Toplamı türetmek, "Diğer" satırının yönetmek için var olduğu sorunu ortadan kaldırdı, ki bu sorun yalnızca toplam iki kez belirtildiği için ortaya çıkıyordu.

EXACT ve ürünlerin neden birlikte reddedildiği

EXACT her üyenin nihai tutarını belirtir. Ürünler her üyenin tutarını türetir. İkisi birden aşırı belirlenmiştir: ya uyuşurlar, bu durumda biri gereksizdir, ya da uyuşmazlar, bu durumda harcamanın iki yanıtı olur ve hiçbir kural hangisinin kazandığını söylemez. Dimesum, bunu kimsenin hatırlamayacağı bir öncelik kuralıyla çözmek yerine birleşimi daha kapıda reddeder.

EQUAL, PERCENT ve SHARES ürünlerle birleşir, çünkü her biri nihai tutarlar kümesi değil, paylaşılan bir maliyeti bölmeye yarayan bir kuraldır.

Bir indirimin eskiden bir kuruş kaybettiği yer

Her dağıtım en büyük kalan yöntemini kullanır ve her biri kendi toplamını tam olarak korur. Bu yöntemdeki eşitlikler eskiden en düşük üye id'sine giderdi, bu da eşit bölünen her harcamada fazladan kuruşu grubun en eski üyesine verirdi; eşitlik artık harcama id'sinin bir karması üzerinde döner. Paylaşılan satırlar satır satır değil, havuzlanıp bir kez bölünür, böylece tek kuruş hesabın her satırında aynı üyeye düşmez.

Bizim apportion fonksiyonumuzun burada gerçek bir kusuru vardı. Go'nun tam sayı bölmesi sıfıra doğru budar, bu yüzden negatif bir toplam yanlış yöne yuvarlanır ve artan hiç dağıtılmazdı: 100, 200 ve 300 ağırlıkları üzerinde −₺10,00 sonuç olarak −₺9,99 dönerdi. Kaybolan bir kuruş, doğru indirimli bir hesabın kendi toplam kontrolünde başarısız olmasına yol açar ve kullanıcıya aritmetiğinin yanlış olduğu söylenirdi. Negatif toplamlar artık büyüklüğe göre dağıtılır ve tekrar negatife çevrilir.

Hesabı basıldığı gibi girin

Gördüğünüz satırları yazın, paylaşılmayanları yiyen kişileri belirtin ve vergi, bahşiş, ücret ve indirimi fişin bastığı sırayla ekleyin. Dimesum toplamı türetir, her düzeltmeyi herkesin tükettiğine göre dağıtır ve ödeyeni bunun dışında bırakır. Bir dahaki sefere bir yemek herkesin sipariş ettiğinin iki katına mal olduğunda, onu üzerinde iki isim olan kendi satırı olarak ekleyin.

Sık sorulan sorular

Biri pahalı bir şey sipariş ettiğinde restoran hesabı nasıl bölünür?

O yemeği kendi satırına koyun ve onu yiyen kişileri yazın. Dimesum'da hesabın geri kalanı yine harcamanın kendi kuralına göre, genellikle eşit olarak bölünür; adı yazılan satırı ise yalnızca kendisine atanan kişiler taşır. Vergi ve servis daha sonra herkesin ara toplamına göre dağıtılır, böylece yemeği atlayan kişi her ikisinden de daha az öder.

Vergi ve bahşiş eşit mi yoksa herkesin siparişine göre mi bölünür?

Herkesin siparişine göre. Dimesum her düzeltmeyi kişi sayısına göre değil, herkesin ürün ara toplamına orantılı olarak dağıtır. Bir kişinin ₺100'lük yemek yediği ₺525'lik bir akşam yemeğinde, o kişi ₺25'lik servis ücretinin ₺8,33'ü yerine ₺5'ini taşır. Hiçbir şey sipariş etmeyen kişi ise hiç vergi ödemez.

İndirim ve vergi sırası hesabın tutarını değiştirir mi?

Evet. Düzeltmeler yürüyen bir toplam üzerine sırayla uygulanır; bu yüzden '₺1.000, %10 indirim, %5 KDV' şeklinde okunan bir hesap KDV'yi ₺900 üzerinden alır ve KDV satırı ₺45 olur. KDV'yi öne koyarsanız ₺1.000 üzerinden alınır ve ₺50 olur. Sabit ₺100'lük indirimde toplamlar da farklılaşır, ₺945'e karşı ₺950.

Kalemli bir hesapta neden kesin tutarlar kullanılamaz?

EXACT her kişinin nihai tutarını belirtir, ürünler ise bu tutarı türetir; bu ikisi birlikte tek bir harcamaya iki yanıt verir. Dimesum, kimsenin hatırlamayacağı bir öncelik kuralıyla bir kazanan seçmek yerine bu birleşimi reddeder. EQUAL, PERCENT ve SHARES ise ürünlerle birlikte çalışır, çünkü her biri nihai tutarlar kümesi değil, paylaşılan satırları bölmeye yarayan bir kuraldır.

Kalemli bir hesabın toplamını elle yazmak gerekir mi?

Hayır. Dimesum kalemli toplamı, ürünlerin toplamı artı düzeltmelerin toplamı olarak türetir, çünkü satırlar hesabın tutarını zaten söyler. Bir istemci tarafından gönderilen toplam bir sağlama olarak kontrol edilir ve bir uyuşmazlık, para hareket etmeden harcamayı durdurur. Yanlış bir rakamı düzeltmek, onun geldiği satırı düzeltmek demektir.