<?php 
 
function  calcularJuros( $valor ,  $dias ,  $taxaJuros ,  $diasSemJuros )  { 
    if  ( $dias  >  $diasSemJuros )  { 
        $diasComJuros  =  $dias  -  $diasSemJuros ; 
        $valorComJuros  =  $valor  *  pow ( ( 1  +  $taxaJuros  /  100 ) ,  ( $diasComJuros  /  30 ) ) ;          return  $valorComJuros ; 
    } 
    return  $valor ; 
} 
 
function  gerarParcelas( $dataInicial ,  $intervalos ,  $valorTotal ,  $taxaJuros ,  $diasSemJuros )  { 
    $datasParcelas  =  [ ] ; 
    $quantidadeParcelas  =  count ( $intervalos ) ;      $valorParcela  =  $valorTotal  /  $quantidadeParcelas ; 
 
    foreach  ( $intervalos  as  $dias )  { 
        $dataVencimento  =  clone $dataInicial ; 
        $dataVencimento -> modify ( "+{$dias}  days" ) ; 
        $valorParcelaComJuros  =  calcularJuros( $valorParcela ,  $dias ,  $taxaJuros ,  $diasSemJuros ) ; 
        $datasParcelas [ ]  =  [ 
            'data_vencimento'  =>  $dataVencimento , 
            'valor_parcela'  =>  $valorParcelaComJuros 
        ] ; 
    } 
 
    return  $datasParcelas ; 
} 
 
// Exemplo de uso 
$dataInicial  =  new  DateTime( '2024-07-06' ) ; 
$intervalos  =  [ 28 ,  42 ,  56 ] ; 
$valorTotal  =  1000.00 ; 
$taxaJuros  =  2 ;  // 2% de juros ao mês 
$diasSemJuros  =  30 ;  // Sem juros para os primeiros 30 dias 
 
$parcelas  =  gerarParcelas( $dataInicial ,  $intervalos ,  $valorTotal ,  $taxaJuros ,  $diasSemJuros ) ; 
 
foreach  ( $parcelas  as  $parcela )  { 
    echo  "Data de Vencimento: "  .  $parcela [ 'data_vencimento' ] -> format ( 'Y-m-d' )  .  PHP_EOL; 
    echo  "Valor da Parcela: R$ "  .  number_format ( $parcela [ 'valor_parcela' ] ,  2 ,  ',' ,  '.' )  .  PHP_EOL
;      echo  "-----------------------"  .  PHP_EOL; 
} 
 
PD9waHAKCmZ1bmN0aW9uIGNhbGN1bGFySnVyb3MoJHZhbG9yLCAkZGlhcywgJHRheGFKdXJvcywgJGRpYXNTZW1KdXJvcykgewogICAgaWYgKCRkaWFzID4gJGRpYXNTZW1KdXJvcykgewogICAgICAgICRkaWFzQ29tSnVyb3MgPSAkZGlhcyAtICRkaWFzU2VtSnVyb3M7CiAgICAgICAgJHZhbG9yQ29tSnVyb3MgPSAkdmFsb3IgKiBwb3coKDEgKyAkdGF4YUp1cm9zIC8gMTAwKSwgKCRkaWFzQ29tSnVyb3MgLyAzMCkpOwogICAgICAgIHJldHVybiAkdmFsb3JDb21KdXJvczsKICAgIH0KICAgIHJldHVybiAkdmFsb3I7Cn0KCmZ1bmN0aW9uIGdlcmFyUGFyY2VsYXMoJGRhdGFJbmljaWFsLCAkaW50ZXJ2YWxvcywgJHZhbG9yVG90YWwsICR0YXhhSnVyb3MsICRkaWFzU2VtSnVyb3MpIHsKICAgICRkYXRhc1BhcmNlbGFzID0gW107CiAgICAkcXVhbnRpZGFkZVBhcmNlbGFzID0gY291bnQoJGludGVydmFsb3MpOwogICAgJHZhbG9yUGFyY2VsYSA9ICR2YWxvclRvdGFsIC8gJHF1YW50aWRhZGVQYXJjZWxhczsKCiAgICBmb3JlYWNoICgkaW50ZXJ2YWxvcyBhcyAkZGlhcykgewogICAgICAgICRkYXRhVmVuY2ltZW50byA9IGNsb25lICRkYXRhSW5pY2lhbDsKICAgICAgICAkZGF0YVZlbmNpbWVudG8tPm1vZGlmeSgiK3skZGlhc30gZGF5cyIpOwogICAgICAgICR2YWxvclBhcmNlbGFDb21KdXJvcyA9IGNhbGN1bGFySnVyb3MoJHZhbG9yUGFyY2VsYSwgJGRpYXMsICR0YXhhSnVyb3MsICRkaWFzU2VtSnVyb3MpOwogICAgICAgICRkYXRhc1BhcmNlbGFzW10gPSBbCiAgICAgICAgICAgICdkYXRhX3ZlbmNpbWVudG8nID0+ICRkYXRhVmVuY2ltZW50bywKICAgICAgICAgICAgJ3ZhbG9yX3BhcmNlbGEnID0+ICR2YWxvclBhcmNlbGFDb21KdXJvcwogICAgICAgIF07CiAgICB9CgogICAgcmV0dXJuICRkYXRhc1BhcmNlbGFzOwp9CgovLyBFeGVtcGxvIGRlIHVzbwokZGF0YUluaWNpYWwgPSBuZXcgRGF0ZVRpbWUoJzIwMjQtMDctMDYnKTsKJGludGVydmFsb3MgPSBbMjgsIDQyLCA1Nl07CiR2YWxvclRvdGFsID0gMTAwMC4wMDsKJHRheGFKdXJvcyA9IDI7IC8vIDIlIGRlIGp1cm9zIGFvIG3DqnMKJGRpYXNTZW1KdXJvcyA9IDMwOyAvLyBTZW0ganVyb3MgcGFyYSBvcyBwcmltZWlyb3MgMzAgZGlhcwoKJHBhcmNlbGFzID0gZ2VyYXJQYXJjZWxhcygkZGF0YUluaWNpYWwsICRpbnRlcnZhbG9zLCAkdmFsb3JUb3RhbCwgJHRheGFKdXJvcywgJGRpYXNTZW1KdXJvcyk7Cgpmb3JlYWNoICgkcGFyY2VsYXMgYXMgJHBhcmNlbGEpIHsKICAgIGVjaG8gIkRhdGEgZGUgVmVuY2ltZW50bzogIiAuICRwYXJjZWxhWydkYXRhX3ZlbmNpbWVudG8nXS0+Zm9ybWF0KCdZLW0tZCcpIC4gUEhQX0VPTDsKICAgIGVjaG8gIlZhbG9yIGRhIFBhcmNlbGE6IFIkICIgLiBudW1iZXJfZm9ybWF0KCRwYXJjZWxhWyd2YWxvcl9wYXJjZWxhJ10sIDIsICcsJywgJy4nKSAuIFBIUF9FT0w7CiAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgLiBQSFBfRU9MOwp9Cg==