Salve gente, sto scrivendo del codice per il calcolo delle rate per un dato tipo di pagamento.
Ad esempio se il pagamento è del tipo 40% subito, 30% a 30 giorni e 30% a 60 giorni.

La procedura scritta fino ad ora calcola correttamente il tipo di pagamento se non sono presenti rate.
Quindi mi servirebbe aiuto per il calcolo delle rate.
Di segiuto è presente una parte del codice:
codice:
// importo dell'imposta
    NumericLTBL imposta = this.getTotaleImposta();
    // numero di rate da generare
    NumericLTBL numeroRate = pag.getNumeroScadenze();
    // importi delle rate
    NumericLTBL[] importoRata = new NumericLTBL[pag.getNumeroScadenze().intValue()];
    // date scadenze
    DateLTBL[] dataScadenza = new DateLTBL[pag.getNumeroScadenze().intValue()];
    // somma rate
    NumericLTBL totaleRate = (NumericLTBL) Factory.createObject(NumericLTBL.class, this.getApplication());

    // Vettore contenente le rate per il pagamento selezionato
    Vector rate = pag.getCondizionePagamentoRate();   
    // Se non sono presenti rate per il pagamento
    if(rate == null || rate.size() == 0){
      // calcolo importi delle rate
      for (int i = 0 ; i<importoRata.length; i++) {
      	
      	// inizializzo importo rata
        importoRata[i] = new NumericLTBL(this.getTotaleFattura().getCName(), this.getTotaleFattura().getAName());

        // Calcolo importo
        if (i==0) {
          // Prima rata solo di iva
          if (pag.getDistribuzioneIva().getFormatted().equals("S")) {
            importoRata[i].setFormatted(imposta.getFormatted());
            // altre rate
            rata.sub(importoRata[i]);
            rata.div(numeroRate);
          }
          else
            // Tutta l'iva sulla prima rata
            if (pag.getDistribuzioneIva().getFormatted().equals("T")) {
              importoRata[i].setFormatted(imposta.getFormatted());
              // altre rate
              rata.sub(importoRata[i]);
              rata.div(numeroRate);
              importoRata[i].add(rata);
            } 
            else {
            	// Rate Standard imponibile+imposta
              rata.div(numeroRate);
              importoRata[i].setFormatted(rata.getFormatted());
            }
        } else {
        	// Rate successive alla prima
          importoRata[i].setFormatted(rata.getFormatted());
        }    
        // Se sono all'ultima rata
        if(i == (importoRata.length-1)){
         	// Estratto il totale della fattura e gli sottraggo la somma delle rate precedenti
          importoRata[i].set(this.getTotaleFattura().get());
          importoRata[i].sub(totaleRate);
        }
        else{
         	// Somma delle rate
         	totaleRate.add(importoRata[i]);
        }

        // inizializzo data scadenza
        dataScadenza[i] = new DateLTBL();

        if (i==0) {
          // anno solare o commerciale
          if (pag.getUsoMeseCommerciale().getFormatted().equals("N"))
            data.addDays(pag.getPartenzaRate().intValue());
          else
            data.addDaysCommercial(pag.getPartenzaRate().intValue());
          dataScadenza[i].set(data.get());
        } else {
        	if (pag.getUsoMeseCommerciale().getFormatted().equals("N"))
            data.addDays(pag.getIntervalloScadenze().intValue());
          else
            data.addDaysCommercial(pag.getIntervalloScadenze().intValue());
          dataScadenza[i].set(data.get());
        }

        // controllo se spostare a fine mese
        if (pag.getTipoScadenzaPagamento().getFormatted().equals("F"))
          dataScadenza[i].goToEndOfMonth();

        // controllo se spostare alla quindicina successiva
        if (pag.getTipoScadenzaPagamento().getFormatted().equals("Q"))
          // anno solare o commerciale
          dataScadenza[i].goTo15OfMonth();

    		// Controllo periodi di esclusione 1
        DateLTBL escludiDa = new DateLTBL();
        DateLTBL escludiAa = new DateLTBL();
        DateLTBL toData = new DateLTBL();
        String anno = new String(new Integer(dataScadenza[i].getYY()).toString());
        escludiDa.setFormatted(pag.getDaGiorno1().getFormatted() + "/" +
                               pag.getDaMese1().getFormatted() + "/" +
                               anno);
        escludiAa.setFormatted(pag.getAGiorno1().getFormatted() + "/" +
                               pag.getAMese1().getFormatted() + "/" +
                               anno);
        toData.setFormatted(pag.getToGiorno1().getFormatted() + "/" +
                            pag.getToMese1().getFormatted() + "/" +
                            anno);
        if (dataScadenza[i].isAfter(escludiDa) && dataScadenza[i].isBefore(escludiAa))
          dataScadenza[i].set(toData.get());

        // Controllo periodi di esclusione 2
        String anno2 = new String(new Integer(dataScadenza[i].getYY()+1).toString());
        escludiDa.setFormatted(pag.getDaGiorno2().getFormatted() + "/" +
                               pag.getDaMese2().getFormatted() + "/" +
                               anno);
        escludiAa.setFormatted(pag.getAGiorno2().getFormatted() + "/" +
                               pag.getAMese2().getFormatted() + "/" +
                               anno2);
        toData.setFormatted(pag.getToGiorno2().getFormatted() + "/" +
                            pag.getToMese2().getFormatted() + "/" +
                            anno2);
        if (dataScadenza[i].isAfter(escludiDa) && dataScadenza[i].isBefore(escludiAa))
          dataScadenza[i].set(toData.get());
            
        // Controllo esistenza Scadenza
        Scadenza scadenza = (Scadenza) Factory.createObject(Scadenza.class, this.getApplication());
        if (this.getTipoDocumento().getFormatted().equals("F")) {
          scadenza.elementAt(SQLHelpler.compressKey(new String[]{"CLI", this.getCodiceCliente().get(),
    																		this.getNumeroFattura().getFormatted(),
    																		this.getDataFattura().get(),
        	 															dataScadenza[i].get()}));
        } else {
          scadenza.elementAt(SQLHelpler.compressKey(new String[]{"CLI", this.getCodiceCliente().get(),
         																"RF/" + this.getNumeroRicevutaFiscale().get(),
         																this.getDataRicevutaFiscale().get(),
         																dataScadenza[i].get()}));
        }
        // Per Trovato incremento il fatturato e il da pagare
        if (scadenza.ERROR_NO_ENTRY.equals("0")) {
          // Se fattura
        	if (!this.getTipoFattura().getFormatted().equals("3")) {
         	  scadenzaDocumento.getImporto().add(importoRata[i]);
          // se Nota di Credito
          } else {
            scadenzaDocumento.getImporto().sub(importoRata[i]);
          }
        // Per non trovato lo creo
        } else {
         	scadenzaDocumento.setIsNewObj(true);
          scadenzaDocumento.getImporto().setFormatted("0");
          // Se fattura
          if (!this.getTipoFattura().getFormatted().equals("3")) {
         	  scadenzaDocumento.getImporto().add(importoRata[i]);
         	// se Nota di Credito
         	} else {
            scadenzaDocumento.getImporto().sub(importoRata[i]);
          }
          scadenzaDocumento.getDataScadenza().set(dataScadenza[i].get());
        }
        scadenzaDocumento.getNumeroDocumento().setFormatted(this.getNumeroDocumento().getFormatted());
        scadenzaDocumento.getCodicePagamento().setFormatted(this.getPagamento().getFormatted());
        scadenzaDocumento.save();
      }
    }
    // Se sono presenti rate per il pagamento selezionato
    else{
Nel ramo else devo inserire il calcolo: qualcuno ha qualche dritta da darmi?

Grazie mille