fix: recover simulator cashflow and verify QA continuity and report assumptions

This commit is contained in:
2026-10-20 22:00:48 +02:00
parent a690c665fb
commit c22003a3da
20 changed files with 773 additions and 95 deletions
@@ -11,6 +11,28 @@ use PHPUnit\Framework\TestCase;
final class SimulationTaxParameterResolverTest extends TestCase
{
#[Test]
public function synthetic_qa_versions_keep_historical_values_and_expose_a_period_transition_without_activating_rules(): void
{
$before = $this->publicVersion('2026-01-01', '2026-06-30', '7.5', 1);
$after = $this->publicVersion('2026-07-01', null, '9.25', 2);
$before['rule_code'] = $after['rule_code'] = 'QA.SYNTHETIC.NOT.LEGISLATION';
$before['source']['title'] = $after['source']['title'] = 'SINTETICO QA — nao e legislacao';
$before['source']['diploma'] = $after['source']['diploma'] = 'QA-FIXTURE-ONLY';
$resolver = new SimulationTaxParameterResolver;
$historical = $resolver->resolveAvailableParameters([$before], 'IVA', '2026-06-01', '2026-06-30', ['operation' => 'domestic']);
$frozen = json_encode($historical, JSON_THROW_ON_ERROR);
$current = $resolver->resolveAvailableParameters([$before, $after], 'IVA', '2026-07-01', '2026-07-31', ['operation' => 'domestic']);
self::assertSame('7.5', $historical[0]['value']);
self::assertSame('9.25', $current[0]['value']);
self::assertSame(2, $current[0]['rule_version']);
self::assertSame('indeterminate_period_change', $resolver->resolveAvailableParameters([$before, $after], 'IVA', '2026-01-01', '2026-12-31', ['operation' => 'domestic'])[0]['status']);
self::assertSame($frozen, json_encode($historical, JSON_THROW_ON_ERROR));
self::assertSame($historical, $resolver->resolveAvailableParameters([$before, $after], 'IVA', '2026-06-01', '2026-06-30', ['operation' => 'domestic']));
$after['source']['version_no'] = 2;
self::assertSame([], $resolver->resolveAvailableParameters([$after], 'IVA', '2026-07-01', '2026-07-31', ['operation' => 'domestic']));
}
#[Test]
public function it_selects_the_published_version_effective_on_the_requested_date_and_returns_its_source(): void
{