function analizarOperacion($persona, $monto_operado, $moneda, $tipo_de_pago, $fecha = false, $recibo = false, $perfil = false)
 {
     $moneda = strtoupper($moneda);
     $sql = "SELECT * FROM `aml_risk_catalog` \n\t\t\t\t\tWHERE (`aml_risk_catalog`.`tipo_de_riesgo` = 912)\n\t\t\t\t\tAND (`aml_risk_catalog`.`clave_de_control` != " . AML_CLAVE_RIESGO_OPS_INDIVIDUALES . ")\n\t\t\t\t\tORDER BY \n\t\t\t\t\t`aml_risk_catalog`.`unidad_de_medida`,\t`aml_risk_catalog`.`unidades_ponderadas` DESC ";
     $ql = new MQL();
     $risk = new cAml_risk_catalog();
     $raised = false;
     $xAML = new cAML();
     $rs = $ql->getDataRecord($sql);
     //Datos de Operaciones Mensuales
     $xAMLP = new cAMLPersonas($persona);
     $xAMLP->init();
     $OMens = $xAMLP->getOAcumuladoDeOperaciones($fecha, $fecha, $moneda, $tipo_de_pago);
     $monto_original = $OMens->getMonto() + $monto_operado;
     $this->mMessages .= "WARN\tOperaciones acumuladas por " . $OMens->getMonto() . "\r\n";
     if ($perfil == false) {
         $this->mMessages .= "ERROR\tNo existe el perfil tipo de pago {$tipo_de_pago} en Moneda {$moneda} \r\n";
         //agregar perfil a cero
     } else {
         $perfil = setNoMenorQueCero($perfil);
         $sql = "SELECT * FROM `personas_perfil_transaccional_tipos` WHERE `idpersonas_perfil_transaccional_tipos` = {$perfil} LIMIT 0,1";
         $d = $ql->getDataRow($sql);
         if (isset($d["tipo_de_exhibicion"])) {
             $tipo_de_pago = strtolower($d["tipo_de_exhibicion"]);
         }
         $this->mMessages .= "OK\tCarga del perfil {$perfil}  con tipo de pago {$tipo_de_pago}\r\n";
     }
     //verificar operaciones con reglas
     foreach ($rs as $rows) {
         $risk->setData($rows);
         $reporteMoneda = strtoupper($risk->unidad_de_medida()->v());
         if ($reporteMoneda == $moneda) {
             if ($raised == false) {
                 $reporteMoneda = strtoupper($risk->unidad_de_medida()->v());
                 $xMon = new cMonedas($reporteMoneda);
                 $valor_local = $xMon->getValor();
                 $clave = $risk->clave_de_control()->v();
                 if ($xAML->isTransaccionVigilada($tipo_de_pago) != false) {
                     $unidadesReportadas = $risk->unidades_ponderadas()->v();
                     $unidadesOperadas = 0;
                     if ($reporteMoneda == AML_CLAVE_MONEDA_LOCAL) {
                         $unidadesOperadas = $monto_original;
                     } else {
                         $this->mMessages .= "WARN\tUnidades reportadas {$unidadesOperadas} en Moneda {$moneda} con valor local de {$valor_local}\r\n";
                         $unidadesReportadas = $valor_local * $unidadesReportadas / VALOR_ACTUAL_DOLAR;
                         $unidadesOperadas = $monto_original * $valor_local / VALOR_ACTUAL_DOLAR;
                     }
                     if ($unidadesOperadas >= $unidadesReportadas) {
                         $this->mMsgAlert = "ERROR\tUnidades excedidas de {$unidadesReportadas} operados {$unidadesOperadas} en la Moneda {$reporteMoneda}\r\n";
                         $this->mMessages .= $this->mMsgAlert;
                         $raised = true;
                         $this->mTipoDeAlerta = $clave;
                         $this->mTipoDeReporte = $risk->forma_de_reportar()->v();
                     } else {
                         $this->mMessages .= "OK\tOperacion Normal de {$unidadesOperadas} no sobrepasan {$unidadesReportadas}\r\n";
                     }
                     //Validar sivienen de paises con alto riesgo
                     $xP = new cDomiciliosPaises();
                     $xP->getPaisPorMoneda($reporteMoneda);
                     $nombrepais = $xP->getNombre();
                     if ($xP->getRiesgoAMLAsociado() >= SYS_RIESGO_MEDIO) {
                         //Agregar alerta por operaciones en paises de  alto y medio riesgo
                         $this->mMsgAlert .= "ERROR\tFondos provenientes de paises con Riesgo Elevado {$nombrepais}\r\n";
                         $this->mMessages .= "ERROR\tFondos provenientes de paises con Riesgo Elevado {$nombrepais}\r\n";
                     }
                 } else {
                     $this->mMessages .= "OK\tOperacion Omitida por ser tipo de pago {$tipo_de_pago} ({$reporteMoneda} )\r\n";
                 }
             }
         } else {
             $this->mMessages .= "OK\tOperacion Omitida por ser Moneda {$moneda} de {$reporteMoneda}\r\n";
         }
     }
     //setLog($this->mMessages);
     if (MODO_DEBUG == true) {
         setLog($this->getMessages());
     }
     return $raised;
 }
 function setActualizarNivelDeRiesgo($nivel = SYS_RIESGO_BAJO, $mensaje = "", $fecha = false)
 {
     $xNot = new cNotificaciones();
     $xF = new cFecha();
     $fecha = $xF->getFechaISO($fecha);
     $mensaje = $xNot->cleanString($mensaje);
     //AML.- Agregar aviso de cambio
     if ($nivel >= SYS_RIESGO_ALTO and MODULO_AML_ACTIVADO == true) {
         $xAml = new cAML();
         $xAml->setForceAlerts();
         $xAml->sendAlerts($this->mCodigo, AML_OFICIAL_DE_CUMPLIMIENTO, AML_RISK_INTERNAL_OPERATION, $mensaje, false, $fecha);
         //TODO: Exportar a asociada, falta relaciones exportar relaciones
         $this->getExportarAsociada(TPERSONAS_GENERALES, SVC_REMOTE_HOST);
         $this->getExportarAsociada(TPERSONAS_DIRECCIONES, SVC_REMOTE_HOST);
         $this->getExportarAsociada(TPERSONAS_ACTIVIDAD_ECONOMICA, SVC_REMOTE_HOST);
         $this->mMessages .= $xAml->getMessages();
     }
     //Omitir AML en la actualizacion
     $this->setOmitirAML(true);
     $this->setUpdate(array("nivel_de_riesgo_aml" => $nivel));
     //agregar una Noticiacion a la Persona de Nota
     $this->addMemo(MEMOS_TIPO_HISTORIAL, $mensaje, false, $fecha);
 }
 /**
  * Efectua operaciones de finalizacion del recibo
  * @param boolean $UpdateSaldo Marca si Actualiza el Saldo del Credito
  */
 function setFinalizarRecibo($UpdateSaldo = false, $tesoreria_cargada = false)
 {
     //generar Poliza a demanda
     $finalizado = true;
     //tranferencia.egresos cheque
     if (MODULO_CAJA_ACTIVADO == false) {
         $tesoreria_cargada = true;
         /* Forzar AML si Tesoreria esta Desactivado */
     }
     /**
      * Modificacion de la condicion de socio por afectar al recibo en SI?
      */
     if ($UpdateSaldo == true) {
         if ($this->mSumaDeRecibo == 0 or $this->mForceUpdateSaldos == true or !isset($this->mSumaDeRecibo) or $this->mSumaDeRecibo == false or $this->mSumaDeRecibo == '') {
             $sqlSUM = "SELECT\n\t\t\t\t\t\t\t\tSUM(`operaciones_mvtos`.`afectacion_real` *  `operaciones_mvtos`.`valor_afectacion`) \tAS 'monto',\n\t\t\t\t\t\t\t\tCOUNT(`operaciones_mvtos`.`idoperaciones_mvtos`)\t\t\t\t\t\t\t\t\t\tAS 'numero',\n\t\t\t\t\t\t\t\t`operaciones_mvtos`.`recibo_afectado`,\n\t\t\t\t\t\t\t\t`operaciones_mvtos`.`socio_afectado`\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t`operaciones_mvtos` `operaciones_mvtos`\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t(`operaciones_mvtos`.`recibo_afectado` =" . $this->mCodigoDeRecibo . ")\n\n\t\t\t\t\t\t\tGROUP BY\n\t\t\t\t\t\t\t\t`operaciones_mvtos`.`recibo_afectado` ";
             $TDRec = obten_filas($sqlSUM);
             $this->mSumaDeRecibo = $TDRec["monto"];
             $this->mNumeroDeMvtos = $TDRec["numero"];
             $this->mMessages .= "SUCESSACT\tMonto Actualizado a " . $this->mSumaDeRecibo . " y # Operaciones " . $this->mNumeroDeMvtos . "\r\n";
         }
         if (!isset($this->mSumaDeRecibo)) {
             $this->mSumaDeRecibo = 0;
         }
         $sql = "UPDATE operaciones_recibos SET total_operacion=" . $this->mSumaDeRecibo . "\n    \t\t\t\tWHERE\tidoperaciones_recibos= " . $this->mCodigoDeRecibo . "\t";
         $xRs = my_query($sql);
     }
     if ($this->mSetGenerarPoliza == true) {
         //PolizaPorRecibo($this->mCodigoDeRecibo, GENERAR_POLIZAS_AL_CIERRE);
     }
     $this->mTotalRecibo = $this->mSumaDeRecibo;
     //-- AML
     if (MODULO_AML_ACTIVADO == true and $this->isPagable() == true and $tesoreria_cargada == true) {
         $xAml = new cAMLPersonas($this->mSocio);
         $xAml->init();
         $xAml->setForceAlerts();
         $xAmlO = new cAMLOperaciones();
         $this->init();
         if ($xAml->getEsPersonaVigilada() == true) {
             $tipo_de_pago_aml = $this->mTipoDePago;
             if (setNoMenorQueCero($this->mTipoOrigenAML) > 0) {
                 $xRisK = new cPersonas_perfil_transaccional_tipos();
                 $xRisK->query()->initByID($this->mTipoOrigenAML);
                 $tipo_de_pago_aml = strtolower($xRisK->tipo_de_exhibicion()->v(OUT_TXT));
                 $this->mMessages .= "WARN\tCambiar el perfil de pago de " . $this->mTipoDePago . " a {$tipo_de_pago_aml} \r\n";
             }
             $res = $xAmlO->analizarOperacion($this->mSocio, 0, $this->mMoneda, $tipo_de_pago_aml, $this->getFechaDeRecibo(), $this->getCodigoDeRecibo(), $this->mTipoOrigenAML);
             if ($res == false) {
                 $this->mMessages .= "OK\tAML Normal \r\n";
                 if (MODO_DEBUG == true) {
                     $this->mMessages .= $xAmlO->getMessages(OUT_TXT);
                 }
             } else {
                 //REPORTAR
                 $xAv = new cAML();
                 if ($xAmlO->getTipoDeReporte() == AML_REPORTE_INMEDIATO) {
                     $xAv->setForceRegistroRiesgo();
                     $this->mMessages .= "WARN\tAML de Aviso Inmediato\r\n";
                 }
                 $xAv->sendAlerts($this->mSocio, AML_OFICIAL_DE_CUMPLIMIENTO, $xAmlO->getTipoDeAlerta(), $xAmlO->getMessageAlert(), $this->mCodigoDeRecibo, $this->mFechaDeOperacion);
             }
             $this->mMessages .= $xAmlO->getMessages(OUT_TXT);
             //validar perfil transaccional
             $xAml->setVerificarPerfilTransaccional();
         }
         //Validar si es person riesgosa
         $xSoc = $xAml->getOPersona();
         if ($xSoc->getEsPersonaSDN() == true) {
             //REPORTAR operaciones con alto riesgo
             $idriesgo = AML_ID_OPERACIONES_PERSONAS_ALTO_RIESGO;
             //operaciones con criminales
             $xRiesgo = new cAml_risk_catalog();
             $xRiesgo->setData($xRiesgo->query()->initByID($idriesgo));
             $xAv = new cAML();
             $xAv->setForceRegistroRiesgo();
             $xAv->sendAlerts($this->mSocio, AML_OFICIAL_DE_CUMPLIMIENTO, $idriesgo, "ERROR\tOperaciones con persona ALTAMENTE RIESGOSA Recibo " . $this->mCodigoDeRecibo, $this->mCodigoDeRecibo, $this->getFechaDeRecibo());
             $this->mMessages .= $xAv->getMessages(OUT_TXT);
         }
         if ($xSoc->getEsPersonaPoliticamenteExpuesta() == true) {
             //REPORTAR operaciones con PEPs
             $idriesgo = AML_ID_OPERACIONES_PERSONAS_PEP;
             //operaciones con criminales
             $xRiesgo = new cAml_risk_catalog();
             $xRiesgo->setData($xRiesgo->query()->initByID($idriesgo));
             $xAv = new cAML();
             $xAv->sendAlerts($this->mSocio, AML_OFICIAL_DE_CUMPLIMIENTO, $idriesgo, "ERROR\tOperaciones con PEPS Recibo " . $this->mCodigoDeRecibo, $this->mCodigoDeRecibo, $this->getFechaDeRecibo());
             $this->mMessages .= $xAv->getMessages(OUT_TXT);
         }
         if ($xSoc->getEsPersonaRiesgosa() == true) {
             //REPORTAR operaciones con PEPs
             $idriesgo = 101005;
             //operaciones con criminales
             $xRiesgo = new cAml_risk_catalog();
             $xRiesgo->setData($xRiesgo->query()->initByID($idriesgo));
             $xAv = new cAML();
             $xAv->sendAlerts($this->mSocio, AML_OFICIAL_DE_CUMPLIMIENTO, $idriesgo, "ERROR\tOperaciones con Personas de Alto Riesgo.- Recibo " . $this->mCodigoDeRecibo, $this->mCodigoDeRecibo, $this->getFechaDeRecibo());
             $this->mMessages .= $xAv->getMessages(OUT_TXT);
         }
         //Operaciones de una exhibicion 500 y USD
         if ($this->mMoneda != AML_CLAVE_MONEDA_LOCAL) {
             $idriesgo = AML_CLAVE_RIESGO_OPS_INDIVIDUALES;
             $xRiesgo = new cAml_risk_catalog();
             $xMon = new cMonedas($this->mMoneda);
             $xRiesgo->setData($xRiesgo->query()->initByID($idriesgo));
             $unidades = $xMon->getEnDolares($this->getUnidadesOriginales());
             if ($unidades >= $xRiesgo->unidades_ponderadas()->v()) {
                 $xAv = new cAML();
                 $xAv->setForceRegistroRiesgo();
                 $xAv->sendAlerts($this->mSocio, AML_OFICIAL_DE_CUMPLIMIENTO, $idriesgo, "Operaciones({$unidades}) excedidas de 500 USD en el recibo " . $this->mCodigoDeRecibo . " Moneda " . $this->mMoneda, $this->mCodigoDeRecibo, $this->getFechaDeRecibo());
                 $this->mMessages .= $xAv->getMessages(OUT_TXT);
             } else {
                 $this->mMessages .= "OK\tNo hay modificacion para la Moneda " . $this->mMoneda . " por {$unidades} \r\n";
             }
         }
         // Agregar Relevantes por 10000USD
         if ($this->isEfectivo() == true) {
             $idriesgo = AML_CLAVE_RIESGO_OPS_RELEVANTES;
             $xRiesgo = new cAml_risk_catalog();
             $xMon = new cMonedas($this->mMoneda);
             $mmonto = $this->mMoneda == AML_CLAVE_MONEDA_LOCAL ? $this->getTotal() : $this->getUnidadesOriginales();
             $xRiesgo->setData($xRiesgo->query()->initByID($idriesgo));
             $unidades = $xMon->getEnDolares($mmonto);
             if ($unidades >= $xRiesgo->unidades_ponderadas()->v()) {
                 $xAv = new cAML();
                 $xAv->setForceRegistroRiesgo();
                 $xAv->sendAlerts($this->mSocio, AML_OFICIAL_DE_CUMPLIMIENTO, $idriesgo, "Operaciones Relevantes por {$unidades} USD en el recibo " . $this->mCodigoDeRecibo . " Moneda " . $this->mMoneda, $this->mCodigoDeRecibo, $this->getFechaDeRecibo());
                 $this->mMessages .= $xAv->getMessages(OUT_TXT);
             } else {
                 $this->mMessages .= "OK\tNo hay modificacion para la Moneda " . $this->mMoneda . " por {$unidades} \r\n";
             }
         }
         if ($xAml->getEsPersonaVigilada() == true) {
             //Operaciones Internas Preocupantes por Usuario
             $xAml->setAnalizarTransaccionalidadPorNucleo($this->mCodigoDeRecibo, $this->mFechaDeOperacion, $this->mUsuario, true);
         }
         $this->mMessages .= $xAml->getMessages(OUT_TXT);
     }
     return $finalizado;
 }
    $xFRM->addHElem($xSel->getListaDeObjetosEnSistema()->get(true));
    $xFRM->addHElem($xTa->get("idmensaje", "", $xHP->lang("mensaje")));
    //$xFRM->addCreditBasico();
    $xFRM->addSubmit();
} else {
    //LOS REPORTES DIRECTOS SI SE NOTIFICAN AL OFICIAL
    $arrValores = array("montoabonado" => MQL_FLOAT, "idusuarioreportado" => MQL_INT, "idmensaje" => MQL_STRING, "fecha_de_evento" => MQL_STRING, "idtipoderiesgo" => MQL_INT, "iddocumento" => MQL_INT, "idsocio" => MQL_INT);
    $xF = new cFecha();
    $VR = getVariablesSanas($_POST, $arrValores);
    $fecha = $xF->getFechaISO($VR["fecha_de_evento"]);
    //$fecha			= $xF->getInt($fecha);
    $usuarioreportado = $VR["idusuarioreportado"];
    $motivo = $VR["idtipoderiesgo"];
    $mensaje = $VR["idmensaje"];
    $documento = $VR["iddocumento"];
    $tercero = $VR["idsocio"];
    $tipo_de_documento = parametro("idobjetodesistema", iDE_RECIBO, MQL_INT);
    $xAml = new cAML();
    $xAml->setReportarUsuario($usuarioreportado, $motivo, $mensaje, $documento, $fecha, $tercero, $tipo_de_documento);
    $xFRM->addAviso($xAml->getMessages());
    $xFRM->addToolbar($xBtn->getIrAlInicio(true));
}
echo $xFRM->get();
echo $xHP->setBodyEnd();
$jsb->show();
?>
<!-- HTML content -->
<script>
</script>
<?php 
$xHP->end();