Imagino que vas a tener que adaptar la formula para cada edad.
No, esta formula funciona para cada edad.
floor((strtotime('2021-04-01')-strtotime(self))/(60*60*24*365))<Q00007+7
"self" tiene la fecha de nacimiento, Q0007 el grado, comenzando con "1"
floor((strtotime('2021-04-01')-strtotime(self))/(60*60*24*365)) -> la edad
Q00007+7 -> la maximo edad de este grado.
Pero no se tienen en cuenta los años bisiestos
Por este buscamos algo diferente.
Comparamos el año y el mes.
La fecha e como "2013-06-19"
substr(fecha,0,4) significa el año (2013)
substr(fecha,5,2) significa el mes (06)
Significa:
el año maximo de un grado es:
1. 2013-grado
2. 2014-grado y mes<4
Puedes validar asi:
(intval(substr(self,0,4)) ge 2013-Q00007) OR (intval(substr(self,0,4))==2014-Q00007 AND intval(substr(self,5,2)) lt 4)
Y la cuota?
Hay una en el ejemplo.
Las cuotas solo funcionan en encuestas activadas.