47 lines
1.9 KiB
TypeScript
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.';
|
|
}
|