resolve($country, $vatId))->toBe($expected); })->with([ 'Deutschland immer mit Steuer' => ['DE', null, VatTreatment::Domestic], 'Deutschland auch mit USt-ID mit Steuer' => ['DE', 'DE123456789', VatTreatment::Domestic], 'EU mit gültiger USt-ID → Reverse Charge' => ['AT', 'ATU12345678', VatTreatment::ReverseCharge], 'EU ohne USt-ID → mit Steuer' => ['AT', null, VatTreatment::EuConsumer], 'EU mit fremdländischer USt-ID → mit Steuer' => ['AT', 'DE123456789', VatTreatment::EuConsumer], 'Griechenland mit EL-Präfix' => ['GR', 'EL123456789', VatTreatment::ReverseCharge], 'Drittland grundsätzlich befreit' => ['CH', null, VatTreatment::ThirdCountry], 'Drittland auch mit ID befreit' => ['US', 'US-TAX-1', VatTreatment::ThirdCountry], 'Fehlendes Land wie Inland behandeln' => [null, null, VatTreatment::Domestic], ]); test('tax cents are derived from the treatment', function () { $resolver = app(VatResolver::class); expect($resolver->taxCentsFor(16723, VatTreatment::Domestic))->toBe(3177); expect($resolver->taxCentsFor(16723, VatTreatment::EuConsumer))->toBe(3177); expect($resolver->taxCentsFor(16723, VatTreatment::ReverseCharge))->toBe(0); expect($resolver->taxCentsFor(16723, VatTreatment::ThirdCountry))->toBe(0); }); test('exempt treatments carry a legal tax note', function () { expect(VatTreatment::ReverseCharge->taxNote())->toContain('Reverse Charge'); expect(VatTreatment::ThirdCountry->taxNote())->toContain('Nicht im Inland steuerbar'); expect(VatTreatment::Domestic->taxNote())->toBeNull(); });