Muito tempo atrás eu participei de um projeto similar a esse.
Vou colocar aqui de maneira bem simplista, mas acho que será o suficiente para você dar continuidade
O que fizemos foi atrelar a matrícula da pessoa com um contrato:
- A pessoa realiza a matrícula;
- Com o registro da matrícula é gerado um contrato, contendo as modalidades contratadas e o período de contrato. Exemplo: 1 ano;
- Com o id do contrato é gerado o contas a receber/faturas/títulos desse cliente, ou seja, se o contrato é de 1 ano, são geradas 12 faturas cada uma para um mês;
- Você cria um processo para dar baixa nas faturas;
Quanto ao dia do vencimento, no momento que for gerar as faturas você cria um loop para a insersão de cada fatura e sempre adiciona 1 mês em relação ao registro anterior. A standard library da sua linguagem de programação já deve ter algo simples para fazer isso.
Tenha cuidado com os dias 29, 30 e 31 do mês, nem todo mês tem esses dias. Defina regras para cenários como estes
Escreva os testes!