$interes_normal = $BaseDinamicaCalculo * ($tasa_interes * $factor_interes) * $PERIOCIDAD_DE_PAGO / EACP_DIAS_INTERES;
     //$parcialidad_presumida;
     if (isset($DatosDePagos[$LAnterior])) {
         $abonos = $DatosDePagos[$LAnterior][SYS_CAPITAL];
         $BaseDinamicaCalculo -= $abonos;
         if (MODO_DEBUG == true) {
             $msgC .= "WARN\tPagos FLAT Ajuste de base a {$BaseDinamicaCalculo} por Abono de {$abonos}\r\n";
         }
         $saldo_inicial = $saldo_final;
         $saldo_final = $saldo_inicial - $abonos;
     }
 }
 $parcialidad_interes = PLAN_DE_PAGOS_SIN_REDONDEO == true ? $interes_normal : round($interes_normal, 2);
 $parcialidad_iva = PLAN_DE_PAGOS_SIN_REDONDEO == true ? $interes_normal * $tasa_iva : round($interes_normal * $tasa_iva, 2);
 $sumar_dias += $dias_normales;
 if ($xCred->getPagosSinCapital($FormaDePago) == true) {
     $parcialidad_presumida = $parcialidad_iva + $interes_normal;
     if ($letra == $PAGOS_AUTORIZADOS) {
         $parcialidad_presumida = $monto_autorizado + ($parcialidad_iva + $interes_normal);
     }
 } else {
     if ($FormaDePago == CREDITO_TIPO_PAGO_CAPITAL_FIJO) {
         $parcialidad_presumida = $monto_autorizado / $PAGOS_AUTORIZADOS + ($parcialidad_iva + $interes_normal);
     }
     if ($FormaDePago == CREDITO_TIPO_PAGO_FLAT_PARCIAL) {
         //TODO: Activar pagos FLAT
         $parcialidad_capital = $monto_autorizado / $PAGOS_AUTORIZADOS;
         $parcialidad_interes = $OPCION_ANUAL_FLAT == true ? $saldo_historico * $PERIOCIDAD_DE_PAGO * ($tasa_interes * $factor_interes) / EACP_DIAS_INTERES : $parcialidad_capital * ($tasa_interes * $factor_interes);
         $parcialidad_iva = PLAN_DE_PAGOS_SIN_REDONDEO == true ? $parcialidad_interes * $tasa_iva : round($parcialidad_interes * $tasa_iva, 2);
         $parcialidad_presumida = $parcialidad_capital + $parcialidad_interes + $parcialidad_iva;
         $msgAlertas .= "WARN\tPagos FLAT\r\n";
 */
$rsm = $ql->getDataRecord($SQLBody);
foreach ($rsm as $rwm) {
    $pendiente = 0;
    $title = $rwm["descripcion_operacion"];
    $monto = $xT->cFloat($rwm["total_operacion"], 2);
    $MTipo = $rwm["tipo_operacion"];
    $cls = "";
    $xLog->add("WARN\tIX\tEl Movimiento es {$MTipo}\r\n", $xLog->DEVELOPER);
    //Omite los Intereses Pactados y tod lo concerniente al credito segun la base
    if (in_array($MTipo, $arrINTS)) {
        $xLog->add("WARN\t{$MTipo}\tINTERES\tEl Monto por {$monto} Del Movimiento {$MTipo} se lleva a CERO\r\n", $xLog->DEVELOPER);
        $monto = 0;
    }
    if ($MTipo == OPERACION_CLAVE_PLAN_INTERES) {
        if ($xCred->getPagosSinCapital() == true and $xF->getInt($fecha_operacion) < $xF->getInt($fecha_de_pago)) {
            $interes_calculado = $interes_normal_devengado - $interes_normal_pagado + $interes_normal_calculado;
            if ($monto > $interes_calculado) {
                $xLog->add("WARN\t{$MTipo}\tINT.DEV\tInteres de la Letra Ajustado de {$monto} a {$interes_calculado} por ser menos\r\n", $xLog->COMMON);
                $monto = $interes_calculado > 0 ? $interes_calculado : 0;
                $cls = " class='warn' ";
            }
        } else {
            if ($pago_total == false) {
                $xLog->add("WARN\tSin cambios en Intereses {$MTipo}\r\n", $xLog->DEVELOPER);
            } else {
                $interes_normal = setNoMenorQueCero($interes_normal - $monto);
            }
        }
    }
    if (in_array($MTipo, $aActosDeIva)) {
 function setReestructurarSDPM($SoloConSaldos = false, $credito = false, $forzarTodos = false, $fechaCorte = false, $fechaInicial = false, $EliminarTodo = true)
 {
     //FIXME: probar con saldo anterior
     $fechaCorte = $fechaCorte == false ? fechasys() : $fechaCorte;
     $msg = "";
     $wCredito1 = $credito != false ? "  `creditos_mvtos_asdpm`.`documento` = {$credito}" : " `documento` > 0 ";
     $wCredito2 = $credito != false ? "  numero_de_credito = {$credito} " : " numero_de_credito > 0";
     $ByRTM = $credito != false ? " " : " SQL_CACHE ";
     $wFecha1 = " AND (fecha >='{$fechaInicial}' AND fecha <='{$fechaCorte}' ) ";
     $wFecha2 = " AND (`fecha_actual` >= '{$fechaInicial}' AND `fecha_actual`<='{$fechaCorte}' ) ";
     $ql = new MQL();
     $arrEstatusD = array(OPERACION_CLAVE_MINISTRACION, 111, 114, 115);
     $arrEstatus = array(OPERACION_CLAVE_MINISTRACION => CREDITO_ESTADO_VIGENTE, 111 => CREDITO_ESTADO_VENCIDO, 114 => CREDITO_ESTADO_VIGENTE, 115 => CREDITO_ESTADO_MOROSO);
     //Eliminar el SDPM
     if ($EliminarTodo == true) {
         $DAction = $ql->setRawQuery("DELETE FROM creditos_sdpm_historico WHERE {$wCredito2} {$wFecha2} ");
         if (MODO_DEBUG == true) {
             $msg .= "WARN\tEliminando SDPM\r\n";
         }
     }
     if ($credito != false) {
         $ql->setRawQuery("DELETE FROM operaciones_mvtos WHERE docto_afectado={$credito} AND tipo_operacion = 420");
         if (MODO_DEBUG == true) {
             $msg .= "WARN\tEliminando Operaciones 420 del credito {$credito}\r\n";
         }
     }
     $msg .= "Socio\tCredito\tFecha\tMonto\tSaldo\tDias\tOperacion\tEstatus\tInteres\tMoratorios\r\n";
     //Generar saldos de credito por mes
     $sql = "SELECT {$ByRTM}\n\t\t`creditos_mvtos_asdpm`.`socio`,\n\t\t`creditos_mvtos_asdpm`.`documento`,\n\t\t`creditos_mvtos_asdpm`.`recibo`,\n\t\t`creditos_mvtos_asdpm`.`fecha`,\n\t\t`creditos_mvtos_asdpm`.`operacion`,\n\t\t`creditos_mvtos_asdpm`.`monto`,\n\t\t`creditos_mvtos_asdpm`.`afectacion`\n\t\tFROM `creditos_mvtos_asdpm`\tWHERE {$wCredito1} {$wFecha1} ";
     //setLog($sql);
     $rsM = $ql->getDataRecord($sql);
     $saldo = 0;
     $creditoA = 0;
     $xT = new cTipos();
     $xF = new cFecha();
     $FECHA_DE_ULTIMO_PAGO = "1998-01-01";
     $CREDITO_SALDO_ANTERIOR = 0;
     $MvtoAnterior = OPERACION_CLAVE_MINISTRACION;
     $ESTADO_ACTUAL = CREDITO_ESTADO_VIGENTE;
     $DIVISOR_DE_INTERESES = EACP_DIAS_INTERES;
     $DCred = array();
     $IsCredNew = true;
     $xCred = null;
     foreach ($rsM as $rw) {
         $socio = $xT->cInt($rw["socio"]);
         $credito = $xT->cInt($rw["documento"]);
         $fecha = $rw["fecha"];
         $nota = "";
         //
         $IsCredNew = true;
         if ($creditoA != $credito) {
             $saldo = 0;
             $FECHA_DE_ULTIMO_PAGO = $fecha;
             $ESTADO_ACTUAL = CREDITO_ESTADO_VIGENTE;
             $xCred = new cCredito($credito, $socio);
             $xCred->init();
             $DCred = $xCred->getDatosDeCredito();
             $CREDITO_SALDO_ANTERIOR = 0;
             //si es Ministracion
             if ($MvtoAnterior == OPERACION_CLAVE_MINISTRACION) {
                 $FECHA_DE_ULTIMO_PAGO = $xCred->getFechaDeMinistracion();
             }
             $msg .= "------------------------\tNUEVO_CREDITO : {$credito}------------------------------\r\n";
             if ($EliminarTodo == false) {
                 my_query("DELETE FROM creditos_sdpm_historico WHERE numero_de_credito = {$credito} {$wFecha2}");
             }
         } else {
             $IsCredNew = false;
         }
         $OProd = $xCred->getOProductoDeCredito();
         $recibo = $rw["recibo"];
         $operacion = $rw["operacion"];
         $afectacion = $rw["afectacion"];
         $monto = $xT->cFloat($rw["monto"], 2);
         $periocidad = $xCred->getPeriocidadDePago();
         $FechaVencimiento = $xCred->getFechaDeVencimiento();
         //(!isset( $DCred["fecha_vencimiento_dinamico"])) ? $xCred->getFechaDeVencimiento() : $DCred["fecha_vencimiento_dinamico"];
         $DiaInteresMax = $xF->setSumarDias(INTERES_DIAS_MAXIMO_A_DEVENGAR, $FechaVencimiento);
         $dias_transcurridos = $xF->setRestarFechas($fecha, $FECHA_DE_ULTIMO_PAGO);
         $saldo_calculado = $dias_transcurridos * $saldo;
         //No poner la afectacion
         $saldo += $xT->cFloat($monto * $afectacion, 2);
         // si es normal, calcular normal, si es mora: Calcular mora y normal, si es vencido: calcular normal y mora
         $interes = 0;
         $moratorio = 0;
         $TASA_NORMAL = $xCred->getTasaDeInteres();
         $TASA_MORA = $xCred->getTasaDeMora();
         $TIPO_DE_PAGO = $xCred->getTipoDePago();
         $PAGOS_SIN_CAPITAL = $xCred->getPagosSinCapital();
         $MONTO_ORIGINAL_DE_CREDITO = $xCred->getMontoAutorizado();
         $saldoBase = $xT->cFloat($saldo, 2);
         if ($operacion == OPERACION_CLAVE_PAGO_CAPITAL and $saldo == 0) {
             $saldoBase = $CREDITO_SALDO_ANTERIOR;
         }
         if ($MvtoAnterior == OPERACION_CLAVE_MINISTRACION) {
             $saldoBase = $CREDITO_SALDO_ANTERIOR;
             $saldo_calculado = $dias_transcurridos * $CREDITO_SALDO_ANTERIOR;
         }
         $SALDO_ACTUAL = $xCred->getSaldoActual();
         $BASE_NORMAL = $saldo_calculado;
         $BASE_MORA = $saldo_calculado;
         eval($OProd->getPreModInteres());
         //considerar si es un maximo de x dias devengar en vencidos
         switch ($ESTADO_ACTUAL) {
             case CREDITO_ESTADO_VIGENTE:
                 $interes = $BASE_NORMAL * $TASA_NORMAL / $DIVISOR_DE_INTERESES;
                 break;
             case CREDITO_ESTADO_VENCIDO:
                 //validar si tiene un maximo de dias transcurridos de devengado
                 if ($xF->getInt($fecha) <= $xF->getInt($DiaInteresMax)) {
                     $interes = $BASE_NORMAL * $TASA_NORMAL / $DIVISOR_DE_INTERESES;
                     $moratorio = $BASE_MORA * $TASA_MORA / $DIVISOR_DE_INTERESES;
                 } else {
                     $interes = 0;
                     $moratorio = 0;
                     $nota = "Despues del {$DiaInteresMax} no se acumula Interes, Vencimiento : {$FechaVencimiento}";
                 }
                 break;
             case CREDITO_ESTADO_MOROSO:
                 $interes = $BASE_NORMAL * $TASA_NORMAL / $DIVISOR_DE_INTERESES;
                 $moratorio = $BASE_MORA * $TASA_MORA / $DIVISOR_DE_INTERESES;
                 break;
         }
         //END_SWITCH
         $interes = $xT->cFloat($interes, 2);
         if ($periocidad == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO) {
             $moratorio = $xT->cFloat($moratorio, 2);
             //0; //2012-04-10
         } else {
             //$moratorio			= 0;
         }
         eval($OProd->getPosModInteres());
         $msg .= "{$socio}\t{$credito}\t{$fecha}\t{$monto}\t{$saldo}\t{$dias_transcurridos}\t{$operacion}\t{$ESTADO_ACTUAL}\t{$interes}\t{$moratorio}\t{$nota}\r\n";
         if ($xF->getInt($fecha) <= $xF->getInt(SYS_FECHA_DE_MIGRACION)) {
             $interes = 0;
             $moratorio = 0;
             if (MODO_DEBUG == true) {
                 $msg .= "WARN\tOMITIR Interes {$interes} y MORA por {$moratorio} por estar antes de la migracion {$fecha}\r\n";
             }
         }
         if ($xF->getInt($fecha) <= $xF->getInt($fechaCorte)) {
             $msgSDPM = $xCred->addSDPM($interes, $moratorio, $FECHA_DE_ULTIMO_PAGO, $saldo, $ESTADO_ACTUAL, $fecha, $operacion, $saldo_calculado);
             //if(MODO_DEBUG == true){ $msg	.= $msgSDPM;	}
         }
         if ($saldo <= TOLERANCIA_SALDOS) {
             $msg .= "------------------------------------------------------\r\n";
         }
         $creditoA = $credito;
         $FECHA_DE_ULTIMO_PAGO = $fecha;
         $CREDITO_SALDO_ANTERIOR = $saldo;
         $MvtoAnterior = $operacion;
         /*
          * si existe la operacion de cambio de estatus, validar en el array, y actualizar el valor
          * Este estatus se aplicara en el siguiente
          */
         if (in_array($operacion, $arrEstatusD)) {
             $ESTADO_ACTUAL = $arrEstatus[$operacion];
         }
     }
     return $msg;
 }
/**
 * Si cambio la Fecha de Abono de capital
 * se Actualiza la fecha de Ultima Operacion
 */
if ($baseM120 > 0) {
    $arrUCredito["fecha_ultimo_mvto"] = $fecha_operacion;
    //TODO : // corregir
    //calcular cambios de capital		//500 + ((4500 - 5000) [-500] *-1)[1000] / 5000 = 25%
    //1 - (500 / 4500 [0.1111])
    $proporcion_de_cambios = 1 - $baseM120 / $xCred->getSaldoActual();
    //($baseM120  + ((($xCred->getSaldoActual() - $xCred->getMontoAutorizado()) ) * - 1) ) / $xCred->getMontoAutorizado();
    //calcular Interes diario
    $interes_diario = $xCred->getInteresDiariogenerado() - $xCred->getInteresDiariogenerado() * $proporcion_de_cambios;
    $arrUCredito["interes_diario"] = $interes_diario;
    $msg .= "WARN\tCambios de interes por capital queda en {$interes_diario} y proporcion de {$proporcion_de_cambios}\r\n";
    if ($xCred->getPagosSinCapital() == true) {
        $sqlTM = "UPDATE operaciones_mvtos SET afectacion_real=(afectacion_real*{$proporcion_de_cambios}), \n\t\t\t\t\tafectacion_cobranza =(afectacion_cobranza*{$proporcion_de_cambios}), \n\t\t\t\t\tafectacion_estadistica=(afectacion_estadistica*{$proporcion_de_cambios}) WHERE socio_afectado={$socio} AND docto_afectado={$solicitud} AND (tipo_operacion=" . OPERACION_CLAVE_PLAN_INTERES . " OR tipo_operacion=" . OPERACION_CLAVE_PLAN_IVA . ") ";
        my_query($sqlTM);
        $msg .= "WARN\tAjustando Intereses de plan de pagos solo interes\r\n";
    }
    //nuevo saldo
    $nuevo_saldo = $xCred->getSaldoActual() - $baseM120;
    $nuevo_saldo = $nuevo_saldo < 0 ? 0 : $nuevo_saldo;
    $arrUCredito["saldo_actual"] = $nuevo_saldo;
}
if (setNoMenorQueCero($baseM120) <= 0) {
    $actualizar_parcialidad = false;
}
//Saldo ints devengados aldo_actual=(saldo_actual - ($baseM120)),
//monto_parcialidad 	$arrUCredito["saldo_actual"]
if ($xCred->getPagosAutorizados() <= $nueva_parcialidad) {