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

9 lines
1.6 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.';
}