calculationService->previewBatch($now->year, $now->month)) ->reject(fn (array $item) => isset($item['error'])) ->map(fn (array $item) => $this->toBillingPreview($item)) ->values(); } private function toBillingPreview(array $item): array { return [ 'id' => $item['unit_id'], 'unit_name' => $item['unit_name'], 'tbr_value' => $item['tbr_value'], 'royalties_value' => $item['royalties_effective_value'], 'royalties_rule' => $this->ruleLabel( $item['contract_month_reference'], $item['royalties_effective_value'], $item['royalties_effective_percentage'], $item['royalties_bracket_percentage'], ), 'fnm_value' => $item['fnm_effective_value'], 'fnm_rule' => $this->ruleLabel( $item['contract_month_reference'], $item['fnm_effective_value'], $item['fnm_effective_percentage'], $item['fnm_bracket_percentage'], ), 'maintenance_value' => $item['maintenance_effective_value'], 'total' => $item['final_value'], ]; } private function ruleLabel(int $contractMonth, float $effectiveValue, float $effectivePercentage, float $bracketPercentage): string { if ($contractMonth <= 3) { return 'Isento'; } if ($effectiveValue <= 0.0) { return 'Não cobrado'; } return abs($effectivePercentage - $bracketPercentage) < 0.0001 ? 'Fixo TBR' : '% Faturamento'; } }