1200.00, 'zugaenge' => 0, 'abgaenge' => 0, 'nutzungsdauer' => 3, 'cent_im_ersten_jahr'=> false, 'anschaffungsdatum' => '2024-04-01', ]); $this->assertEquals(4, count($rows), 'April-Kauf 3 Jahre: 4 Zeilen (inkl. anteiliges letztes Jahr)'); $this->assertEquals(300.00, $rows[0]['abschreibungsbetrag'], 'April: erstes Jahr 9/12 = 300,00'); $this->assertEquals(400.00, $rows[1]['abschreibungsbetrag'], 'April: Jahr 2 voll = 400,00'); $this->assertEquals(400.00, $rows[2]['abschreibungsbetrag'], 'April: Jahr 3 voll = 400,00'); $this->assertEquals(100.00, $rows[3]['abschreibungsbetrag'], 'April: letztes Jahr 3/12 = 100,00'); $this->assertEquals(0.00, $rows[3]['restwert'], 'April: Restwert am Ende = 0'); $sumAfa = array_sum(array_column($rows, 'abschreibungsbetrag')); $this->assertEquals(1200.00, round($sumAfa, 2), 'April: Summe = Basis'); // ── Oktober-Kauf (Monat 10): 3 Monate erstes Jahr, 9 Monate letztes Jahr ── $rows = AssetDepreciation::calculate([ 'anschaffungskosten' => 1200.00, 'zugaenge' => 0, 'abgaenge' => 0, 'nutzungsdauer' => 2, 'cent_im_ersten_jahr'=> false, 'anschaffungsdatum' => '2023-10-15', ]); $this->assertEquals(3, count($rows), 'Oktober-Kauf 2 Jahre: 3 Zeilen'); $this->assertEquals(150.00, $rows[0]['abschreibungsbetrag'], 'Oktober: erstes Jahr 3/12 = 150,00'); $this->assertEquals(600.00, $rows[1]['abschreibungsbetrag'], 'Oktober: Jahr 2 voll = 600,00'); $this->assertEquals(450.00, $rows[2]['abschreibungsbetrag'], 'Oktober: letztes Jahr 9/12 = 450,00'); $this->assertEquals(0.00, $rows[2]['restwert'], 'Oktober: Restwert = 0'); // ── Januar-Kauf (Monat 1): 12 Monate = kein extra letztes Jahr ── $rows = AssetDepreciation::calculate([ 'anschaffungskosten' => 1200.00, 'zugaenge' => 0, 'abgaenge' => 0, 'nutzungsdauer' => 3, 'cent_im_ersten_jahr'=> false, 'anschaffungsdatum' => '2024-01-10', ]); $this->assertEquals(3, count($rows), 'Januar-Kauf: weiterhin exakt nutzungsdauer Zeilen'); $sumAfa = array_sum(array_column($rows, 'abschreibungsbetrag')); $this->assertEquals(1200.00, round($sumAfa, 2), 'Januar: Summe = Basis'); // ── April-Kauf mit Cent-Option ─────────────────────────────────────────── // basis=1001.40, nutzungsdauer=3, April // regelJahr=floor(333.8)=333, centRest=1001.40-999=2.40 // erstesJahr = round(333*9/12,2) + 2.40 = 249.75 + 2.40 = 252.15 // Jahr 2+3: 333 (volle Euro) // letztes Jahr: 1001.40 - 252.15 - 333 - 333 = 83.25 $rows = AssetDepreciation::calculate([ 'anschaffungskosten' => 1001.40, 'zugaenge' => 0, 'abgaenge' => 0, 'nutzungsdauer' => 3, 'cent_im_ersten_jahr'=> true, 'anschaffungsdatum' => '2024-04-01', ]); $this->assertEquals(4, count($rows), 'April Cent-Option 3 Jahre: 4 Zeilen'); $this->assertEquals(252.15, $rows[0]['abschreibungsbetrag'], 'April Cent: erstes Jahr 249,75 + 2,40 Cent = 252,15'); $this->assertEquals(333.00, $rows[1]['abschreibungsbetrag'], 'April Cent: Jahr 2 voll = 333,00 (volle Euro)'); $this->assertEquals(333.00, $rows[2]['abschreibungsbetrag'], 'April Cent: Jahr 3 voll = 333,00 (volle Euro)'); $this->assertEquals(83.25, $rows[3]['abschreibungsbetrag'], 'April Cent: letztes Jahr 3/12 von 333 = 83,25'); $sumAfa = array_sum(array_column($rows, 'abschreibungsbetrag')); $this->assertEquals(1001.40, round($sumAfa, 2), 'April Cent: Summe = Basis'); // ── Dezember-Kauf (Monat 12): 1 Monat erstes Jahr, 11 Monate letztes Jahr ── $rows = AssetDepreciation::calculate([ 'anschaffungskosten' => 1200.00, 'zugaenge' => 0, 'abgaenge' => 0, 'nutzungsdauer' => 3, 'cent_im_ersten_jahr'=> false, 'anschaffungsdatum' => '2024-12-01', ]); $this->assertEquals(4, count($rows), 'Dezember-Kauf 3 Jahre: 4 Zeilen'); $this->assertEquals(round(400 * 1 / 12, 2), $rows[0]['abschreibungsbetrag'], 'Dezember: erstes Jahr 1/12'); $this->assertEquals(0.00, $rows[3]['restwert'], 'Dezember: Restwert am Ende = 0'); $sumAfa = array_sum(array_column($rows, 'abschreibungsbetrag')); $this->assertEquals(1200.00, round($sumAfa, 2), 'Dezember: Summe = Basis'); // ── Startjahr des letzten Jahres korrekt ──────────────────────────────── $rows = AssetDepreciation::calculate([ 'anschaffungskosten' => 600.00, 'zugaenge' => 0, 'abgaenge' => 0, 'nutzungsdauer' => 2, 'cent_im_ersten_jahr'=> false, 'anschaffungsdatum' => '2023-07-01', ]); // Juli = 6 Monate erstes Jahr, 6 Monate letztes Jahr → 3 Zeilen $this->assertEquals(3, count($rows), 'Juli-Kauf 2 Jahre: 3 Zeilen'); $this->assertEquals(2023, $rows[0]['jahr'], 'Startjahr erste Zeile = 2023'); $this->assertEquals(2024, $rows[1]['jahr'], 'Startjahr zweite Zeile = 2024'); $this->assertEquals(2025, $rows[2]['jahr'], 'Startjahr letzte Zeile = 2025'); } }