<?php declare(strict_types=1);

use DocuSign\eSign\Model\Date;

class Relatorio_Service_Montarelatorioliquidacao
{
    public function executa(array $rs, bool $isImportacaoIndenizacaoAgro = false, array $idsLiquidacoes = [])
    {
        $modelProposta = new Seguro_Model_Propostas();
  
        $user          = Zend_Auth::getInstance()->getIdentity();
        $arr = array();
        $modelBeneficiarios = new Seguro_Model_PropostasBeneficiarios();

        $coberturasIgnorar = $coberturasInvalidasBeneficiario = [
            Produto_Model_Coberturas::COB_PROTECAO_FITO,
            Produto_Model_Coberturas::COB_QUEDA_PARREIRAL,
            Produto_Model_Coberturas::COB_REPLANTIO,
            Produto_Model_Coberturas::COB_REPLANTIO_SEM_ESTIAGEM,
            Produto_Model_Coberturas::COB_REPLANTIO_EXCESSO_CHUVA,
            Produto_Model_Coberturas::COB_REPLANTIO_GEADA
        ];

        $coberturasIgnorar = implode(', ', $coberturasIgnorar);

        $sqlTotalPagoLiquidacoes = "SELECT DISTINCT p.id AS id_processo, lpp.vl_pagamento ";
        $sqlTotalPagoLiquidacoes .= "FROM sinistro.processos AS p ";
        $sqlTotalPagoLiquidacoes .= "INNER JOIN sinistro.liquidacoes AS l ON l.id_processo = p.id ";
        $sqlTotalPagoLiquidacoes .= "INNER JOIN sinistro.liquidacoes_itens_segurados_coberturas AS lic ON lic.id_liquidacao = l.id ";
        $sqlTotalPagoLiquidacoes .= "INNER JOIN produto.coberturas AS cob ON cob.id = lic.id_cobertura ";
        $sqlTotalPagoLiquidacoes .= "INNER JOIN sinistro.liquidacoes_previsao_pagamento AS lpp ON lpp.id_liquidacao = l.id ";
        $sqlTotalPagoLiquidacoes .= "WHERE (cob.id NOT in({$coberturasIgnorar}))";
        $rsTotalPagoLiquidacoes = (new Relatorio_Model_Sinistro())->fetchAll($sqlTotalPagoLiquidacoes);
        $dadosTotalPagosLiquidacoes = [];

        foreach ($rsTotalPagoLiquidacoes as $registro) {
            if (!array_key_exists($registro['id_processo'], $dadosTotalPagosLiquidacoes)) {
                $dadosTotalPagosLiquidacoes[$registro['id_processo']] = [];
            }

            $dadosTotalPagosLiquidacoes[$registro['id_processo']][] = $registro;
        }

        $sqlValoresItensSegurados = "SELECT sis.vl_area, ";
        $sqlValoresItensSegurados .= "       sis.vl_rendimento_tonelada, ";
        $sqlValoresItensSegurados .= "       sis.vl_lmga, ";
        $sqlValoresItensSegurados .= "       lfis.vl_percent_colhido, ";
        $sqlValoresItensSegurados .= "       lfis.vl_rendimento_final_lavoura, ";
        $sqlValoresItensSegurados .= "       isc.vl_producao_garantida, ";
        $sqlValoresItensSegurados .= "       lisc.id_liquidacao ";
        $sqlValoresItensSegurados .= "FROM seguro.itens_segurados AS sis ";
        $sqlValoresItensSegurados .= "INNER JOIN sinistro.laudos_finais_itens_segurados AS lfis ON sis.id = lfis.id_item_segurado ";
        $sqlValoresItensSegurados .= "INNER JOIN sinistro.liquidacoes_itens_segurados_coberturas_lf AS lisclf ON lfis.id = lisclf.id_laudo_final_item_segurado ";
        $sqlValoresItensSegurados .= "INNER JOIN sinistro.liquidacoes_itens_segurados_coberturas AS lisc ON lisclf.id_liquidacoes_itens_segurados_coberturas = lisc.id ";
        $sqlValoresItensSegurados .= "INNER JOIN seguro.itens_segurados_complemento AS isc ON sis.id = isc.id_item_segurado ";
        $sqlValoresItensSegurados .= "INNER JOIN sinistro.laudos_finais AS lf ON lf.id = lfis.id_laudo_final ";
        $sqlValoresItensSegurados .= "WHERE (lfis.id_motivo_quadra_nao_vistoriada IS NULL ";
        $sqlValoresItensSegurados .= "       OR lfis.id_motivo_quadra_nao_vistoriada IN (1, 2, 3, 4, 7)) ";
        $sqlValoresItensSegurados .= "  AND (lf.id_status <> 207);";

        $rsValoresItensSegurados = (new Relatorio_Model_Sinistro())->fetchAll($sqlValoresItensSegurados);
        $dadosItensLiquidacao = [];

        foreach ($rsValoresItensSegurados as $registro) {
            if (!array_key_exists($registro['id_liquidacao'], $dadosItensLiquidacao)) {
                $dadosItensLiquidacao[$registro['id_liquidacao']] = [];
            }

            $dadosItensLiquidacao[$registro['id_liquidacao']][] = $registro;
        }

        $dataAgendamento = Agro_Util::somarDataDiasUteis(
            date('Y-m-d'),
            2,
            Zend_Date::YEAR . Zend_Date::MONTH . Zend_Date::DAY
        );
       
        $indice = 0;

        foreach($rs as $Row){

            $arr[$indice]['id_sinistro_seguradora']    = $Row['cd_identificador_seguradora'];
            $arr[$indice]['id_proposta']               = $Row['id_proposta'];
            $arr[$indice]['id_liquidacao']             = $Row['id_liquidacao'];
            $arr[$indice]['id_processo_seguradora']    = $Row['id_processo_seguradora'];
            $arr[$indice]['id_processo']               = $Row['id_processo'];
            $arr[$indice]['nr_apolice']                = $Row['nr_apolice'];
            $arr[$indice]['ds_nome_proponente']        = $Row['ds_nome_proponente'];
            $arr[$indice]['cpf_cnpj']                  = $Row['cpf_cnpj'];
            $arr[$indice]['ds_nome_abreviado']         = $Row['ds_nome_abreviado'];
            $arr[$indice]['id_liquidacao']             = $Row['id_liquidacao'];
            $arr[$indice]['ds_nome_proponente']        = $Row['ds_nome_proponente'];
            $arr[$indice]['vl_indenizacao']            = round($Row['vl_indenizacao'], 2);
            $arr[$indice]['ds_status']                 = $Row['ds_status'];
            $arr[$indice]['dt_envio_seguradora']       = ($user->id_empresa == 20) ? $Row['dt_envio_seguradora'] : null;
            $arr[$indice]['ds_nome_produto']           = $Row['ds_nome_produto'];
            $arr[$indice]['ds_nome_safra']             = $Row['ds_nome_safra'];
            $arr[$indice]['ds_nome_municipio']         = $Row['ds_nome_municipio'];
            $arr[$indice]['ds_sigla']                  = $Row['ds_sigla'];
            $arr[$indice]['dt_liquidacao']             = $Row['dt_liquidacao'];
            $arr[$indice]['vl_pagamento']              = $Row['vl_pagamento'];
            $arr[$indice]['dt_estimada_pagamento']  	 = Agro_Util::formatDate($Row['dt_estimada_pagamento'], 'dd/MM/yyyy');
            $arr[$indice]['dt_confirmacao_pagamento']  = Agro_Util::formatDate($Row['dt_confirmacao_pagamento'], 'dd/MM/yyyy');
            $arr[$indice]['dt_encerramento_colheita']  = $Row['dt_encerramento_colheita'];
            $arr[$indice]['dt_arquivo']                = $Row['dt_arquivo'];
            $arr[$indice]['ds_nome_usuario_responsavel_liquidacao']  = $Row['ds_nome_usuario_responsavel_liquidacao'];
            $arr[$indice]['tp_liquidacao']             = $Row['tp_liquidacao'];
            $arr[$indice]['ds_status_arquivos']        = $Row['ds_status_arquivos'];
            $arr[$indice]['dt_base_pagamento']         = $Row['dt_base_pagamento'];
            $arr[$indice]['data_agendamento']          = $dataAgendamento;

            if (!$isImportacaoIndenizacaoAgro) {
                $arr[$indice]['ds_nome_cobertura'] = $Row['ds_nome_cobertura'];
                $arr[$indice]['dt_aviso_final_replantio'] = $Row['dt_aviso_final_replantio'];
                $arr[$indice]['motivos_sem_indenizacao'] = $Row['motivos_sem_indenizacao'];
                $arr[$indice]['id_aviso'] = $Row['id_aviso'];
                $arr[$indice]['ds_nome_evento'] = $Row['ds_nome_evento'];
            }

            if (!empty($Row['dt_arquivo'])) {
                $date = str_replace('/', '-', $Row['dt_arquivo']);
                $arDatas[$Row['id_liquidacao']][] = date('Y-m-d',strtotime($date));
            }

            /*
             * Se for Cob. de Replantio, utiliza a data de aviso final de replantio como referência e não a data de encerramento de colheita
             */
            if($Row['id_cobertura'] == 5 || $Row['id_cobertura'] == 30 || $Row['id_cobertura'] == 31 || $Row['id_cobertura'] == 36){
                if (!empty($Row['dt_encerramento_colheita'])) {
                    $date = str_replace('/', '-', $Row['dt_encerramento_colheita']);
                    $arDatas[$indice][] = date('Y-m-d',strtotime($date));
                }
            } elseif(!$isImportacaoIndenizacaoAgro){
                if (!empty($Row['dt_aviso_final_replantio'])) {
                    $date = str_replace('/', '-', $Row['dt_aviso_final_replantio']);
                    $arDatas[$indice][] = date('Y-m-d',strtotime($date));
                }
            }

            if ($Row['tipo_liquidacao_chave'] === 'LIQ17') {
                $soma_mpa = 0;
                $soma_pgm = 0;
                $soma_lmga = 0;
                $area_total = 0;
                $itens = $dadosItensLiquidacao[$Row['id_liquidacao']];

                foreach ($itens as $quadra) {
                    $rendimento = round(((($quadra['vl_percent_colhido']/100) * $quadra['vl_area'] * $quadra['vl_rendimento_tonelada']) + ((1 - ($quadra['vl_percent_colhido']/100))
                          * $quadra['vl_area'] * $quadra['vl_rendimento_final_lavoura']))/$quadra['vl_area'], 3);

                    $soma_mpa += $rendimento * $quadra['vl_area'];
                    $soma_pgm += $quadra['vl_area'] * $quadra['vl_producao_garantida'];
                    $soma_lmga += $quadra['vl_lmga'];
                    $area_total += $quadra['vl_area'];
                }

                $pmo = ($soma_mpa / $area_total);
                $pgm = $soma_pgm / $area_total;
                $perc_indenizacao = round((($pgm - $pmo) / $pgm), 4);
                $perc_indenizacao = round($perc_indenizacao * 100, 2);
                $perc_indenizacao = $perc_indenizacao < 0 ? 0 : $perc_indenizacao;
                $valorIndenizacao = ($perc_indenizacao/100) * $soma_lmga;

                $arr[$indice]['vl_indenizacao'] = $Row['vl_indenizacao'] = round($valorIndenizacao, 2);
            }

            $Proposta      = $modelProposta->find($Row['id_proposta_original'])->current();
            $Beneficiarios = $Proposta->beneficiariosRelatorio($modelBeneficiarios);

            $count                = 1;
            $percentBenef         = 0;
            $somaBenef            = 0;
            $totalBenef           = 0;
            $totalPagoLiquidacoes = 0;

            $valoresItensPagosProcesso = $dadosTotalPagosLiquidacoes[$Row['id_processo']];

            foreach ($valoresItensPagosProcesso as $item) {
                $totalPagoLiquidacoes += $item['vl_pagamento'];
            }

            $totalPagoLiquidacoes = number_format($totalPagoLiquidacoes, 2, '.', '');
            //se beneficiarios for um array e a cobertura do item sendo iterado for válida
            if(is_array($Beneficiarios) && !in_array($Row['id_cobertura'], $coberturasInvalidasBeneficiario)) {
            
                $modelAvisoFinalReplantio = new Sinistro2_Model_AvisosFinalReplantio();
                $destinatarioPagamento = $modelAvisoFinalReplantio->existeBeneficiarioAlterado((int)$Row['id_liquidacao']);
                $ocultarDadosSegurado = false;
                if($destinatarioPagamento){
                    $ocultarDadosSegurado = true;
                    //Pega só o beneficiário que foi configurado no aviso
                    $Beneficiarios = array_values(array_filter($Beneficiarios,function ($b) use ($destinatarioPagamento) {
                            return $b['id_beneficiario'] == $destinatarioPagamento;
                        }
                    ));
                }

                foreach($Beneficiarios as $benef){
                    $somaBenef += $benef['vl_limite_beneficio'];
                }
                
                foreach($Beneficiarios as $benef){

                    if($benef['ds_tipo_conta'] == 's'){
                        $ds_nome_beneficiario = $benef['ds_nome_banco'] ? substr($benef['ds_nome_banco'], 0 ,100) : '';
                    } else {
                        $ds_nome_beneficiario = $benef['ds_nome_beneficiarios'] ? substr($benef['ds_nome_beneficiarios'], 0, 100) : '';
                    }

                    if($count == 1){
                        $percentBenef = round(($benef['vl_limite_beneficio'] / $somaBenef),4);
                    } else {
                        $percentBenef = 1 - $percentBenef;
                    }

                    $vlBenef  = round(min($benef['vl_limite_beneficio'], ($Row['vl_indenizacao'] * $percentBenef)),2);

                    if($arBenef[$Row['id_proposta']][$benef['nr_cpf_cnpj']] + $vlBenef > $benef['vl_limite_beneficio']){
                        $vlBenef = $benef['vl_limite_beneficio'] - $arBenef[$Row['id_proposta']][$benef['nr_cpf_cnpj']];
                    }

                    if ($totalPagoLiquidacoes >= $somaBenef) {
                        $totalPagoLiquidacoes -= $vlBenef;
                        $vlBenef = 0;
                    } else {
                        $diferencaClausulaTotalPago = $somaBenef - $totalPagoLiquidacoes;
                        $vlBenef = $vlBenef > $diferencaClausulaTotalPago ? $diferencaClausulaTotalPago : $vlBenef;
                    }

                    $totalBenef += ($vlBenef > 0 ? $vlBenef : '0.0');
            
                    $arr[$indice]['ds_nome_beneficiario_'.$count]     = $ds_nome_beneficiario;
                    $arr[$indice]['ds_cpf_cnpj_beneficiario_'.$count] = $benef['nr_cpf_cnpj'];
                    $arr[$indice]['ds_status_'.$count]                = $benef['ds_status'];
                    $arr[$indice]['ds_valor_beneficiario_'.$count]    = ($vlBenef > 0 ? $vlBenef : '0.0');
                    $arr[$indice]['nu_conta_corrente_'.$count]        = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nu_conta_corrente']);
                    $arr[$indice]['nu_digito_conta_corrente_'.$count] = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nu_digito_conta_corrente']);
                    $arr[$indice]['nu_agencia_'.$count]               = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nu_agencia']);
                    $arr[$indice]['nu_digito_agencia_'.$count]        = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nu_digito_agencia']);
                    $arr[$indice]['nr_banco_'.$count]                 = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nr_banco']);
                    $mapaTipoConta = [
                        'Sim' => ['Conta Corrente'  => '11','Conta Poupança'  => '12',],
                        'Não' => ['Conta Corrente'  => '01','Conta Poupança'  => '02',],
                    ];
                    $tipoConta     = $benef['ds_tipo_conta'];
               
                    $contaConjunta = $benef['fl_conta_conjunta'];
                    $tipoContaBancaria = $mapaTipoConta[$contaConjunta][$tipoConta] ?? null;
    
                    $arr[$indice]['nr_tipo_conta_'.$count] = $tipoContaBancaria;
                    $arr[$indice]['dt_ultimo_arquivo_beneficiario_'.$count]   = $benef['dt_ultimo_arquivo_beneficiario'];

                    $arBenef[$Row['id_proposta']][$benef['nr_cpf_cnpj']] += $vlBenef;

                    if (!$isImportacaoIndenizacaoAgro) {
                        $arr[$indice]['ds_tipo_conta_'.$count] = $benef['ds_tipo_conta'];
                        $arr[$indice]['fl_conta_conjunta_'.$count] = empty($benef['ds_tipo_conta'])
                                ? ''
                                : $benef['fl_conta_conjunta'];
                    }

                    if($benef['dt_ultimo_arquivo_beneficiario']){
                        unset($date);
                        $date = str_replace('/', '-', $benef['dt_ultimo_arquivo_beneficiario']);
                        $arDatas[$indice][] = date('Y-m-d',strtotime($date));
                    }
                    $count++;
                }
                $difBenef = $Row['vl_indenizacao'] - $totalBenef;

                if($difBenef > 0.01 && !$ocultarDadosSegurado){
                    $arr[$indice]['ds_nome_beneficiario_'.$count]     = $Row['ds_nome_proponente']
                        ? substr($Row['ds_nome_proponente'], 0, 100)
                        : '';
                    $arr[$indice]['ds_cpf_cnpj_beneficiario_'.$count] = $Row['cpf_cnpj'];
                    $arr[$indice]['ds_valor_beneficiario_'.$count]    = $difBenef;
                    $arr[$indice]['ds_status_'.$count]                = $benef['ds_status'];
                    $arr[$indice]['nu_conta_corrente_'.$count]        = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_conta_corrente']);
                    $arr[$indice]['nu_digito_conta_corrente_'.$count] = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_digito_conta_corrente']);
                    $arr[$indice]['nu_agencia_'.$count]               = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_agencia']);
                    $arr[$indice]['nu_digito_agencia_'.$count]        = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_digito_agencia']);
                    $arr[$indice]['nr_banco_'.$count]                 = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nr_banco']);
                    $arr[$indice]['ds_tipo_conta_'.$count]            = $Row['ds_tipo_conta'];
                    $arr[$indice]['fl_conta_conjunta_'.$count]        = empty($Row['ds_tipo_conta']) ? '' : $Row['fl_conta_conjunta'];
                    $arr[$indice]['dt_ultimo_arquivo_beneficiario_'.$count] = $Row['dt_ultimo_arquivo_beneficiario'];

                    if (!$isImportacaoIndenizacaoAgro) {
                        $arr[$indice]['ds_tipo_conta_'.$count] = $Row['ds_tipo_conta'];
                        $arr[$indice]['fl_conta_conjunta_'.$count] = empty($Row['ds_tipo_conta'])
                                ? ''
                                : $Row['fl_conta_conjunta'];
                    }

                    if($Row['dt_ultimo_arquivo_beneficiario']){
                        unset($date);
                        $date = str_replace('/', '-', $Row['dt_ultimo_arquivo_beneficiario']);
                        $arDatas[$indice][] = date('Y-m-d',strtotime($date));
                    }
                }

            } elseif(is_array($Beneficiarios)){
           
                //se beneficiarios for um array e a cobertura do item sendo iterado for inválida
                $modelAvisoFinalReplantio = new Sinistro2_Model_AvisosFinalReplantio();
                $destinatarioPagamento = $modelAvisoFinalReplantio->existeBeneficiarioAlterado((int)$Row['id_liquidacao']);
                $ocultarDadosSegurado = false;
             
                if($destinatarioPagamento){
                    $ocultarDadosSegurado = true;
                    //Pega só o beneficiário que foi configurado no aviso
                    $Beneficiarios = array_values(array_filter($Beneficiarios,function ($b) use ($destinatarioPagamento) {
                            return $b['id_beneficiario'] == $destinatarioPagamento;
                        }
                    ));

                    foreach($Beneficiarios as $benef){
                        $somaBenef += $benef['vl_limite_beneficio'];
                    }
                
                    foreach($Beneficiarios as $benef){
                        if($benef['ds_tipo_conta'] == 's'){
                            $ds_nome_beneficiario = $benef['ds_nome_banco'] ? substr($benef['ds_nome_banco'], 0 ,100) : '';
                        } else {
                            $ds_nome_beneficiario = $benef['ds_nome_beneficiarios'] ? substr($benef['ds_nome_beneficiarios'], 0, 100) : '';
                        }

                        if($count == 1){
                            $percentBenef = round(($benef['vl_limite_beneficio'] / $somaBenef),4);
                        } else {
                            $percentBenef = 1 - $percentBenef;
                        }

                        $vlBenef  = round(min($benef['vl_limite_beneficio'], ($Row['vl_indenizacao'] * $percentBenef)),2);

                        if($arBenef[$Row['id_proposta']][$benef['nr_cpf_cnpj']] + $vlBenef > $benef['vl_limite_beneficio']){
                            $vlBenef = $benef['vl_limite_beneficio'] - $arBenef[$Row['id_proposta']][$benef['nr_cpf_cnpj']];
                        }

                        if ($totalPagoLiquidacoes >= $somaBenef) {
                            $totalPagoLiquidacoes -= $vlBenef;
                            $vlBenef = 0;
                        } else {
                            $diferencaClausulaTotalPago = $somaBenef - $totalPagoLiquidacoes;
                            $vlBenef = $vlBenef > $diferencaClausulaTotalPago ? $diferencaClausulaTotalPago : $vlBenef;
                        }

                        $totalBenef += ($vlBenef > 0 ? $vlBenef : '0.0');
                
                        $arr[$indice]['ds_nome_beneficiario_'.$count]     = $ds_nome_beneficiario;
                        $arr[$indice]['ds_cpf_cnpj_beneficiario_'.$count] = $benef['nr_cpf_cnpj'];
                        $arr[$indice]['ds_status_'.$count]                = $benef['ds_status'];
                        $arr[$indice]['ds_valor_beneficiario_'.$count]    = ($vlBenef > 0 ? $vlBenef : '0.0');
                        $arr[$indice]['nu_conta_corrente_'.$count]        = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nu_conta_corrente']);
                        $arr[$indice]['nu_digito_conta_corrente_'.$count] = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nu_digito_conta_corrente']);
                        $arr[$indice]['nu_agencia_'.$count]               = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nu_agencia']);
                        $arr[$indice]['nu_digito_agencia_'.$count]        = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nu_digito_agencia']);
                        $arr[$indice]['nr_banco_'.$count]                 = preg_replace("/[^A-Za-z0-9 ]/", '', $benef['nr_banco']);
                        $mapaTipoConta = ['Sim' => ['Conta Corrente'  => '11','Conta Poupança'  => '12',],'Não' => ['Conta Corrente'  => '01','Conta Poupança'  => '02',],];
                        $tipoConta     = $benef['ds_tipo_conta'];
                        $contaConjunta = $benef['fl_conta_conjunta'];
                        $tipoContaBancaria = $mapaTipoConta[$contaConjunta][$tipoConta] ?? null;
                        $arr[$indice]['nr_tipo_conta_'.$count] = $tipoContaBancaria;
                        $arr[$indice]['dt_ultimo_arquivo_beneficiario_'.$count]   = $benef['dt_ultimo_arquivo_beneficiario'];

                        $arBenef[$Row['id_proposta']][$benef['nr_cpf_cnpj']] += $vlBenef;

                        if (!$isImportacaoIndenizacaoAgro) {
                            $arr[$indice]['ds_tipo_conta_'.$count] = $benef['ds_tipo_conta'];
                            $arr[$indice]['fl_conta_conjunta_'.$count] = empty($benef['ds_tipo_conta'])
                                    ? ''
                                    : $benef['fl_conta_conjunta'];
                        }

                        if($benef['dt_ultimo_arquivo_beneficiario']){
                            unset($date);
                            $date = str_replace('/', '-', $benef['dt_ultimo_arquivo_beneficiario']);
                            $arDatas[$indice][] = date('Y-m-d',strtotime($date));
                        }
                        $count++;
                    }
                    $difBenef = $Row['vl_indenizacao'] - $totalBenef;

                    if($difBenef > 0.01 && !$ocultarDadosSegurado){
                        $arr[$indice]['ds_nome_beneficiario_'.$count]     = $Row['ds_nome_proponente']
                            ? substr($Row['ds_nome_proponente'], 0, 100)
                            : '';
                        $arr[$indice]['ds_cpf_cnpj_beneficiario_'.$count] = $Row['cpf_cnpj'];
                        $arr[$indice]['ds_valor_beneficiario_'.$count]    = $difBenef;
                        $arr[$indice]['ds_status_'.$count]                = $benef['ds_status'];
                        $arr[$indice]['nu_conta_corrente_'.$count]        = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_conta_corrente']);
                        $arr[$indice]['nu_digito_conta_corrente_'.$count] = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_digito_conta_corrente']);
                        $arr[$indice]['nu_agencia_'.$count]               = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_agencia']);
                        $arr[$indice]['nu_digito_agencia_'.$count]        = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_digito_agencia']);
                        $arr[$indice]['nr_banco_'.$count]                 = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nr_banco']);
                        $arr[$indice]['ds_tipo_conta_'.$count]            = $Row['ds_tipo_conta'];
                        $arr[$indice]['fl_conta_conjunta_'.$count]        = empty($Row['ds_tipo_conta']) ? '' : $Row['fl_conta_conjunta'];
                        $arr[$indice]['dt_ultimo_arquivo_beneficiario_'.$count] = $Row['dt_ultimo_arquivo_beneficiario'];
                        $mapaTipoConta = ['Sim' => ['Conta Corrente'  => '11','Conta Poupança'  => '12',],'Não' => ['Conta Corrente'  => '01','Conta Poupança'  => '02',],];
                        $tipoConta     = $Row['ds_tipo_conta'];
                        $contaConjunta = $Row['fl_conta_conjunta'];
                        $tipoContaBancaria = $mapaTipoConta[$contaConjunta][$tipoConta] ?? null;
                        $arr[$indice]['nr_tipo_conta_'.$count] = $tipoContaBancaria;


                        if (!$isImportacaoIndenizacaoAgro) {
                            $arr[$indice]['ds_tipo_conta_'.$count] = $Row['ds_tipo_conta'];
                            $arr[$indice]['fl_conta_conjunta_'.$count] = empty($Row['ds_tipo_conta'])
                                    ? ''
                                    : $Row['fl_conta_conjunta'];
                        }

                        if($Row['dt_ultimo_arquivo_beneficiario']){
                            unset($date);
                            $date = str_replace('/', '-', $Row['dt_ultimo_arquivo_beneficiario']);
                            $arDatas[$indice][] = date('Y-m-d',strtotime($date));
                        }
                    }
                }else{
                    
                    $arr[$indice]['ds_nome_beneficiario_1']     = substr($Row['ds_nome_proponente'], 0, 100);
                    $arr[$indice]['ds_cpf_cnpj_beneficiario_1'] = $Row['cpf_cnpj'];
                    $arr[$indice]['ds_valor_beneficiario_1']    = round($Row['vl_indenizacao'], 2);
                    $arr[$indice]['ds_status_'.$count]          ='-';
                    $arr[$indice]['nu_conta_corrente_1']        = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_conta_corrente']);
                    $arr[$indice]['nu_digito_conta_corrente_1'] = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_digito_conta_corrente']);
                    $arr[$indice]['nu_agencia_1']               = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_agencia']);
                    $arr[$indice]['nu_digito_agencia_1']        = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_digito_agencia']);
                    $arr[$indice]['nr_banco_1']                 = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nr_banco']);
                    $arr[$indice]['dt_ultimo_arquivo_beneficiario_1'] = $Row['dt_ultimo_arquivo_beneficiario'];
                    $mapaTipoConta = [
                        'Sim' => ['Conta Corrente'  => '11','Conta Poupança'  => '12',],
                        'Não' => ['Conta Corrente'  => '01','Conta Poupança'  => '02',],
                    ];
                    $tipoConta     = $Row['ds_tipo_conta'];
                   
                    $contaConjunta = $Row['fl_conta_conjunta'];

                    $tipoContaBancaria = $mapaTipoConta[$contaConjunta][$tipoConta] ?? null;
                    $arr[$indice]['nr_tipo_conta_1'] = $tipoContaBancaria;
                    if (!$isImportacaoIndenizacaoAgro) {
                        $arr[$indice]['ds_tipo_conta_1'] = $Row['ds_tipo_conta'];
                        $arr[$indice]['fl_conta_conjunta_1'] = empty($Row['ds_tipo_conta'])
                            ? ''
                            : $Row['fl_conta_conjunta'];
                    }

                    if($Row['dt_ultimo_arquivo_beneficiario']){
                        unset($date);
                        $date = str_replace('/', '-', $Row['dt_ultimo_arquivo_beneficiario']);
                        $arDatas[$indice][] = date('Y-m-d',strtotime($date));
                    }
                }
            }else {
                //se beneficiarios não for um array
                $arr[$indice]['ds_nome_beneficiario_1']     = substr($Row['ds_nome_proponente'], 0, 100);
                $arr[$indice]['ds_cpf_cnpj_beneficiario_1'] = $Row['cpf_cnpj'];
                $arr[$indice]['ds_valor_beneficiario_1']    = round($Row['vl_indenizacao'], 2);
                $arr[$indice]['ds_status_'.$count]          ='-';
                $arr[$indice]['nu_conta_corrente_1']        = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_conta_corrente']);
                $arr[$indice]['nu_digito_conta_corrente_1'] = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_digito_conta_corrente']);
                $arr[$indice]['nu_agencia_1']               = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_agencia']);
                $arr[$indice]['nu_digito_agencia_1']        = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nu_digito_agencia']);
                $arr[$indice]['nr_banco_1']                 = preg_replace("/[^A-Za-z0-9 ]/", '', $Row['nr_banco']);
                $arr[$indice]['dt_ultimo_arquivo_beneficiario_1'] = $Row['dt_ultimo_arquivo_beneficiario'];

                if (!$isImportacaoIndenizacaoAgro) {
                    $arr[$indice]['ds_tipo_conta_1'] = $Row['ds_tipo_conta'];
                    $arr[$indice]['fl_conta_conjunta_1'] = empty($Row['ds_tipo_conta'])
                        ? ''
                        : $Row['fl_conta_conjunta'];
                }

                $mapaTipoConta = ['Sim' => ['Conta Corrente'  => '11','Conta Poupança'  => '12',],'Não' => ['Conta Corrente'  => '01','Conta Poupança'  => '02',],];
                $tipoConta     = $Row['ds_tipo_conta'];
                $contaConjunta = $Row['fl_conta_conjunta'];
                $tipoContaBancaria = $mapaTipoConta[$contaConjunta][$tipoConta] ?? null;
              
                $arr[$indice]['nr_tipo_conta_'.$count] = $tipoContaBancaria;
                if($Row['dt_ultimo_arquivo_beneficiario']){
                    unset($date);
                    $date = str_replace('/', '-', $Row['dt_ultimo_arquivo_beneficiario']);
                    $arDatas[$indice][] = date('Y-m-d',strtotime($date));
                }
            }

            //$arr[$indice]['dt_base_pagamento'] = max($arDatas[$indice]);
            unset($arDatas);

            if ($isImportacaoIndenizacaoAgro && !empty($Row['dt_criacao_pagamento_adicional'])) {
                // Liquidação no status indenização paga possui pagamento adicional
                $arr[$indice]['dt_base_pagamento'] = Agro_Util::formatDate($Row['dt_criacao_pagamento_adicional'], 'dd/MM/yyyy');
                $arr[$indice]['ds_valor_beneficiario_1'] = $Row['vl_total_corrigido'] - $Row['vl_indenizacao_paga'];
            } elseif ($Row['ds_status'] == 'Indenização paga') {
                unset($arr[$indice]);
            }
        
            
            $indice++;
        }

        return $arr;
    }

    public function getConteudoCsv(array $rs, array $titles)
    {
        $csv = new Agro_Plugin_Rs2Csv();

        $csv->setIgnoreHeader(true);
        $csv->setRecordSet($rs);
        $csv->setTitles($titles);
        $csv->setSeparator(";");

        return $csv->getCsvContent();
    }

    public function gerarRelatorio(
        array $rs,
        array $titles,
        string $tipo,
        array $format = [],
        string $path = '',
        bool $isImportacaoIndenizacaoAgro = false
    ) {
        switch ($tipo) {
            case 'excel':
                $csv = new Agro_Plugin_Rs2Csv();

                if ($isImportacaoIndenizacaoAgro) {
                    $csv->setIgnoreHeader(true);
                }

                $csv->setRecordSet($rs);
                $csv->setType("application/octet-stream");
                $csv->setFileName(basename($path));
                $csv->setDisposition("attachment");
                $csv->setTitles($titles);
                $csv->setSeparator(";");

                $csv->getCsv(true, $path);

                break;
            case 'html':
                $html = new Agro_Plugin_Rs2Html();
                $html->setRecordSet($rs);
                $html->setTitles($titles);
                $html->setFormat($format);
                $html->getHtml();

                break;
            default:
                break;
        }
    }
}
