Integrate monthly IVA with projected sales in QA

This commit is contained in:
2026-10-21 14:05:46 +02:00
parent 0d7b70459d
commit 3f5430c3ce
18 changed files with 690 additions and 12 deletions
+25 -1
View File
@@ -22,6 +22,12 @@ class StoreSimulationRequest extends FormRequest
'date_format' => 'Indique uma data de exigibilidade válida.',
'boolean' => 'Indique se declara o enquadramento da operação.',
'prohibited' => 'O campo :attribute não pode ser definido pelo cliente neste cálculo.',
'array' => 'Indique uma lista válida em :attribute.',
'monthly_sales.min' => 'Indique pelo menos um mês de vendas.',
'monthly_sales.max' => 'Este lote aceita até 12 meses dentro de 2026.',
'monthly_sales.*.date.regex' => 'Indique o primeiro dia de um mês de 2026.',
'monthly_sales.*.date.distinct' => 'Cada mês deve aparecer apenas uma vez.',
'monthly_sales.*.amount.present' => 'Indique o valor das vendas ou deixe-o explicitamente sem informação.',
];
}
@@ -29,13 +35,31 @@ class StoreSimulationRequest extends FormRequest
{
return ['base' => 'base tributável', 'currency' => 'moeda', 'reference_date' => 'data de exigibilidade',
'operation' => 'operação', 'scope_declared' => 'declaração de enquadramento', 'scenario_kind' => 'tipo de cálculo',
'rule_id' => 'regra', 'rule_version' => 'versão da regra', 'rate' => 'taxa', 'reduction' => 'redução'];
'rule_id' => 'regra', 'rule_version' => 'versão da regra', 'rate' => 'taxa', 'reduction' => 'redução',
'monthly_sales' => 'vendas mensais', 'monthly_sales.*.date' => 'mês da projecção',
'monthly_sales.*.amount' => 'vendas declaradas do mês', 'sales_vat_basis' => 'tratamento do IVA nos preços'];
}
/** @return array<string, list<mixed>> */
public function rules(): array
{
if ($this->input('scenario_kind') === 'fiscal_rule_published') {
if ($this->exists('monthly_sales')) {
return [
'scenario_kind' => ['required', 'in:fiscal_rule_published'],
'monthly_sales' => ['required', 'array', 'min:1', 'max:12'],
'monthly_sales.*' => ['required', 'array:date,amount'],
'monthly_sales.*.date' => ['required', 'date_format:Y-m-d', 'regex:/^2026-\d{2}-01$/D', 'distinct'],
'monthly_sales.*.amount' => ['present', 'nullable', 'string', 'max:40', 'regex:/^\d+(?:\.\d+)?$/D'],
'sales_vat_basis' => ['required', 'in:net,included,unknown'],
'currency' => ['required', 'in:MZN'],
'scope_declared' => ['required', 'boolean'],
'organization_id' => ['nullable', 'uuid', 'exists:organizations,id'],
'base' => ['prohibited'], 'rate' => ['prohibited'], 'reduction' => ['prohibited'],
'rule_id' => ['prohibited'], 'rule_version' => ['prohibited'], 'fiscal_preview' => ['prohibited'],
];
}
return [
'scenario_kind' => ['required', 'in:fiscal_rule_published'],
'base' => ['required', 'string', 'max:40', 'regex:/^\d+(?:\.\d+)?$/'],