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