Files
Investidor-V2/resources/js/lib/iva-fundraising.ts
T

47 lines
1.9 KiB
TypeScript

export type FundraisingContext = {
entityReference: string;
annualEvents: string;
eventNumber: string;
activity: string;
};
export const fundraisingActivities = [
['health_public', 'Saúde pública — 9(1)(a)'],
['social_assistance', 'Assistência social — 9(2)(a)'],
['security_public', 'Segurança pública — 9(2)(b)'],
['social_care', 'Equipamentos sociais — 9(2)(c)'],
[
'activity_facilities',
'Prática artística/desportiva/recreativa — 9(2)(d)',
],
['cultural_visits', 'Visitas culturais — 9(2)(e)'],
['statutory_membership', 'Serviços colectivos por quota — 9(2)(g)'],
['education_public', 'Ensino público — 9(3)(a)'],
['training_public', 'Formação pública — 9(3)(b)'],
];
export function fundraisingError(
value: FundraisingContext | undefined,
nonprofit: boolean,
): string | undefined {
if (
!value ||
typeof value.entityReference !== 'string' ||
!value.entityReference.trim()
)
return 'Identifique a entidade organizadora; o limite anual não é por oportunidade.';
if (
typeof value.annualEvents !== 'string' ||
typeof value.eventNumber !== 'string' ||
!/^[1-8]$/.test(value.annualEvents) ||
!/^[1-8]$/.test(value.eventNumber) ||
Number(value.eventNumber) > Number(value.annualEvents)
)
return 'Indique o total anual da entidade (incluindo esta manifestação) e o número desta manifestação: de1a8, sem exceder o total. Desconhecido não significa zero.';
const activities = fundraisingActivities
.map(([id]) => id)
.filter((id) =>
nonprofit ? !id.endsWith('_public') : id !== 'statutory_membership',
);
if (!activities.includes(value.activity))
return 'Escolha uma actividade habitual isenta abrangida por9(2)(h) e compatível com a entidade; não basta ser uma angariação de fundos.';
}